全部產品
Search
文件中心

Container Service for Kubernetes:配置Service負載平衡的注意事項及CCM資源更新策略

更新時間:Jan 09, 2026

當Service的類型設定為負載平衡,即Type=LoadBalancer時,Container ServiceACK的CCM(Cloud Controller Manager)組件會為該Service建立或配置一個Server Load Balancer執行個體。該執行個體類型包含:傳統型負載平衡CLB(Classic Load Balancer)和網路型負載平衡NLB(Network Load Balancer),配置包括執行個體、監聽、後端伺服器組等資源。本文介紹配置Service負載平衡的注意事項以及CCM的資源更新策略。

注意事項

哪些負載平衡可以被複用?

  • 僅支援複用通過負載平衡控制台建立的執行個體,不支援複用cloud-controller-manager自動建立的Server Load Balancer執行個體以及ACK管理的其它Server Load Balancer執行個體(如API Server所使用的負載平衡)。

  • 如果您需要在ACK叢集中複用私網類型的Server Load Balancer執行個體,則該執行個體需要和ACK叢集處於同一VPC下。跨VPC複用僅適用於NLB執行個體

  • 複用Server Load Balancer執行個體的地址類型必須與服務的訪問類型一致。當服務為公網訪問(即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet")時,所用負載平衡的地址類型必須為公網;當服務為內部訪問(即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet")時,所用負載平衡的地址類型必須為私網

  • 多個服務不能同時使用一個負載平衡的同一個監聽連接埠。

  • 跨叢集複用已有Server Load Balancer執行個體時,需要確保兩個叢集的命名空間和Service組合名稱不一致。

CCM管理負載平衡時注意事項

  • CCM只為Type=LoadBalancer類型的Service配置負載平衡,對於非LoadBalancer類型的Service則不會為其配置負載平衡。

  • 重要

    Type=LoadBalancer的Service變更為Type!=LoadBalancer時,CCM會刪除為該負載平衡添加的配置,從而造成無法通過該負載平衡訪問Service。

  • CCM使用聲明式API,會在一定條件下自動根據Service的配置重新整理負載平衡配置,您自行在負載平衡控制台上修改的配置均存在被覆蓋的風險。

  • 重要

    請勿在負載平衡控制台上手動修改ACK建立並維護的負載平衡的任何配置,否則有配置丟失的風險,造成Service不可訪問。

  • 請勿手動刪除或修改Service上的service.k8s.alibaba/resourcesservice.k8s.alibaba/nlb Finalizer,手動操作Finalizer可能會導致CLB或NLB資源無法被正常回收。

  • Cloud Controller Manager版本為v2.5.0及以上時,通過控制台建立Service時,CLB執行個體選項變為白名單功能。如需使用,請通過配額平台提交申請。

在叢集內訪問LoadBalancer Service的External IP的注意事項

受網路外掛程式類型、網路外掛程式版本及叢集版本影響,在叢集內訪問LoadBalancerService關聯的CLB IP時,叢集網路會在節點上截獲流量並直接轉寄至後端的Service Endpoint。

此過程會繞過外部的CLB執行個體,導致依賴CLB處理的特定配置失效,從而引發訪問異常。主要影響的情境包括:

  • externalTrafficPolicy設定為Local:流量可能因被轉寄到沒有後端Pod的節點而訪問失敗。

  • 啟用Proxy Protocol協議:後端服務無法擷取由CLB添加的Proxy Protocol頭部,導致協議握手失敗。

  • 使用HTTP/HTTPS類型監聽:依賴CLB進行TLS終止或添加特定Header(如X-Forwarded-For)等操作將不會生效。

因此,當存在叢集內訪問LoadBalancerService的需求時,建議:

  • 優先使用Service的叢集內地址,更為標準且穩定:在叢集內部的服務間通訊,使用Service的ClusterIP或其DNS名稱(如 <service-name>.<namespace>.svc.cluster.local)。

  • 如需使用CLB入口,通過Hostname訪問:為Service添加service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname Annotation,並使用配置的網域名稱代替IP進行訪問,確保流量被正確處理。關於Annotation的詳細說明,請參見為Service設定Hostname

    重要

    使用此功能繞行CLB訪問時,應避免將用戶端Pod和服務端Pod調度到同一節點。否則,可能會因非對稱路由問題導致訪問不通。

CCM單叢集管理大規模負載平衡時注意事項

CCM對Service事件的處理能力存在一定限制。當叢集規模較大時(如節點數量多、LoadBalancer類型的Service多等),在大量Service建立或刪除、大量Service Endpoint同時變更、存在大量LoadBalancer類型Service時節點加入或刪除等情況下,CCM在負載平衡的建立、刪除,以及伺服器組的端點變更等操作中,可能會出現一定的延遲。

