选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

为混合节点配置 CNI

聚焦模式
为混合节点配置 CNI - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

Amazon EKS 混合节点功能支持将 Cilium 和 Calico 作为容器网络接口(CNI)。您必须为混合节点安装 CNI 才能使其做好服务工作负载的准备。在 CNI 开始运行之前,混合节点的状态会显示为 Not Ready。您可以使用自己选择的工具(例如 Helm)来管理这些 CNI。Amazon VPC CNI 与混合节点功能不兼容,并且 VPC CNI 使用 eks.amazonaws.com/compute-type: hybrid 标签配置了反亲和性。

CNI 版本兼容性

对于 Amazon EKS 支持的每个 Kubernetes 版本,EKS 混合节点都支持并推荐使用 Calico 3.29.x 版本。

对于 Amazon EKS 支持的每个 Kubernetes 版本,EKS 混合节点都支持并推荐使用 Cilium 1.16.x 版本。

支持的功能

AWS 支持将 Cilium 和 Calico 的以下功能用于混合节点。如果您计划使用不属于 AWS 支持范围的功能,我们建议您获得插件的商业支持,或者建立内部的故障排除专业知识并将相关修复贡献给 CNI 插件项目。

功能 Cilium Calico

Kubernetes 网络合规性

支持

控制面板到节点的连接

支持

控制面板到容器组的连接

支持

生命周期管理

安装、升级、删除

安装、升级、删除

联网模式

VXLAN

VXLAN

IP 地址管理(IPAM)

集群范围(Cilium IPAM)

Calico IPAM

IP 系列

IPv4

IPv4

BGP

是(Cilium 控制面板)

在混合节点上安装 Cilium

  1. 确保已在命令行环境中安装了 helm CLI。有关安装说明,请参阅 Helm 文档

  2. 安装 Cilium Helm 存储库。

    helm repo add cilium https://helm.cilium.io/
  3. 创建一个名为 cilium-values.yaml 的 YAML 文件。如果您配置了至少一个远程容器组网络,请为 clusterPoolIPv4PodCIDRList 配置相同的容器组 CIDR。在集群上部署 Cilium 后,不应该更改 clusterPoolIPv4PodCIDRList。您可以根据每个节点所需的容器组数量配置 clusterPoolIPv4MaskSize,具体请参阅 Cilium 文档中的 Expanding the cluster pool。有关适用于 Cilium 的完整 Helm 值列表,请参阅 Cilium 文档中的 Helm reference。以下示例将所有 Cilium 组件配置为仅在混合节点上运行,因为这些组件都带有 eks.amazonaws.com/compute-type: hybrid 标签。

    默认情况下,对于离开集群的所有容器组流量,Cilium 会将其源 IP 地址伪装为该节点的 IP 地址。这使得 Cilium 既可以使用配置了远程容器组网络的 Amazon EKS 集群运行,也可以使用未配置远程容器组网络的集群运行。如果您为 Cilium 部署禁用了伪装功能,则必须为 Amazon EKS 集群配置远程容器组网络,并且必须使用本地网络公开您的容器组地址。如果在混合节点上运行 Webhook,则必须为集群配置远程容器组网络,并且必须使用本地网络公开您的容器组地址。

    在本地网络中公开容器组地址的一种常用方法是使用 BGP。要将 BGP 与 Cilium 配合使用,必须设置 bgpControlPlane.enabled: true。要详细了解 Cilium 对 BGP 的 支持,请参阅 Cilium 文档中的 Cilium BGP Control Plane

    affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize: 25 clusterPoolIPv4PodCIDRList: - POD_CIDR operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false envoy: enabled: false
  4. 在集群上安装 Cilium。请将 CILIUM_VERSION 替换为所需的 Cilium 版本。建议运行 Cilium 次要版本的最新补丁版本。您可以在 Cilium 文档的 Stable Releases section 部分找到给定次要 Cilium 版本的最新补丁版本。如果要为部署启用 BGP,请在下面的命令中添加 --set bgpControlPlane.enabled=true 标志。如果使用特定的 kubeconfig 文件,请在 Helm install 命令中使用 --kubeconfig 标志。

    helm install cilium cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  5. 您可以使用以下命令确认 Cilium 安装是否成功。您应会看到 cilium-operator 部署以及在每个混合节点上运行的 cilium-agent。此外,混合节点现在的状态应为 Ready。有关如何为 Cilium 配置 BGP 的信息,请继续执行下一步。

    kubectl get pods -n kube-system
    NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
    kubectl get nodes
    NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599
  6. 要通过将 BGP 与 Cilium 结合使用,来向本地网络公开容器组地址,您必须已经安装了 Cilium 并配置了 bgpControlPlane.enabled: true。要在 Cilium 中配置 BGP,请先创建一个包含 CiliumBGPClusterConfig 且名为 cilium-bgp-cluster.yaml 的文件,并将 peerAddress 设置为要建立对等连接的本地路由器 IP。根据本地路由器配置来配置 localASNpeerASN

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPClusterConfig metadata: name: cilium-bgp spec: nodeSelector: matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid bgpInstances: - name: "rack0" localASN: ONPREM_ROUTER_ASN peers: - name: "onprem-router" peerASN: PEER_ASN peerAddress: ONPREM_ROUTER_IP peerConfigRef: name: "cilium-peer"
  7. 将 Cilium BGP 集群配置应用到集群。

    kubectl apply -f cilium-bgp-cluster.yaml
  8. CiliumBGPPeerConfig 资源定义 BGP 对等连接配置。多个对等体可以共享相同的配置并引用共同的 CiliumBGPPeerConfig 资源。创建一个名为 cilium-bgp-peer.yaml 的文件,来配置本地网络的对等连接配置。有关配置选项的完整列表,请参阅 Cilium 文档中的 BGP Peer Configuration

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPPeerConfig metadata: name: cilium-peer spec: timers: holdTimeSeconds: 30 keepAliveTimeSeconds: 10 gracefulRestart: enabled: true restartTimeSeconds: 120 families: - afi: ipv4 safi: unicast advertisements: matchLabels: advertise: "bgp"
  9. 将 Cilium BGP 对等连接配置应用到集群。

    kubectl apply -f cilium-bgp-peer.yaml
  10. CiliumBGPAdvertisement 资源用于定义各种广播类型以及与之相关的属性。创建一个名为 cilium-bgp-advertisement.yaml 的文件,并使用所需的设置配置 CiliumBGPAdvertisement 资源。

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisements labels: advertise: bgp spec: advertisements: - advertisementType: "PodCIDR" - advertisementType: "Service" service: addresses: - ClusterIP - ExternalIP - LoadBalancerIP
  11. 将 Cilium BGP 广播配置应用到集群。

    kubectl apply -f cilium-bgp-advertisement.yaml

    您可以通过 Cilium CLI,使用 cilium bgp peers 命令来确认 BGP 对等连接是否有效。您应会在输出中看到您环境的正确值,会话状态为 established。有关故障排除的更多信息,请参阅 Cilium 文档中的 Troubleshooting and Operations Guide

