設定混合節點的 CNI - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

設定混合節點的 CNI

Cilium 是 AWS 支援的 Amazon EKS 混合節點的容器網路介面 (CNI)。您必須為混合節點安裝 CNI,才能做好準備以為工作負載提供服務。在 CNI 執行之前,混合節點會顯示為 Not Ready 狀態。您可以使用您選擇的工具 (例如 Helm) 來管理 CNI。此頁面的說明涵蓋 Cilium 生命週期管理 (安裝、升級、刪除)。如需如何為傳入、載入平衡和網路政策設定 Cilium,請參閱 Cilium Ingress 和 Cilium Gateway 概觀服務類型 LoadBalancer設定混合節點的 Kubernetes 網路政策

當在 AWS 雲端節點上執行時,AWS 不支援 Cilium。Amazon VPC CNI 與混合節點不相容,且 VPC CNI 已針對 eks.amazonaws.com/compute-type: hybrid 標籤設定反親和性。

此頁面上先前的 Calico 文件已移至 EKS 混合範例儲存庫

版本相容性

對於 Amazon EKS 支援的每個 Kubernetes 版本,EKS 混合節點都支援 Cilium 版本 v1.17.x

如需 Amazon EKS 支援的 Kubernetes 版本,請參閱 Kubernetes 版本支援。EKS 混合節點對包含雲端節點的 Amazon EKS 叢集具有相同的 Kubernetes 版本支援。

支援的功能

AWS 會維護基於開放原始碼 Cilium 專案的 EKS 混合節點的 Cilium 組建。若要獲得 AWS 對 Cilium 的支援,您必須使用 AWS 維護的 Cilium 組建和支援的 Cilium 版本。

AWS 為下列 Cilium 功能的預設組態提供技術支援,以便與 EKS 混合節點搭配使用。如果您打算使用 AWS 支援範圍之外的功能,那麼建議您取得 Cilium 的替代商業支援,或擁有內部專業知識來對 Cilium 專案進行故障診斷並提供修正方法。

Cilium 功能 由 AWS 支援

Kubernetes 網路一致性

核心叢集連線

IP 系列

IPv4

生命週期管理

Helm

聯網模式

VXLAN 封裝

IP 位址管理 (IPAM)

Cilium IPAM 叢集範圍

網路政策

Kubernetes 網路政策

邊界閘道協定 (BGP)

Cilium BGP 控制平面

Kubernetes Ingress

Cilium Ingress、Cilium Gateway

Service LoadBalancer IP 配置

Cilium Load Balancer IPAM

Service LoadBalancer IP 位址公告

Cilium BGP 控制平面

kube-proxy 取代

Cilium 考量事項

  • Helm 儲存庫:AWS 將 Cilium Helm Chart 託管於 Amazon EKS Cilium/Cilium 的 Amazon Elastic Container Registry Public (Amazon ECR Public) 中。您可以在 helm 命令中使用下列 URI,進而來使用此儲存庫:oci://public.ecr.aws/eks/cilium/cilium:1.17.6-0。本主題中的命令使用此儲存庫。請注意,某些 helm repo 命令不適用於 Amazon ECR Public 中的 Helm 儲存庫,因此您無法從本機 Helm 儲存庫名稱引用此儲存庫。反之,大多數命令中會使用完整的 URI。

  • 根據預設,Cilium 已設定為以覆蓋/通道模式執行,並以 VXLAN 作為封裝法。此模式對基礎實體網路的要求最低。

  • 根據預設,Cilium 會將離開叢集的所有 Pod 流量的來源 IP 位址偽裝為節點的 IP 位址。如果您停用偽裝,則您的 Pod CIDR 必須在內部部署網路上可路由。

  • 如果您在混合節點上執行 Webhook,您的 Pod CIDR 必須在內部部署網路上可路由。如果您的 Pod CIDR 在內部部署網路上不可路由,那麼建議您在相同叢集的雲端節點上執行 Webhook。如需詳細資訊,請參閱 設定混合節點的 Webhook準備混合節點的聯網

  • AWS 建議使用 Cilium 的內建 BGP 功能,以便讓您的 Pod CIDR 在內部部署網路上可路由。如需如何使用混合節點設定 Cilium BGP 的詳細資訊,請參閱 設定混合節點的 Cilium BGP

  • Cilium 中的預設 IP 位址管理 (IPAM) 稱為叢集範圍,而 Cilium 運算子會基於使用者設定的 Pod CIDR 為每個節點配置 IP 位址。

