CNI 為混合節點設定 - Amazon EKS

協助改善此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合每個人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CNI 為混合節點設定

Amazon EKS混合節點的容器網路界面 (CNIs) 支援 Cilium 和 Calico。您必須CNI為混合節點安裝 ,才能準備好為工作負載提供服務。在CNI執行 Not Ready之前,混合節點會顯示 狀態。您可以使用您選擇的工具CNIs來管理這些項目,例如 Helm。Amazon 與混合節點VPCCNI不相容,且 VPC CNI 設定eks.amazonaws.com/compute-type: hybrid標籤的抗親和性。

版本相容性

下表代表 Cilium 和 Calico 版本,這些版本針對 Amazon 中支援的每個 Kubernetes 版本相容和驗證EKS。

Kubernetes 版本 Cilium 版本 Calico 版本

1.31

1.16.x

3.29.x

1.30

1.16.x

3.29.x

1.29

1.16.x

3.29.x

1.28

1.16.x

3.29.x

1.27

1.16.x

3.29.x

1.26

1.16.x

3.29.x

1.25

1.16.x

3.29.x

支援的功能

AWS 支援 Cilium 和 Calico 的下列功能,可與混合節點搭配使用。如果您計劃使用 AWS 支援範圍以外的功能,我們建議您取得外掛程式的商業支援,或擁有內部專業知識來故障診斷,並為CNI外掛程式專案提供修正。

功能 Cilium Calico

Kubernetes 網路一致性

控制平面到節點的連線

控制平面到 Pod 連線

生命週期管理

安裝、升級、刪除

安裝、升級、刪除

網路模式

VXLAN

VXLAN

IP 地址管理 (IPAM)

叢集範圍 (Cilium IPAM)

Calico IPAM

IP 系列

IPv4

IPv4

BGP

是 (鈰控制平面)

在混合節點上安裝 Cilium

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

  2. 安裝 Cilium Helm 儲存庫。

    helm repo add cilium https://helm.cilium.io/
  3. 建立名為 的 yaml 檔案cilium-values.yaml。如果您已設定至少一個遠端 Pod 網路,請CIDRs為您的 設定相同的 PodclusterPoolIPv4PodCIDRList。在叢集上部署 Cilium clusterPoolIPv4PodCIDRList之後,您不應該變更 。您可以clusterPoolIPv4MaskSize根據每個節點所需的 Pod 來設定 ,請參閱 Cilium 文件中的擴展叢集集區。如需 Cilium 的 Helm 值完整清單,請參閱 Cilium 文件中的 Helm 參考。下列範例會將所有 Cilium 元件設定為僅在混合節點上執行,因為它們具有 eks.amazonaws.com/compute-type: hybrid標籤。

    根據預設,Cilium 會偽裝所有 Pod 流量的來源 IP 地址,並將叢集移至節點的 IP 地址。這可讓 Cilium 與已設定遠端 Pod 網路的 Amazon EKS叢集,以及未設定遠端 Pod 網路的叢集一起執行。如果您停用 Cilium 部署的偽裝,則必須使用遠端 Pod 網路設定 Amazon EKS叢集,並且必須使用內部部署網路公告 Pod 地址。如果您是在混合節點上執行 Webhook,則必須使用遠端 Pod 網路設定叢集,並且必須使用內部部署網路公告您的 Pod 地址。

    使用 公告內部部署網路 Pod 地址的常見方式。 BGP若要BGP搭配 Cilium 使用 ,您必須設定 bgpControlPlane.enabled: true。如需 Cilium BGP支援的詳細資訊,請參閱 Cilium 文件中的 Cilium BGP控制平面

    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: unmanagedPodWatcher: restart: false
  4. 在叢集上安裝 Cilium。將 取代CILIUM_VERSION為您想要的 Cilium 版本。建議您為 Cilium 次要版本執行最新的修補程式版本。您可以在 Cilium 文件的穩定版本區段中找到指定次要 Cilium 版本的最新修補程式版本。如果您要BGP為部署啟用 ,請在下面的命令中新增 --set bgpControlPlane.enabled=true旗標。如果您使用特定的 kubeconfig 檔案,請使用 --kubeconfig旗標搭配 Helm 安裝命令。

    helm install cilium cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  5. 您可以使用下列命令確認您的 Cilium 安裝成功。您應該會在每個混合節點上看到cilium-operator部署和cilium-agent執行的 。此外,您的混合節點現在應該具有狀態 Ready。如需如何BGP設定 Cilium 的詳細資訊,請繼續下一個步驟。

    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 使用 ,以內部部署網路公告您的 Pod 地址,您必須已搭配 安裝 CiliumbgpControlPlane.enabled: true。若要在 Cilium BGP中設定 ,請先建立名為 的檔案cilium-bgp-cluster.yaml,並將 CiliumBGPClusterConfig peerAddress 設定為您要對等的現場部署路由器 IP。peerASN 根據您的內部部署路由器組態來設定 localASN和 。

    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對等組態。

    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 bgp peers命令來確認BGP互連與 Cilium CLI 搭配使用。您應該會在環境的輸出中看到正確的值,工作階段狀態為 established。如需故障診斷的詳細資訊,請參閱 Cilium 文件中的故障診斷和操作指南

升級混合節點上的 Cilium