在混合节点上升级 Cilium

在升级 Cilium 部署之前,请仔细查看 Cilium 升级文档和升级说明,以了解目标 Cilium 版本中的更改。

  1. 确保已在命令行环境中安装了 helm CLI。有关安装说明,请参阅 Helm 文档

  2. 安装 Cilium Helm 存储库。

    helm repo add cilium https://helm.cilium.io/
  3. 运行 Cilium 升级预检。请将 CILIUM_VERSION 替换为您的目标 Cilium 版本。建议运行 Cilium 次要版本的最新补丁版本。您可以在 Cilium 文档的 Stable Releases section 部分找到给定次要 Cilium 版本的最新补丁版本。

    helm install cilium-preflight cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
  4. 应用 cilium-preflight.yaml 后,请确保状态为 READY 的容器组(pod)数量与正在运行的 Cilium 容器组(pod)数量相同。

    kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
  5. 一旦状态为 READY 的容器组数量相等,请确保 Cilium 执行前部署也标记为 READY 1/1。如果显示为 READY 0/1,请先查阅 CNP Validation 部分并解决部署问题,然后再继续升级。

    kubectl get deployment -n kube-system cilium-pre-flight-check -w
    NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
  6. 删除预检

    helm uninstall cilium-preflight --namespace kube-system
  7. 在正常的集群操作期间,所有 Cilium 组件都应运行相同的版本。以下步骤介绍了如何将所有组件从一个稳定版本升级到更高的稳定版本。从一个次要版本升级到另一个次要版本时,建议先升级到现有 Cilium 次要版本的最新补丁版本。为尽可能减少中断,请将 upgradeCompatibility 选项设置为此集群中安装的初始 Cilium 版本。

    在运行 helm upgrade 命令之前,请将部署值保留在 cilium-values.yaml 中或为您的设置使用 --set 命令行选项。升级操作会覆盖 Cilium ConfigMap,因此在升级时传递配置值至关重要。如果使用 BGP,建议使用 --set bgpControlPlane=true 命令行选项,而不是在值文件中提供此信息。

    helm upgrade cilium cilium/cilium --version CILIUM_VERSION \ --namespace kube-system \ --set upgradeCompatibility=1.X \ -f cilium-values.yaml
  8. (可选)如果由于问题出现需要回滚升级,请运行以下命令。

    helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system