在混合節點上安裝 Cilium

程序

  1. 建立稱為 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 Service CIDR 重疊。

    • 基於每個節點所需的 Pod 來設定 clusterPoolIpv4MaskSize。例如,對於每個節點 128 個 Pod 的 /25 區段大小,其值為 25

    • 在叢集上部署 Cilium 之後,請勿變更 clusterPoolIpv4PodCIDRListclusterPoolIpv4MaskSize,如需詳細資訊,請參閱展開叢集集區

    • 如果您以 kube-proxy 取代模式執行 Cilium,請在 Helm 值中設定 kubeProxyReplacement: "true",並確保您並未在與 Cilium 相同的節點上執行現有的 kube-proxy 部署。

    • 以下範例會停用 Cilium 用於 L7 網路政策和傳入的 Envoy Layer 7 (L7) 代理。如需詳細資訊,請參閱設定混合節點的 Kubernetes 網路政策Cilium Ingress 和 Cilium Gateway 概觀

    • 以下範例會設定 loadBalancer.serviceTopology:如果您為服務設定服務流量分佈,其會正確運作,則此為 true。如需詳細資訊,請參閱 設定服務流量分佈

    • 如需 Cilium 的 Helm 值的完整清單,請參閱 Cilium 文件中的 Helm 參考

      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"
  2. 在叢集上安裝 Cilium。

    • 使用 Cilium 版本取代 CILIUM_VERSION (例如 1.17.5)。建議為 Cilium 次要版本使用最新的修補程式版本。您可以使用 helm search repo cilium/cilium --versions 命令,在本機 Helm 儲存庫中尋找最新的修補程式版本。

    • 如果您使用特定的 kubeconfig 檔案,請搭配 Helm 安裝命令使用 --kubeconfig 旗標。

      helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  3. 使用下列命令來確認您的 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 升級文件和升級備註,以了解目標 Cilium 版本中的變更。

  1. 請確保您已在命令列環境中安裝了 helm CLI。如需安裝說明,請參閱 Helm 文件

  2. 執行 Cilium 升級預檢檢查。使用目標 Cilium 版本取代 CILIUM_VERSION。我們建議您為 Cilium 次要版本執行最新的修補程式版本。您可以在 Cilium 文件的穩定版本部分中找到指定次要 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
  3. 套用 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
  4. 只要就緒 Pod 的數量相等,請確保 Cilium 預檢部署也標記為 READY 1/1。如果顯示 READY 0/1,請參閱 CNP 驗證部分並解決部署問題,然後再繼續升級。

    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
  5. 刪除預檢

    helm uninstall cilium-preflight --namespace kube-system
  6. 在執行 helm upgrade 命令之前,請保留 existing-cilium-values.yaml 中部署的值,或在執行升級命令時,使用 --set 命令列選項進行設定。升級操作會覆寫 Cilium ConfigMap,因此請務必在升級時傳遞您的組態值。

    helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
  7. 在一般叢集操作期間,所有 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
  8. (選用) 如果您因為問題而需要復原升級,請執行下列命令。

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

從混合節點中刪除 Cilium

  1. 執行下列命令以從叢集中解除安裝所有 Cilium 元件。請注意,解除安裝 CNI 可能會影響節點和 Pod 的運作狀態,因此不應在生產叢集上執行。

    helm uninstall cilium --namespace kube-system

    從叢集移除 CNI 時,依預設不會移除 Cilium 設定的介面和路由,如需詳細資訊,請參閱 GitHub 問題

  2. 若要清除磁碟上的組態檔案和資源,如果您使用標準組態目錄,則可以移除 GitHub 上 Cilium 儲存庫中 cni-uninstall.sh 指令碼顯示的檔案。

  3. 若要從叢集中移除 Cilium 自訂資源定義 (CRD),您可以執行下列命令。

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