在云容器引擎,当您将Service类型设置为LoadBalancer时,云控制器管理器(cloud-controller-manager)组件会自动为您创建或配置一个弹性负载均衡(ELB)实例,包括监听器、后端主机组、后端主机等资源。
注意事项
负载均衡实例复用限制
支持复用的实例:仅支持复用您通过负载均衡控制台手动创建的实例。
不可复用的实例:不支持复用以下两类实例:
cloud-controller-manager 自动创建的负载均衡实例。
云容器引擎管理的其他负载均衡实例,例如API Server或ELB Ingress控制器所管理的实例。
VPC 网络限制:如果您需要复用私网类型的负载均衡实例,则该实例必须与云容器引擎集群位于同一VPC下。跨VPC复用暂不支持。
地址类型匹配:所复用实例的地址类型必须与Service的访问类型严格一致。
若 Service为公网访问(service.beta.kubernetes.io/ctyun-loadbalancer-address-type: "internet"),则ELB必须为公网类型。
若 Service为内部访问(service.beta.kubernetes.io/ctyun-loadbalancer-address-type: "intranet"),则ELB必须为私网类型。
监听端口唯一性:多个Service不能共用同一个负载均衡实例上的同一个监听端口,以避免端口冲突。
CCM管理负载均衡时注意事项
CCM只为Type=LoadBalancer类型的Service配置负载均衡,对于非LoadBalancer类型的Service则不会为其配置负载均衡。
说明
当Type=LoadBalancer的Service变更为Type!=LoadBalancer时,CCM会删除为该负载均衡添加的配置,从而造成无法通过该负载均衡访问Service。
CCM使用声明式API,会在一定条件下自动根据Service的配置刷新负载均衡配置,您自行在负载均衡控制台上修改的配置均存在被覆盖的风险。
注意
请勿在负载均衡控制台上手动修改CCE创建并维护的负载均衡的任何配置,否则有配置丢失的风险,造成Service不可访问。
请勿手动删除或修改负载均衡类型Service上的Finalizer,手动操作Finalizer可能会导致ELB资源无法被正常回收。
在集群内访问 LoadBalancer Service 的 External IP 的注意事项
受网络插件类型、网络插件版本及集群版本影响,在集群内访问 LoadBalancer Service 关联的 ELB IP 时,集群网络会在节点上截获流量并直接转发至后端的 Service Endpoint。
此过程会绕过外部的 ELB 实例,导致依赖 ELB 处理的特定配置失效,从而引发访问异常。主要影响的场景包括:
externalTrafficPolicy 设置为 Local:流量可能因被转发到没有后端 Pod 的节点而访问失败。
启用 Proxy Protocol 协议:后端服务无法获取由 ELB 添加的 Proxy Protocol 头部,导致协议握手失败。
使用 HTTP/HTTPS 类型监听:依赖 ELB 进行 TLS 终止或添加特定 Header(如 X-Forwarded-For)等操作将不会生效。
因此,当存在集群内访问 LoadBalancer Service 的需求时,建议:
优先使用 Service 的集群内地址,更为标准且稳定:在集群内部的服务间通信,使用 Service 的 ClusterIP 或其 DNS 名称(如 <service-name>.<namespace>.svc.cluster.local)。
如需使用 ELB 入口,需要为 Service 添加注解 service.beta.kubernetes.io/ctyun-loadbalancer-ip-mode = "proxy",指定Service的External IP模式为Proxy。(该特性要求Kubernetes集群版本大于v1.29)
注意
使用此功能绕行 ELB 访问时,应避免将客户端 Pod 和服务端 Pod 调度到同一节点。否则,可能会因非对称路由问题导致访问不通。
Service更换负载均衡实例限制
已创建LoadBalancer类型的Service不支持重新复用或更换负载均衡实例。如果您需要更换负载均衡实例,请删除并重新创建Service。
配额限制
负载均衡
CCM会根据Service中定义的端口创建监听。默认情况下一个ELB实例可以添加50个监听,如需添加更多监听,请移至配额管理平台提交申请。
负载均衡更新策略
云容器引擎支持为Service指定一个已有的负载均衡实例,或者让CCM自动创建新的负载均衡实例。两种方式在负载均衡的资源更新策略方面存在一些差异,如下表所示。
| 资源对象 | 指定已有负载均衡 | CCM管理的负载均衡 |
|---|---|---|
| 负载均衡 | 设置annotation:service.beta.kubernetes.io/ctyun-loadbalancer-id。 CCM会使用该实例作为Service的负载均衡,并根据其他annotation配置负载均衡,自动为负载均衡创建对应的监听器和后端主机组。 当Service删除时,CCM不会删除您通过ID指定的已有负载均衡。 | CCM会根据Service的配置,自动创建和配置负载均衡、监听、后端主机组等资源,所有资源由CCM管理。 当Service删除时,CCM会删除自动创建的负载均衡。 |
| 监听 | Service指定端口时,不能使用负载均衡监听器已有端口,以免产生端口冲突。 | CCM会根据Service的配置,自动创建和配置监听策略。 |
| 后端主机组 | 当 Service 对应的后端 Endpoint 或集群节点发生变化时,CCM 会自动更新负载均衡的后端主机组。 根据不同集群类型、不同网络插件和 CCM 版本,后端更新策略有所差异,具体如下: 一、Cubecni 网络插件
二、Calico/Flannel 网络插件
三、Serverless集群
| |