从混合节点中删除 Cilium

  1. 运行以下命令从集群中卸载所有 Cilium 组件。请注意,卸载 CNI 可能会影响节点和容器组的运行状况,因此不应在生产集群上执行卸载。

    helm uninstall cilium --namespace kube-system

    从集群中移除 CNI 时,Cilium 配置的接口和路由默认不会移除,有关更多信息,请参阅 GitHub issue

  2. 要清理磁盘上的配置文件和资源,如果使用的是标准配置目录,则可以移除 GitHub Cilium 存储库中 cni-uninstall.sh 脚本所显示的文件。

  3. 要从集群中移除 Cilium 自定义资源定义(CRD),可以运行以下命令。

    kubectl get crds -oname | grep "cilium" | xargs kubectl delete

在混合节点上安装 Calico

  1. 确保已在命令行环境中安装了 helm CLI。有关安装说明,请参阅 Helm 文档

  2. 安装 Cilium Helm 存储库。

    helm repo add projectcalico https://docs.tigera.io/calico/charts
  3. 创建一个名为 calico-values.yaml 的 YAML 文件,为 Calico 配置亲和性,以在混合节点上运行。有关不同 Calico 联网模式的更多信息,请参阅 Calico 文档中的 Determining the best networking option

    1. 请将 POD_CIDR 替换为容器组的 CIDR 范围。如果为 Amazon EKS 集群配置了远程容器组网络,则您为 Calico 指定的 POD_CIDR 应与远程容器组网络相同。例如,10.100.0.0/24

    2. 请将 CIDR_SIZE 替换为要分配给每个节点的 CIDR 分段大小。例如,25 对应于 /25 的分段大小。有关 CIDR blockSize 和更改 blockSize 的更多信息,请参阅 Calico 文档中的 Change IP pool block size

    3. 在下面的示例中,natOutgoing 已启用但 bgp 已禁用。在此配置中,Calico 既可以在配置了远程容器组网络的 Amazon EKS 集群上运行,也可以在未配置远程容器组网络的集群上运行。如果您将 natOutgoing 设置为禁用,则必须为集群配置远程容器组网络,并且本地网络必须能够正确路由发往容器组 CIDR 的流量。在本地网络中公开容器组地址的一种常用方法是使用 BGP。要将 BGP 与 Calico 结合使用,必须启用 bgp。以下示例将所有 Calico 组件配置为仅在混合节点上运行,因为这些组件都带有 eks.amazonaws.com/compute-type: hybrid 标签。如果在混合节点上运行 Webhook,则必须为集群配置远程容器组网络,并且必须使用本地网络公开您的容器组地址。以下示例配置的值为 controlPlaneReplicas: 1,如果您有多个混合节点并希望以高可用性方式运行 Calico 控制面板组件,请增加该值。

      installation: enabled: true cni: type: Calico ipam: type: Calico calicoNetwork: bgp: Disabled ipPools: - cidr: POD_CIDR blockSize: CIDR_SIZE encapsulation: VXLAN natOutgoing: Enabled nodeSelector: eks.amazonaws.com/compute-type == "hybrid" controlPlaneReplicas: 1 controlPlaneNodeSelector: eks.amazonaws.com/compute-type: hybrid calicoNodeDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid csiNodeDriverDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid calicoKubeControllersDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid typhaDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid
  4. 在集群上安装 Calico。请将 CALICO_VERSION 替换为需要的 Calico 版本(例如 3.29.0)替换,请参阅 Calico releases 以查找 Calico 次要版本的最新补丁版本。建议运行 Calico 次要版本的最新补丁版本。如果您使用特定的 kubeconfig 文件,请使用 --kubeconfig 标志。

    helm install calico projectcalico/tigera-operator \ --version CALICO_VERSION \ --namespace kube-system \ -f calico-values.yaml
  5. 您可以使用以下命令确认 Calico 安装是否成功。您应会看到 tigera-operator 部署、在每个混合节点上运行的 calico-node 代理,以及部署的 calico-apiservercsi-node-drivercalico-kube-controllers。此外,混合节点现在的状态应为 Ready。如果使用 natOutgoing: Disabled,则在向本地网络公开容器组地址之前,所有 Calico 组件都将无法成功启动。有关如何为 Calico 配置 BGP 的信息,请继续执行下一步。

    kubectl get pods -A
    NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-6c77bb6d46-2n8mq 1/1 Running 0 69s calico-system calico-kube-controllers-7c5f8556b5-7h267 1/1 Running 0 68s calico-system calico-node-s5nnk 1/1 Running 0 68s calico-system calico-typha-6487cc9d8c-wc5jm 1/1 Running 0 69s calico-system csi-node-driver-cv42d 2/2 Running 0 68s kube-system coredns-7bb495d866-2lc9v 1/1 Running 0 6m27s kube-system coredns-7bb495d866-2t8ln 1/1 Running 0 157m kube-system kube-proxy-lxzxh 1/1 Running 0 18m kube-system tigera-operator-f8bc97d4c-28b4d 1/1 Running 0 90s
    kubectl get nodes
    NAME STATUS ROLES AGE VERSION mi-0c6ec2f6f79176565 Ready <none> 5h13m v1.31.0-eks-a737599
  6. 如果您在不启用 BGP 的情况下安装 Calico,请跳过此步骤。要配置 BGP,请创建一个名为 calico-bgp.yaml 的文件,其中包含一个 BGPPeer 配置和一个 BGPConfiguration。区分 BGPPeerBGPConfiguration 十分重要。BGPPeer 是 Calico 集群中的节点将建立对等连接并且启用了 BGP 的路由器或远程资源。BGPPeer 配置中的 asNumber 与 Cilium 设置 peerASN 类似。BGPConfiguration 会应用到每个 Calico 节点,BGPConfigurationasNumber 等效于 Cilium 设置 localASN。请将以下示例中的 ONPREM_ROUTER_IPONPREM_ROUTER_ASNLOCAL_ASN 替换为本地环境的相应值。keepOriginalNextHop: true 设置用于确保每个节点仅公开其拥有的容器组网络 CIDR。

    apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: calico-hybrid-nodes spec: peerIP: ONPREM_ROUTER_IP asNumber: ONPREM_ROUTER_ASN keepOriginalNextHop: true --- apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: nodeToNodeMeshEnabled: false asNumber: LOCAL_ASN
  7. 将此文件应用于集群。

    kubectl apply -f calico-bgp.yaml
  8. 使用以下命令确认 Calico 容器组正在运行。

    kubectl get pods -n calico-system -w
    NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-598bf99b6c-2vltk 1/1 Running 0 3h24m calico-system calico-kube-controllers-75f84bbfd6-zwmnx 1/1 Running 31 (59m ago) 3h20m calico-system calico-node-9b2pg 1/1 Running 0 5h17m calico-system calico-typha-7d55c76584-kxtnq 1/1 Running 0 5h18m calico-system csi-node-driver-dmnmm 2/2 Running 0 5h18m kube-system coredns-7bb495d866-dtn4z 1/1 Running 0 6h23m kube-system coredns-7bb495d866-mk7j4 1/1 Running 0 6h19m kube-system kube-proxy-vms28 1/1 Running 0 6h12m kube-system tigera-operator-55f9d9d565-jj9bg 1/1 Running 0 73m