升級 Cilium 部署之前,請仔細檢閱 Cilium 升級文件和升級備註,以了解目標 Cilium 版本中的變更。

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

  2. 安裝 Cilium Helm 儲存庫。

    helm repo add cilium https://helm.cilium.io/
  3. 執行 Cilium 升級飛行前檢查。將 取代CILIUM_VERSION為目標 Cilium 版本。建議您為 Cilium 次要版本執行最新的修補程式版本。您可以在 Cilium 文件的穩定版本區段中找到指定次要 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,請確定 Pod READY 的數量與執行的 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. 一旦 Pod READY 數量相等,請確定 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
  6. 刪除飛行前

    helm uninstall cilium-preflight --namespace kube-system
  7. 在正常叢集操作期間,所有 Cilium 元件都應執行相同的版本。下列步驟說明如何將所有元件從一個穩定版本升級至較新穩定版本。從一個次要版本升級至另一個次要版本時,建議先升級至現有 Cilium 次要版本的最新修補程式版本。為了將中斷降至最低, upgradeCompatibility 選項應設定為已安裝在此叢集中的初始 Cilium 版本。

    在執行 helm 升級命令之前,請將部署的值保留在 中,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可能會影響節點和 Pod 的運作狀態,不應在生產叢集上執行。

    helm uninstall cilium --namespace kube-system

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

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

  3. 若要從叢集中移除 Cilium Custom Resource Definitions (CRDs),您可以執行下列命令。

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

在混合節點上安裝 Calico

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

  2. 安裝 Cilium Helm 儲存庫。

    helm repo add projectcalico https://docs.tigera.io/calico/charts
  3. 建立名為 的 yaml 檔案calico-values.yaml,以設定 Calico 與混合節點上執行的親和性。如需不同 Calico 網路模式的詳細資訊,請參閱 Calico 文件中的判斷最佳網路選項

    1. POD_CIDR 將 取代為 Pod CIDR的範圍。如果您已使用遠端 Pod 網路設定 Amazon EKS叢集,POD_CIDR則您為 Calico 指定的 應與遠端 Pod 網路相同。例如:10.100.0.0/24

    2. CIDR_SIZE 將 取代為您想要配置給每個節點的CIDR區段大小。例如,25對於 /25 區段大小。如需 CIDRblockSize和變更 的詳細資訊blockSize,請參閱 Calico 文件中的變更 IP 集區區塊大小

    3. 在下面的範例中, natOutgoing 已啟用, bgp已停用。在此組態中,Calico 可以在已設定遠端 Pod 網路的 Amazon EKS叢集上執行,也可以在未設定遠端 Pod 網路的叢集上執行。如果您已將 natOutgoing設為停用,則必須使用遠端 Pod 網路設定叢集,且您的內部部署網路必須能夠正確路由目的地為 Pod 的流量CIDRs。使用 公告內部部署網路 Pod 地址的常見方式。 BGP若要BGP搭配 Calico 使用 ,您必須啟用 bgp。以下範例會將所有 Calico 元件設定為僅在混合節點上執行,因為它們具有eks.amazonaws.com/compute-type: hybrid標籤。如果您是在混合節點上執行 Webhook,則必須使用遠端 Pod 網路設定叢集,並且必須使用內部部署網路公告您的 Pod 地址。以下範例會設定 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 版本以尋找 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,則在您向內部部署網路公告 Pod 地址之前,所有 Calico 元件都無法成功啟動。如需如何BGP為 Calico 設定 的資訊,請繼續下一個步驟。

    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. 如果您安裝的 Calico 沒有 BGP,請略過此步驟。若要設定 BGP,請使用calico-bgp.yamlBGPPeer組態和 建立名為 的檔案BGPConfiguration。請務必區分 BGPPeerBGPConfigurationBGPPeer 是BGP已啟用 的路由器或遠端資源,Calico 叢集中的節點將與之對等。BGPPeer 組態asNumber中的 類似於 Cilium 設定 peerASNBGPConfiguration 會套用至每個 Calico 節點,而 asNumberBGPConfiguration 相當於 Cilium 設定 localASN。將以下範例中LOCAL_ASNONPREM_ROUTER_ASNONPREM_ROUTER_IP和 取代為現場部署環境的值。此keepOriginalNextHop: true設定用於確保每個節點僅公告其擁有CIDR的 Pod 網路。

    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 Pod 執行時使用以下命令。

    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 文件中的疑難排解指引

在混合節點上升級 Calico

升級您的 Calico 部署之前,請仔細檢閱 Calico 升級文件版本備註,以了解目標 Calico 版本中的變更。升級步驟會根據您是否使用 Helm、Calico 運算子和資料存放區的類型而有所不同。下列步驟假設使用 Helm。

  1. 下載您要升級之 Calico 版本的運算子資訊清單。CALICO_VERSION 將 取代為您升級到的版本,例如 v3.29.0。請務必v在 major.minor.patch 前面加上 。

    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

    請注意,從叢集移除 時,根據預設不會移除 Calico CNI 設定的介面和路由。

  2. 若要清除磁碟上組態檔案和資源,請從 /opt/cni/etc/cni目錄中移除 Calico 檔案。

  3. 若要CRDs從叢集中移除 Calico,請執行下列命令。

    kubectl get crds -oname | grep "calico" | xargs kubectl delete
    kubectl get crds -oname | grep "tigera" | xargs kubectl delete

📝 在 上編輯此頁面 GitHub