帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
为混合节点配置 CNI
Cilium 是 AWS 支持的 Amazon EKS 混合节点功能容器网络接口(CNI)。您必须为混合节点安装 CNI 才能使其做好服务工作负载的准备。在 CNI 开始运行之前,混合节点的状态会显示为 Not Ready
。您可以使用自己选择的工具(例如 Helm)来管理该 CNI。本页上的说明涵盖了 Cilium 生命周期管理(安装、升级、删除)。有关如何配置 Cilium 的入口、负载均衡和网络策略的信息,请参阅Cilium 入口和 Cilium 网关概述、服务类型 LoadBalancer和为混合节点配置 Kubernetes 网络策略。
在 AWS 云中的节点上运行时,AWS 不支持 Cilium。Amazon VPC CNI 与混合节点功能不兼容,并且 VPC CNI 使用 eks.amazonaws.com/compute-type: hybrid
标签配置了反亲和性。
本页之前的 Calico 文档已移至 EKS Hybrid Examples Repository
版本兼容性
对于 Amazon EKS 支持的每个 Kubernetes 版本,EKS 混合节点都支持 Cilium v1.17.x
版本。
有关 Amazon EKS 支持的 Kubernetes 版本,请参阅 Kubernetes 版本支持。EKS 混合节点功能提供的 Kubernetes 版本支持与具有云端节点的 Amazon EKS 集群相同。
支持的功能
AWS 维护基于开源 Cilium 项目
AWS 为 Cilium 以下功能的默认配置提供技术支持,以用于 EKS 混合节点。如果您计划使用不属于 AWS 支持范围的功能,建议您获得 Cilium 的替代商业支持,或者利用内部专业知识对 Cilium 项目进行问题排查并提供修复。
Cilium 功能 | 由 AWS 支持 |
---|---|
Kubernetes 网络合规性 |
是 |
核心集群连接性 |
是 |
IP 系列 |
IPv4 |
生命周期管理 |
Helm |
联网模式 |
VXLAN 封装 |
IP 地址管理(IPAM) |
Cilium IPAM 集群范围 |
网络策略 |
Kubernetes 网络策略 |
边界网关协议(BGP) |
Cilium BGP 控制面板 |
Kubernetes 入口 |
Cilium 入口、Cilium 网关 |
服务 LoadBalancer IP 分配 |
Cilium 负载均衡器 IPAM |
服务 LoadBalancer IP 地址通告 |
Cilium BGP 控制面板 |
kube-proxy 替换 |
是 |
Cilium 注意事项
-
Helm 存储库:AWS 在 Amazon EKS Cilium/Cilium
的 Amazon Elastic Container Registry Public(Amazon ECR Public)中托管 Cilium Helm 图表。您可以在 helm
命令中通过以下 URI 来使用此存储库:oci://public.ecr.aws/eks/cilium/cilium:1.17.6-0
。本主题中的命令使用此存储库。请注意,某些helm repo
命令对于 Amazon ECR Public 中的 Helm 存储库无效,因此您无法从本地 Helm 存储库名称中引用此存储库。因此请在大多数命令中使用完整的 URI。 -
默认情况下,Cilium 配置为在覆盖/隧道模式下运行,并以 VXLAN 为封装方法
。此模式对底层物理网络的要求最低。 -
默认情况下,对于离开集群的所有容器组流量,Cilium 会将其源 IP 地址伪装
为该节点的 IP 地址。如果禁用伪装功能,则您的容器组(pod)CIDR 必须可在本地网络上路由。 -
如果在混合节点上运行 Webhook,则您的容器组(pod)CIDR 必须可在本地网络上路由。如果容器组 CIDR 无法在本地网络上路由,则建议在同一集群中的云端节点上运行 Webhook。有关更多信息,请参阅 为混合节点配置 Webhook 和 准备混合节点的联网。
-
AWS 建议使用 Cilium 的内置 BGP 功能,使您的容器组(pod)CIDR 可在本地网络上路由。有关如何为 Cilium BGP 配置混合节点的更多信息,请参阅为混合节点配置 Cilium BGP。
-
Cilium 中的默认 IP 地址管理(IPAM)称为集群范围
,其中 Cilium 管理器根据用户配置的容器组(pod)CIDR 为每个节点分配 IP 地址。
在混合节点上安装 Cilium
过程
-
创建一个名为
cilium-values.yaml
的 YAML 文件。以下示例通过设置 Cilium 代理和管理器的eks.amazonaws.com/compute-type: hybrid
标签的亲和性,将 Cilium 配置为仅在混合节点上运行。-
使用为 EKS 集群的远程容器组(pod)网络配置的相同 容器组(pod)CIDR,对
clusterPoolIpv4PodCIDRList
进行配置。例如10.100.0.0/24
。Cilium 管理器从配置的clusterPoolIpv4PodCIDRList
IP 空间内分配 IP 地址切片。容器组(pod)CIDR 不得与本地节点 CIDR、VPC CIDR 或 Kubernetes 服务 CIDR 重叠。 -
根据每个节点所需的容器组数量配置
clusterPoolIpv4MaskSize
。例如,25
对应于分段大小 /25,每个节点 128 个容器组。 -
在集群上部署 Cilium 之后,请勿更改
clusterPoolIpv4PodCIDRList
或clusterPoolIpv4MaskSize
,请参阅 Expanding the cluster pool了解更多信息。 -
如果在 kube-proxy 替换模式下运行 Cilium,请在 Helm 值中设置
kubeProxyReplacement: "true"
,并确保在与 Cilium 相同的节点上没有运行现有的 kube-proxy 部署。 -
以下示例禁用了 Cilium 用于 L7 网络策略和入口的 Envoy 第 7 层(L7)代理。有关更多信息,请参阅为混合节点配置 Kubernetes 网络策略和Cilium 入口和 Cilium 网关概述。
-
以下示例配置
loadBalancer.serviceTopology
:true
,以便在您为服务配置了服务流量分发功能的情况下,该功能可以正常运行。有关更多信息,请参阅 配置服务流量分布。 -
有关适用于 Cilium 的完整 Helm 值列表,请参阅 Cilium 文档中的 Helm reference
。 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
loadBalancer: serviceTopology: true operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false loadBalancer: serviceTopology: true envoy: enabled: false kubeProxyReplacement: "false"
-
-
在集群上安装 Cilium。
-
请将
CILIUM_VERSION
替换为某个 Cilium 版本(例如1.17.5
)。建议使用 Cilium 次要版本的最新补丁版本。您可以使用helm search repo cilium/cilium --versions
命令在本地 Helm 存储库中找到可用的最新补丁版本。 -
如果使用特定的 kubeconfig 文件,请在 Helm install 命令中使用
--kubeconfig
标志。helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version
CILIUM_VERSION
\ --namespace kube-system \ --values cilium-values.yaml
-
-
使用以下命令确认 Cilium 安装是否成功。您应会看到
cilium-operator
部署以及在每个混合节点上运行的cilium-agent
。此外,混合节点现在的状态应为Ready
。有关如何配置 Cilium BGP 以向本地网络通告您的容器组(pod)CIDR 的信息,请转到为混合节点配置 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
在混合节点上升级 Cilium
在升级 Cilium 部署之前,请仔细查看 Cilium 升级文档
-
确保已在命令行环境中安装了
helm
CLI。有关安装说明,请参阅 Helm 文档。 -
运行 Cilium 升级预检。请将
CILIUM_VERSION
替换为您的目标 Cilium 版本。建议运行 Cilium 次要版本的最新补丁版本。您可以在 Cilium 文档的 Stable Releases section部分找到给定次要 Cilium 版本的最新补丁版本。 helm install cilium-preflight oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
-
应用
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
-
一旦状态为 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
-
删除预检
helm uninstall cilium-preflight --namespace kube-system
-
在运行
helm upgrade
命令之前,请将部署值保留在existing-cilium-values.yaml
中,或在运行升级命令时为您的设置使用--set
命令行选项。升级操作会覆盖 Cilium ConfigMap,因此在升级时传递配置值至关重要。helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
-
在正常的集群操作期间,所有 Cilium 组件都应运行相同的版本。以下步骤介绍了如何将所有组件从一个稳定版本升级到更高的稳定版本。从一个次要版本升级到另一个次要版本时,建议先升级到现有 Cilium 次要版本的最新补丁版本。为尽可能减少中断,请将
upgradeCompatibility
选项设置为此集群中安装的初始 Cilium 版本。helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium --version
CILIUM_VERSION
\ --namespace kube-system \ --set upgradeCompatibility=1.X
\ -f existing-cilium-values.yaml -
(可选)如果由于问题出现需要回滚升级,请运行以下命令。
helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system
从混合节点中删除 Cilium
-
运行以下命令从集群中卸载所有 Cilium 组件。请注意,卸载 CNI 可能会影响节点和容器组(pod)的运行状况,因此不应在生产集群上执行卸载。
helm uninstall cilium --namespace kube-system
从集群中移除 CNI 时,Cilium 配置的接口和路由默认不会移除,有关更多信息,请参阅 GitHub issue
。 -
要清理磁盘上的配置文件和资源,如果使用的是标准配置目录,则可以移除 GitHub Cilium 存储库中
cni-uninstall.sh
脚本所显示的文件。 -
要从集群中移除 Cilium 自定义资源定义(CRD),可以运行以下命令。
kubectl get crds -oname | grep "cilium" | xargs kubectl delete