當您因業務需要而進行大批量的變更操作時,請提前做好容量的評估和壓測,避免因CCM的處理延遲而導致業務受損的情況發生。

如果需要為Service更換Server Load Balancer執行個體,該如何操作?

已建立LoadBalancer類型的Service不支援重新複用或更換Server Load Balancer執行個體。如果您需要更換Server Load Balancer執行個體,請刪除並重新建立Service。

配額限制

VPC

負載平衡

  • CCM會為Type=LoadBalancer類型的Service建立負載平衡。預設情況下一個使用者可以保留60個執行個體。如果需要建立的數量大於60,請到配額平台提交申請

  • CCM會根據Service的配置將ECS或ENI掛載到負載平衡後端伺服器組中。

    • CCM會為Service中不同的targetPort分別建立獨立的伺服器組。因此在計算Server Load Balancer執行個體的後端伺服器配額時,應當乘以對應的targetPort連接埠數進行計算。

    • 預設情況,同一個ECS或ENI執行個體可被掛載到不同後端伺服器組的上限為50個,如果一台ECS需要掛載到更多的後端伺服器組中,請到配額平台提交申請

    • 預設情況下一個執行個體可以掛載200個後端伺服器,如果需要掛載更多的後端伺服器,請到配額平台提交申請

  • CCM會根據Service中定義的連接埠建立監聽。預設情況下一個執行個體可以添加50個監聽,如需添加更多監聽,請到配額平台提交申請

  • 更多負載平衡使用限制,請參見CLB使用限制NLB使用限制

    負載平衡配額查詢請參見負載平衡配額管理

負載平衡更新策略

ACK支援為Service指定一個已有的Server Load Balancer執行個體,或者讓CCM自動建立新的Server Load Balancer執行個體。兩種方式在負載平衡的資源更新策略方面存在一些差異,如下表所示。

資來源物件

指定已有負載平衡

CCM管理負載平衡

負載平衡

設定annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

  • CCM會使用該執行個體作為Service的負載平衡,並根據其他annotation配置負載平衡,自動為負載平衡建立多個虛擬伺服器組。

  • 當Service刪除時,CCM不會刪除您通過ID指定的已有負載平衡。

  • CCM會根據Service的配置,自動建立和配置負載平衡、監聽、虛擬伺服器組等資源,所有資源由CCM管理。

  • 當Service刪除時,CCM會刪除自動建立的負載平衡。

監聽

設定annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

  • 如果設定為"false",CCM不會為負載平衡管理任何監聽配置。

  • 如果設定為"true",CCM會根據Service組態管理監聽;如果監聽已經存在,則CCM會覆蓋已有監聽。

CCM會根據Service的配置,自動建立和配置監聽策略。

後端伺服器組

當Service對應的後端Endpoint或者叢集節點發生變化時,CCM會自動更新負載平衡的後端虛擬伺服器組。

  • 對於Terway網路外掛程式,CCM預設掛載PodIP,而非掛載ECS節點到負載平衡後端。

  • 對於Flannel網路外掛程式,根據Service模式的不同,後端伺服器組的更新策略也有所不同。

    • Cluster模式(spec.externalTrafficPolicy = Cluster):CCM預設會將所有節點掛載到負載平衡的後端(使用BackendLabel標籤配置後端的除外)。

      重要

      負載平衡存在配額限制,限制了每個ECS能夠使用的負載平衡個數,這種方式會快速消耗該配額。當配額耗盡後,會造成Service Reconcile失敗。解決辦法:使用Local模式的Service。

    • Local模式(spec.externalTrafficPolicy = Local):CCM預設只會將Service對應的Pod所在節點加入到負載平衡後端。這樣可以降低負載平衡配額的消耗速度,同時支援四層源IP保留。

  • 對於Flannel網路外掛程式,任何情況下CCM都不會將Master節點作為負載平衡的後端。

  • 對於Flannel網路外掛程式,CCM預設不會從負載平衡後端移除被驅逐(kubectl drain)或停止調度(kubectl cordon)的節點。如需移除節點,請設定service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backendon

為Service開啟刪除保護

您可以為涉及關鍵業務、敏感性資料的Service開啟刪除保護功能,以避免誤刪除帶來的維護成本。啟用後,僅當您手動關閉刪除保護後,對應的資源才可以被刪除。關於為Service開啟刪除保護操作步驟詳情,請參見為Service開啟刪除保護