ACK預設提供的Terway和Flannel CNI外掛程式,能夠滿足絕大多數的容器網路需求。但在某些情境下,若您需要使用其他CNI外掛程式中的特定功能,ACK支援通過Bring your own Container Network Interface(簡稱BYOCNI)模式在叢集中安裝自訂CNI外掛程式。本文介紹如何建立未安裝CNI外掛程式的ACK託管叢集Pro版,並手動安裝自訂CNI外掛程式。
責任聲明
容器網路介面(CNI)不僅影響叢集內東西向流量,還影響南北向流量,以及核心組件的部分能力(例如Webhook依賴API Server能夠直接存取Pod)。
對於使用者側在ACK託管叢集Pro版中使用自訂CNI外掛程式產生的故障,阿里雲不提供SLA;自訂CNI外掛程式相關的網路能力需要使用者側自行保障,進行故障排查及修複,ACK不提供相關的支援人員。
如果您需要CNI相關支援,請使用ACK提供的CNI外掛程式,或者使用商業版CNI外掛程式以獲得第三方的專業支援人員。
注意事項
如果您的自訂CNI外掛程式使用Overlay網路,ACK託管叢集Pro版的API Server將無法訪問任何Webhook,影響包括metrics-server在內的所有使用Webhook能力的組件。
步驟一:建立BYOCNI叢集
ACK目前只能通過CreateCluster - 建立叢集或者通過Terraform建立ACK託管叢集的方式建立一個未安裝CNI外掛程式的ACK託管叢集Pro版(簡稱BYOCNI叢集)。您需要在建立叢集時,禁用
kube-flannel-ds組件。使用OpenAPI
使用Terraform
"addons": [ { "name": "kube-flannel-ds", "disabled": true } ]addons { name = "kube-flannel-ds" disabled = true }(可選)使用VPC路由模式需要額外配置
cloud-controller-manager組件。詳細內容,請參見cloud-controller-manager配置。使用OpenAPI
使用Terraform
"addons": [ { "name": "cloud-controller-manager", "config": "{\"EnableCloudRoutes\":\"true\",\"BackendType\":\"NodePort\"}" } ]addons { name = "cloud-controller-manager" config = jsonencode({ EnableCloudRoutes = "true" BackendType = "NodePort" }) }叢集建立成功後,由於未安裝CNI外掛程式,所有節點將處於未就緒 (
NotReady) 狀態,這屬於正常現象。成功安裝CNI外掛程式後,節點狀態將自動變為就緒(Ready)。
步驟二:安裝自訂CNI外掛程式
以下步驟僅以安裝Cilium(VPC路由模式)為例。請您根據實際所選的CNI外掛程式調整操作。
在本樣本操作之前,請確保已使用kubectl串連叢集並安裝Helm CLI。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集和Installing Helm。
本樣本中的Cilium鏡像位于海外倉庫,可能出現拉取失敗的情況。您可參見下列解決方案:
方案一:通過什麼是Container RegistryACR訂閱海外源鏡像,請參見訂閱海外源鏡像。
方案二:建立Global AccelerationGA(Global Accelerator)執行個體,使用其覆蓋全球的網路加速服務直接拉取海外源鏡像,請參見使用GA實現ACK跨域加速拉取容器鏡像。
執行以下命令,添加Cilium的helm倉庫。
helm repo add cilium https://helm.cilium.io/執行以下命令安裝Cilium。請根據您的叢集網路規劃,修改命令中的參數。
helm install --set securityContext.privileged=true \ --set routingMode=native \ --set ipam.mode=kubernetes \ --set ipMasqAgent.enable=true \ --set ipMasqAgent.config.nonMasqueradeCIDRs='{172.16.0.0/12,10.0.0.0/8 }' \ --set ipv4NativeRoutingCIDR=172.16.0.0/12 \ cilium cilium/cilium --version 1.17.4 \ --namespace kube-system關鍵參數說明:
ipv4NativeRoutingCIDR:
172.16.0.0/12為叢集使用的Pod位址區段。ipMasqAgent.config.nonMasqueradeCIDRs:
172.16.0.0/12為叢集使用的Pod位址區段,10.0.0.0/8為叢集使用的VPC位址區段。
預期輸出:
NAME: cilium LAST DEPLOYED: Fri Jul 18 16:34:50 2025 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: You have successfully installed Cilium with Hubble. Your release version is 1.17.4. For any further help, visit https://docs.cilium.io/en/v1.17/gettinghelp成功安裝Cilium CNI外掛程式之後,節點進入就緒(
Ready)狀態。
更多配置
您可以在建立BYOCNI叢集時通過更詳細的參數定製叢集的行為,以更好地滿足CNI外掛程式的需要。
為Node分配PodCIDR
有些CNI外掛程式依賴Node上的PodCIDR屬性為Pod分配IP,您可以在建立叢集的時候指定container_cidr和node_cidr_mask來設定叢集內Pod網段和每個節點上網段的掩碼。
在配置了container_cidr和cidr_mask的情況下,叢集內節點將分配PodCIDR,否則節點上不會分配。具體配置方式,請參見CreateCluster - 建立叢集。
cloud-controller-manager配置
ACK cloud-controller-manager為BYOCNI叢集提供了可選的能力。您可以在建立叢集時,通過配置cloud-controller-manager addon的參數,開啟和關閉響應的能力。
參數 | 預設值 | 是否必填 | 描述 |
EnableCloudRoutes |
| 否 | 當啟用Node上的PodCIDR之後,如果您使用VPC路由表實現Pod之間的互連,您可以啟用cloud-controller-manager的 |
BackendType |
| 否 | cloud-controller-manager負責處理LoadBalancer類型的Service,包括建立CLB/NLB、將Pod配置到CLB/NLB後端等。預設情況下,cloud-controller-manager將叢集內的Node IP配置到負載平衡後端,負載平衡將流量轉寄到節點上,再通過節點內Service轉寄的配置轉寄到Pod上。如果您的BYOCNI外掛程式為Pod分配的是VPC IP,您可以直接將Pod IP配置到負載平衡後端,而不需要再通過節點轉寄。 可選值:
|
配置樣本:
使用OpenAPI | 使用Terraform |
| |