協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定混合節點的 CNI
Cilium 是 AWS Amazon EKS 混合節點支援的容器聯網界面 (CNI)。您必須為混合節點安裝 CNI,才能準備好為工作負載提供服務。在 CNI 執行Not Ready
之前,混合節點會顯示 狀態。您可以使用您選擇的工具來管理 CNI,例如 Helm。本頁的說明涵蓋 Cilium 生命週期管理 (安裝、升級、刪除)。如需設定混合節點的 Kubernetes 網路政策如何為輸入Cilium 傳入和 Cilium Gateway 概觀服務類型 LoadBalancer、負載平衡和網路政策設定 Cilium,請參閱 、 和 。
在 AWS 雲端節點上執行 AWS 時,不支援 Cilium。Amazon VPC CNI 與混合節點不相容,且 VPC CNI 已針對eks.amazonaws.com/compute-type: hybrid
標籤設定抗親和性。
此頁面先前的 Calico 文件已移至 EKS 混合範例儲存庫
版本相容性
Amazon EKS 支援的每個 Kubernetes 版本都v1.17.x
支援 EKS 混合節點的 Cilium 版本。
請參閱 Amazon EKS 支援的 Kubernetes 版本支援。EKS 混合節點支援與具有雲端節點的 Amazon EKS 叢集相同的 Kubernetes 版本。
支援的功能
AWS 維護以開放原始碼 Cilium 專案為基礎的 EKS 混合節點的 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 Gateway |
Service LoadBalancer IP 配置 |
Cilium Load Balancer IPAM |
Service LoadBalancer IP 地址公告 |
Cilium BGP 控制平面 |
kube-proxy 替換 |
是 |
Cilium 考量事項
-
Helm 儲存庫 - 在 Amazon EKS Cilium/Cilium 的 Amazon Elastic Container Registry Public (Amazon ECR Public) 中 AWS 託管 Cilium Helm Chart。 https://gallery.ecr.aws/eks/cilium/cilium
您可以在 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 CIDRs 必須可在內部部署網路上路由。 -
如果您在混合節點上執行 Webhook,您的 Pod CIDRs 必須在內部部署網路上可路由。如果您的 Pod CIDRs 在內部部署網路上無法路由,則建議在相同叢集的雲端節點上執行 Webhook。如需詳細資訊,請參閱 設定混合節點的 Webhook 和 準備混合節點的聯網。
-
AWS 建議使用 Cilium 的內建 BGP 功能,讓您的 Pod CIDRs 可在內部部署網路上路由。如需如何使用混合節點設定 Cilium BGP 的詳細資訊,請參閱 為混合節點設定 Cilium BGP。
-
Cilium 中的預設 IP 地址管理 (IPAM) 稱為 Cluster Scope
,Cilium 運算子會根據使用者設定的 Pod CIDRs 為每個節點配置 IP 地址。
在混合節點上安裝 Cilium
程序
-
建立名為 的 YAML 檔案
cilium-values.yaml
。下列範例透過設定 Cilium 代理程式和運算子的eks.amazonaws.com/compute-type: hybrid
標籤親和性,將 Cilium 設定為僅在混合節點上執行。-
clusterPoolIpv4PodCIDRList
使用您為 EKS 叢集遠端 Pod 網路設定的相同 Pod CIDRs 來設定 。例如10.100.0.0/24
。Cilium 運算子會從設定的 IP 空間內配置clusterPoolIpv4PodCIDRList
IP 地址配量。您的 Pod CIDR 不得與內部部署節點 CIDR、VPC CIDR 或 Kubernetes 服務 CIDR 重疊。 -
clusterPoolIpv4MaskSize
根據每個節點所需的 Pod 來設定 。例如,25
對於每個節點 128 個 Pod 的 /25 區段大小。 -
請勿在叢集上部署 Cilium
clusterPoolIpv4MaskSize
之後變更clusterPoolIpv4PodCIDRList
或 ,如需詳細資訊,請參閱展開叢集集區。 -
如果您以 kube-proxy 取代模式執行 Cilium,請在 Helm 值
kubeProxyReplacement: "true"
中設定 ,並確保沒有現有 kube-proxy 部署在與 Cilium 相同的節點上執行。 -
以下範例停用 Cilium 用於 L7 網路政策和傳入的 Envoy Layer 7 (L7) 代理。如需詳細資訊,請參閱設定混合節點的 Kubernetes 網路政策及Cilium 傳入和 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"
-
-
在叢集上安裝 Cilium。
-
CILIUM_VERSION
將 取代為 Cilium 版本 (例如1.17.5
)。建議針對 Cilium 次要版本使用最新的修補程式版本。您可以使用helm search repo cilium/cilium --versions
命令,在本機 Helm 儲存庫中找到可用的最新修補程式版本。 -
如果您使用特定的 kubeconfig 檔案,請使用
--kubeconfig
旗標搭配 Helm 安裝命令。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 CIDRs 公告至內部部署網路的相關資訊,請繼續為混合節點設定 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 文件的穩定版本區段中找到指定次要 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 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
-
在執行
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 問題
。 -
若要清除磁碟上組態檔案和資源,如果您使用標準組態目錄,您可以移除 GitHub 上 Cilium 儲存庫中的
cni-uninstall.sh
指令碼所示的檔案。 -
若要從叢集中移除 Cilium 自訂資源定義 (CRDs),您可以執行下列命令。
kubectl get crds -oname | grep "cilium" | xargs kubectl delete