如果您在这些步骤中遇到问题,请参阅 Calico 文档中的 troubleshooting guidance

在混合节点上升级 Calico

在升级 Calico 部署之前,请仔细查看 Calico 升级文档release notes,以了解目标 Calico 版本中的更改。升级步骤因您是否使用的是 Helm、Calico 操作符以及数据存储的类型而异。以下步骤假设使用 Helm。

  1. 下载您要升级到的 Calico 版本的操作符清单。请将 CALICO_VERSION 替换为要升级到的版本,例如 v3.29.0。务必要在 major.minor.patch 前面加上 v

    kubectl apply --server-side --force-conflicts \ -f https://raw.githubusercontent.com/projectcalico/calico/CALICO_VERSION/manifests/operator-crds.yaml
  2. 运行 helm upgrade 以升级 Calico 部署。请将 CALICO_VERSION 替换为要升级到的版本,例如 v3.29.0。根据您用于安装 Calico 的配置值创建 calico-values.yaml 文件。

    helm upgrade calico projectcalico/tigera-operator \ --version CALICO_VERSION \ --namespace kube-system \ -f calico-values.yaml

从混合节点中删除 Calico

  1. 运行以下命令从集群中卸载 Calico 组件。请注意,卸载 CNI 可能会影响节点和容器组(pod)的运行状况,因此不应在生产集群上执行卸载。如果将 Calico 安装在除 kube-system 以外的命名空间中,请更改下面命令中的命名空间。

    helm uninstall calico --namespace kube-system

    请注意,从集群中移除 CNI 时,默认情况下不会移除 Calico 配置的接口和路由。

  2. 要清理磁盘上的配置文件和资源,请从 /opt/cni/etc/cni 目录中移除 Calico 文件。

  3. 要从集群中移除 Calico CRD,请运行以下命令。

    kubectl get crds -oname | grep "calico" | xargs kubectl delete
    kubectl get crds -oname | grep "tigera" | xargs kubectl delete
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。