協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Cilium 和 Calico 支援做為 Amazon EKS 混合節點的容器聯網界面 (CNIs)。您必須為混合節點安裝 CNI,才能準備好為工作負載提供服務。在 CNI 執行Not Ready
之前,混合節點會顯示 狀態。您可以使用您選擇的工具來管理這些 CNIs,例如 Helm。Amazon VPC CNI 與混合節點不相容,且 VPC CNI 已針對eks.amazonaws.com/compute-type: hybrid
標籤設定抗親和性。
CNI 版本相容性
對於 Amazon EKS 中支援的每個 Kubernetes 版本,EKS 混合節點1.16.x
支援並建議採用 Cilium 版本。
針對 3.29.x
Amazon EKS 中支援的每個 Kubernetes 版本,支援並建議 EKS 混合節點使用 Calico 版本。
支援的功能
AWS 為 Cilium 和 Calico 的下列功能提供技術支援,以便與混合節點搭配使用。如果您打算在 AWS 支援範圍之外使用功能,我們建議您取得外掛程式的商業支援,或擁有內部專業知識來疑難排解並對 CNI 外掛程式專案提供修正。
功能 | Cilium | Calico |
---|---|---|
Kubernetes 網路一致性 |
是 |
是 |
控制平面到節點的連線 |
是 |
是 |
控制平面到 Pod 的連線 |
是 |
是 |
生命週期管理 |
安裝、升級、刪除 |
安裝、升級、刪除 |
網路模式 |
VXLAN |
VXLAN |
IP 地址管理 (IPAM) |
叢集範圍 (Cilium IPAM) |
Calico IPAM |
IP 系列 |
IPv4 |
IPv4 |
BGP |
是 (鈰控制平面) |
是 |
Cilium 考量事項
-
根據預設,Cilium 設定為在覆蓋/通道模式下執行,並以 VXLAN 做為封裝方法
。此模式對基礎實體網路的需求最少。 -
根據預設,Cilium 會遮罩
所有 Pod 流量的來源 IP 地址,並將叢集移至節點的 IP 地址。這可讓您使用混合節點執行 Cilium,無論叢集上是否已設定遠端 Pod 網路。如果您停用偽裝,則您的 Pod CIDRs 必須在內部部署網路上路由,而且您必須使用遠端 Pod 網路設定 Amazon EKS 叢集。 -
如果您在混合節點上執行 Webhook,您的 Pod CIDRs 必須在內部部署網路上路由,而且您必須使用遠端 Pod 網路設定 Amazon EKS 叢集。如果您的 Pod CIDRs 在內部部署網路上無法路由,則建議在相同叢集中的雲端節點上執行 Webhook。如需詳細資訊,請參閱設定混合節點的 Webhook。
-
讓 Pod CIDR 在內部部署網路上可路由的常見方法是使用 BGP 公告 Pod 地址。若要搭配 Cilium 使用 BGP,您必須在 Helm 組態
bgpControlPlane.enabled: true
中設定 。如需 Cilium BGP 支援的詳細資訊,請參閱 Cilium 文件中的 Cilium BGP 控制平面。 -
Cilium 中的預設 IP 地址管理 (IPAM) 稱為 Cluster Scope
,Cilium 運算子會根據使用者設定的 Pod CIDRs 為每個節點配置 IP 地址。Pod CIDRs 是以 clusterPoolIPv4PodCIDRList
Helm 值設定,這應該符合您為 Amazon EKS 叢集設定的遠端 Pod 網路 CIDRs。Cilium 會將區段從 配置clusterPoolIPv4PodCIDRList
給每個節點。每個節點區段的大小是以clusterPoolIPv4MaskSize
Helm 值設定。如需clusterPoolIPv4PodCIDRList
和 的詳細資訊clusterPoolIPv4MaskSize
,請參閱 Cilium 文件中的展開叢集集區。
在混合節點上安裝 Cilium
-
請確定您已在命令列環境中安裝 Helm CLI。如需安裝說明,請參閱設定 Helm。
-
安裝 Cilium Helm 儲存庫。
helm repo add cilium https://helm.cilium.io/
-
建立名為 的 YAML 檔案
cilium-values.yaml
。下列範例透過設定eks.amazonaws.com/compute-type: hybrid
標籤的親和性,將 Cilium 設定為僅在混合節點上執行。-
如果您已使用遠端 Pod 網路設定 Amazon EKS 叢集,請為您的 設定相同的 Pod CIDRs
clusterPoolIPv4PodCIDRList
。例如10.100.0.0/24
。在覆蓋/通道模式下執行 CNI 時,您的內部部署 Pod CIDR 不得與內部部署節點 CIDR 重疊。 -
clusterPoolIPv4MaskSize
根據每個節點所需的 Pod 進行設定。例如,25
對於每個節點 128 個 Pod 的 /25 區段大小。 -
在叢集上部署 Cilium
clusterPoolIPv4MaskSize
之後,您不應該變更clusterPoolIPv4PodCIDRList
或 ,請參閱 Cilium 文件中的展開叢集集區。 -
如需 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
operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false envoy: enabled: false
-
-
在叢集上安裝 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
-
-
您可以使用下列命令確認 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
-
若要搭配 Cilium 使用 BGP 來透過內部部署網路公告您的 Pod 地址,您必須已搭配 安裝 Cilium
bgpControlPlane.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" -
將 Cilium BGP 叢集組態套用至您的叢集。
kubectl apply -f cilium-bgp-cluster.yaml
-
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"
-
將 Cilium BGP 對等組態套用至叢集。
kubectl apply -f cilium-bgp-peer.yaml
-
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
-
將 Cilium BGP 公告組態套用至您的叢集。
kubectl apply -f cilium-bgp-advertisement.yaml
您可以使用
cilium bgp peers
命令,確認 BGP 對等互連與 Cilium CLI搭配使用。您應該會在環境的輸出中看到正確的值,工作階段狀態為 established
。如需故障診斷的詳細資訊,請參閱 Cilium 文件中的故障診斷和操作指南。
升級混合節點上的 Cilium
升級 Cilium 部署之前,請仔細檢閱 Cilium 升級文件
-
請確定您已在命令列環境中安裝
helm
CLI。如需安裝說明,請參閱 Helm 文件。 -
安裝 Cilium Helm 儲存庫。
helm repo add cilium https://helm.cilium.io/
-
執行 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
-
套用 之後
cilium-preflight.yaml
,請確定 PodREADY
的數量與執行的 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 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
-
刪除預檢
helm uninstall cilium-preflight --namespace kube-system
-
在正常叢集操作期間,所有 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 -
(選用) 如果您因為問題而需要復原升級,請執行下列命令。
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 問題
。 -
若要清除磁碟上組態檔案和資源,如果您使用標準組態目錄,您可以移除 GitHub 上 Cilium 儲存庫中的
cni-uninstall.sh
指令碼所示的檔案。 -
若要從叢集中移除 Cilium 自訂資源定義 (CRDs),您可以執行下列命令。
kubectl get crds -oname | grep "cilium" | xargs kubectl delete
Calico 考量
-
建議使用 VXLAN 作為封裝方法
,在覆蓋/通道模式下執行 Calico。此模式對基礎實體網路的需求最少。如需不同 Calico 網路模式的詳細資訊,請參閱 Calico 文件中的判斷最佳網路選項 。 -
建議執行 Calico,並將
natOutgoing
設定為true
。將natOutgoing
設為 時true
,所有離開叢集的 Pod 流量的來源 IP 地址會轉譯為節點的 IP 地址。這可讓您使用 Amazon EKS 叢集執行 Calico,無論叢集上是否已設定遠端 Pod 網路。如果您停用natOutgoing
,則您的 Pod CIDRs 必須在內部部署網路上可路由,而且您必須使用遠端 Pod 網路設定 Amazon EKS 叢集。 -
如果您在混合節點上執行 Webhook,您的 Pod CIDRs 必須在內部部署網路上路由,而且您必須使用遠端 Pod 網路設定 Amazon EKS 叢集。如果您的 Pod CIDRs 在內部部署網路上無法路由,則建議在相同叢集中的雲端節點上執行 Webhook。如需詳細資訊,請參閱設定混合節點的 Webhook。
-
讓 Pod CIDR 在內部部署網路上可路由的常見方法是使用 BGP 公告 Pod 地址。若要搭配 Calico 使用 BGP,您必須在 Helm 組態
installation.calicoNetwork.bgp: Enabled
中設定 。如需 Calico BGP 支援的詳細資訊,請參閱 Calico 文件中的設定 BGP 對等互連。 -
Calico 中的預設 IP 地址管理 (IPAM) 稱為 Calico IPAM
,其中 calico-ipam
外掛程式會根據使用者設定的 Pod CIDRs 為每個節點配置 IP 地址。Pod CIDRs 是以installation.calicoNetwork.ipPools.cidr
Helm 值設定,這應該符合您為 Amazon EKS 叢集設定的遠端 Pod 網路 CIDRs。Calico 會將區段從 配置ipPools.cidr
給每個節點。每個節點區段的大小是以ipPools.blockSize
Helm 值設定。如需使用 Calico 進行 IPAM 的詳細資訊,請參閱 Calico 文件中的 IP 地址管理入門。
在混合節點上安裝 Calico
-
請確定您已在命令列環境中安裝 helm CLI。如需安裝說明,請參閱 Helm 文件
。 -
安裝 Cilium Helm 儲存庫。
helm repo add projectcalico https://docs.tigera.io/calico/charts
-
建立名為 的 YAML 檔案
calico-values.yaml
。下列範例會設定eks.amazonaws.com/compute-type: hybrid
標籤的親和性,將所有 Calico 元件設定為僅在混合節點上執行。-
POD_CIDR
將 取代為 Pod 的 CIDR 範圍。如果您已使用遠端 Pod 網路設定 Amazon EKS 叢集,POD_CIDR
則您為 Calico 指定的 應與遠端 Pod 網路相同。例如10.100.0.0/24
。在覆蓋/通道模式下執行 CNI 時,您的內部部署 Pod CIDR 不得與內部部署節點 CIDR 重疊。 -
CIDR_SIZE
將 取代為您要配置給每個節點的 CIDR 區段大小。例如,25
對於每個節點 128 個 Pod 地址的 /25 區段大小。如需 CIDRblockSize
和變更 的詳細資訊blockSize
,請參閱 Calico 文件中的變更 IP 集區區塊大小。 -
在下面的範例中,
natOutgoing
已啟用,bgp
已停用。根據您的目標組態修改這些值。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
-
-
在叢集上安裝 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
-
-
您可以使用下列命令確認您的 Calico 安裝成功。您應該會看到
tigera-operator
部署、在每個混合節點上執行的calico-node
代理程式、csi-node-driver
、calico-apiserver
和calico-kube-controllers
部署。此外,您的混合節點現在應具有狀態Ready
。如果您使用的是natOutgoing: Disabled
,則在您向內部部署網路公告 Pod 地址之前,所有 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
-
如果您安裝 Calico 而沒有 BGP,請略過此步驟。若要設定 BGP,
calico-bgp.yaml
請使用BGPPeer
組態和 建立名為 的檔案BGPConfiguration
。請務必區分BGPPeer
和BGPConfiguration
。BGPPeer
是已啟用 BGP 的路由器或遠端資源,Calico 叢集中的節點將與之對等。BGPPeer
組態asNumber
中的 類似於 Cilium 設定peerASN
。BGPConfiguration
會套用至每個 Calico 節點,而asNumber
的BGPConfiguration
相當於 Cilium 設定localASN
。將以下範例中LOCAL_ASN
的ONPREM_ROUTER_IP
ONPREM_ROUTER_ASN
、 和 取代為內部部署環境的值,您可能必須從網路管理員取得這些值。keepOriginalNextHop: true
設定用於確保每個節點僅公告其擁有的 Pod 網路 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
-
將 檔案套用至您的叢集。
kubectl apply -f calico-bgp.yaml
-
確認 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 版本的運算子資訊清單。
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 -
執行
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
-
執行下列命令,從您的叢集解除安裝 Calico 元件。請注意,解除安裝 CNI 可能會影響節點和 Pod 的運作狀態,不應在生產叢集上執行。如果您將 Calico 安裝在下列命令中
kube-system
變更命名空間以外的命名空間。helm uninstall calico --namespace kube-system
請注意,從叢集移除 CNI 時,預設不會移除 Calico 設定的界面和路由。
-
若要清除磁碟上組態檔案和資源,請從
/opt/cni
和/etc/cni
目錄中移除 Calico 檔案。 -
若要從叢集中移除 Calico CRDs,請執行下列命令。
kubectl get crds -oname | grep "calico" | xargs kubectl delete
kubectl get crds -oname | grep "tigera" | xargs kubectl delete