全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:配置Service负载均衡的注意事项及CCM资源更新策略

更新时间:Jan 08, 2026

当Service的类型设置为负载均衡,即Type=LoadBalancer时,容器服务ACK的CCM(Cloud Controller Manager)组件会为该Service创建或配置一个负载均衡实例。该实例类型包含:传统型负载均衡CLB(Classic Load Balancer)和网络型负载均衡NLB(Network Load Balancer),配置包括实例、监听、后端服务器组等资源。本文介绍配置Service负载均衡的注意事项以及CCM的资源更新策略。

注意事项

哪些负载均衡可以被复用?

  • 仅支持复用通过负载均衡控制台创建的实例,不支持复用cloud-controller-manager自动创建的负载均衡实例以及ACK管理的其它负载均衡实例(如API Server所使用的负载均衡)。

  • 如果您需要在ACK集群中复用私网类型的负载均衡实例,则该实例需要和ACK集群处于同一VPC下。跨VPC复用仅适用于NLB实例

  • 复用负载均衡实例的地址类型必须与服务的访问类型一致。当服务为公网访问(即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet")时,所用负载均衡的地址类型必须为公网;当服务为内部访问(即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet")时,所用负载均衡的地址类型必须为私网

  • 多个服务不能同时使用一个负载均衡的同一个监听端口。

  • 跨集群复用已有负载均衡实例时,需要确保两个集群的命名空间和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更换负载均衡实例,该如何操作?

已创建LoadBalancer类型的Service不支持重新复用或更换负载均衡实例。如果您需要更换负载均衡实例,请删除并重新创建Service。

配额限制

VPC

负载均衡

  • CCM会为Type=LoadBalancer类型的Service创建负载均衡。默认情况下一个用户可以保留60个实例。如果需要创建的数量大于60,请到配额平台提交申请

  • CCM会根据Service的配置将ECS或ENI挂载到负载均衡后端服务器组中。

    • CCM会为Service中不同的targetPort分别创建独立的服务器组。因此在计算负载均衡实例的后端服务器配额时,应当乘以对应的targetPort端口数进行计算。

    • 默认情况,同一个ECS或ENI实例可被挂载到不同后端服务器组的上限为50个,如果一台ECS需要挂载到更多的后端服务器组中,请到配额平台提交申请

    • 默认情况下一个实例可以挂载200个后端服务器,如果需要挂载更多的后端服务器,请到配额平台提交申请

  • CCM会根据Service中定义的端口创建监听。默认情况下一个实例可以添加50个监听,如需添加更多监听,请到配额平台提交申请

  • 更多负载均衡使用限制,请参见CLB使用限制NLB使用限制

    负载均衡配额查询请参见负载均衡配额管理

负载均衡更新策略

ACK支持为Service指定一个已有的负载均衡实例,或者让CCM自动创建新的负载均衡实例。两种方式在负载均衡的资源更新策略方面存在一些差异,如下表所示。

资源对象

指定已有负载均衡

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开启删除保护