取消负载均衡类型的Service关联ELB的监听器托管
默认情况下,CCE为负载均衡类型的Service自动创建并完全托管监听器,包括监听器的创建、更新和删除,满足大多数的使用场景,但是在某些特殊场景下,托管机制可能无法灵活处理监听器配置。为满足这些场景诉求,CCE支持取消负载均衡类型的Service关联ELB的监听器托管,取消监听器托管后,CCE不再管理该Service关联的监听器,用户可以在ELB侧独立管理监听器配置(如超时时间、TLS证书、ACL等),满足多Service共享监听器等灵活场景。
功能说明
| 场景 | 功能说明 | 支持的集群版本 |
|---|---|---|
| 创建Service时取消监听器托管 | 创建Service时取消监听器托管,CCE仅创建后端云服务器组、健康检查和后端服务器成员,不创建监听器。 | v1.29.15-r90、v1.30.14-r90、v1.31.14-r50、v1.32.13-r20、v1.33.12-r0、v1.34.8-r0、v1.35.5-r0、v1.36.1-r10及以上 |
| 更新Service时取消监听器托管 | 对已有Service取消监听器托管,已有监听器脱离CCE管控,后续不再更新或删除。 | |
| 删除Service时保留监听器 | 删除已取消监听器托管的Service时,仅清理后端云服务器组,监听器不会被级联删除。 | |
| 多Service共享监听器 | 多个取消监听器托管的Service可对接同一个监听器,各自独立管理后端云服务器组。 |
注意事项
- 取消监听器托管后不支持恢复,如需恢复CCE对监听器的托管,需要删除并重建Service。
- 取消监听器托管后,您需要自行在ELB侧创建监听器并绑定后端云服务器组,否则流量无法完成转发。
- 如果使用应用型(HTTP/HTTPS)的ELB,您需要自行在ELB侧配置转发策略。
- 删除已取消监听器托管的Service时,仅清理后端云服务器组(含健康检查和后端服务器成员),监听器保留在ELB侧,需用户自行清理。
- 建议使用ELB侧创建的监听器,而不是其他Service/Ingress创建的监听器。若一个由CCE托管监听器的Service与一个取消监听器托管的Service共享同一监听器,当托管监听器的Service被删除时,监听器会被级联删除,导致取消监听器托管的Service流量中断。您需要注意Service间的依赖关系。
- 取消监听器托管不可与跨集群后端特性(kubernetes.io/elb.multicluster)同时使用。
- 使用独享型ELB时,取消监听器托管的Service创建完成后,系统会自动添加kubernetes.io/elb.listener-port注解和kubernetes.io/elb.listener-port-ranges-auto-generated注解,这些annotation用于内部状态管理,请勿自行指定该注解,且不建议自行修改或删除,否则会导致ELB下资源回收失败。
前提条件
- 已创建CCE集群,且集群版本满足功能说明表中要求。
- 如果您需要通过命令行创建,需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
创建负载均衡并取消监听器托管
您可以通过以下方式进行创建。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。
本示例中仅列举取消监听器托管相关的必选参数,其余参数保持默认,您可根据需求参考通过控制台创建进行设置。
- 设置基础配置参数。
参数
说明
示例
访问类型
选择“负载均衡”。
-
服务名称
自定义服务名称,可与工作负载名称保持一致。
nginx
命名空间
工作负载所在命名空间。
default
选择器
您可以添加Pod标签的键值,Service将会根据标签与工作负载的Pod进行关联,将流量导向包含该标签的Pod。
您也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
app:nginx

- 设置负载均衡配置参数。
参数
说明
示例
负载均衡器
取消监听器托管功能只支持选择已有ELB,不支持自动创建ELB。
仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例,请单击“创建负载均衡器”跳转到ELB控制台创建。
选择已有“独享型”的“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”实例
监听器托管
勾选表示由CCE托管监听器(默认行为),CCE自动管理监听器的创建、更新和删除。取消勾选表示取消监听器托管,CCE仅创建后端云服务器组、健康检查和后端服务器成员,不创建和管理监听器。
请您前往ELB控制台手动配置监听器,并关联当前Service生成的后端云服务器组。且后续将无法再切换成监听器托管模式。
不勾选

- 填写访问设置参数。
参数
说明
示例
服务亲和
选择将外部流量路由到节点本地或集群范围的端点,详情请参见服务亲和(externalTrafficPolicy)。- 集群级别:集群下所有节点的IP+节点端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。
- 节点级别:只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。
集群级别
端口配置
- 协议:请根据业务的协议类型选择。根据Kubernetes中定义的实现方案,Service在使用ELB提供的非UDP协议时,都需要将该参数设置为TCP并选择对应的监听器前端协议。详细说明请参见Service所用的协议。
- 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
- 服务端口:Service使用的端口。
- 监听器前端协议:ELB监听器的前端协议,是客户端与负载均衡监听器建立流量分发连接所使用的协议。当选择独享型负载均衡器类型时,包含“应用型(HTTP/HTTPS)”方可支持配置HTTP/HTTPS;包含“网络型(TCP/UDP/TLS)”方可支持配置TLS。
说明:在创建LoadBalancer类型Service时,会自动生成一个随机节点端口号(NodePort)。
- 协议:TCP协议
- 容器端口:80
- 服务端口:80
- 监听器前端协议:HTTP

- 单击“创建”,创建Service。
- 创建完成后,您需要在ELB侧手动创建监听器,并将后端云服务器组绑定至监听器,否则流量无法转发。具体操作请参见在ELB侧配置监听器并绑定后端云服务器组。
- 创建Service时取消监听器托管 以关联已有ELB为例,创建Service时取消监听器托管的YAML文件配置如下:
apiVersion: v1 kind: Service metadata: name: nginx-skip-listener labels: app: nginx namespace: default annotations: kubernetes.io/elb.class: performance # ELB类型 kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204 # 已有ELB的ID kubernetes.io/elb.skip-managed-listener: 'true' # 取消监听器托管 kubernetes.io/elb.protocol-port: http:80 # 使用HTTP协议 spec: selector: app: nginx externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: LoadBalancer loadBalancerIP: **.**.**.** # ELB的IP表1 关键参数说明 参数
参数类型
描述
kubernetes.io/elb.skip-managed-listener
String
取消监听器托管。取消后CCE不再管理该Service关联的监听器。
- true:取消监听器托管,CCE仅创建后端云服务器组、健康检查和后端服务器成员,不创建和管理监听器。
- 不设置或设为其他值:保持默认行为,CCE完全托管监听器。
创建完成后,您需要在ELB侧手动创建监听器,并将后端云服务器组绑定至监听器,否则流量无法转发。具体操作请参见在ELB侧配置监听器并绑定后端云服务器组。
- 多Service共享监听器示例
网络型(TCP/UDP/TLS)ELB场景下一个监听器只能绑定一个后端云服务器组,多Service共享监听器主要适用于应用型(HTTP/HTTPS)ELB的场景。
以下示例展示两个Service共享同一个ELB监听器的配置:
- Service A:
apiVersion: v1 kind: Service metadata: name: service-a namespace: default annotations: kubernetes.io/elb.class: performance kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204 # 同一个ELB实例 kubernetes.io/elb.skip-managed-listener: 'true' # 取消监听器托管 kubernetes.io/elb.protocol-port: http:80 # 使用HTTP协议 spec: selector: app: app-a ports: - name: cce-service-0 targetPort: 8080 port: 80 protocol: TCP type: LoadBalancer - Service B:
apiVersion: v1 kind: Service metadata: name: service-b namespace: default annotations: kubernetes.io/elb.class: performance kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204 # 同一个ELB实例 kubernetes.io/elb.skip-managed-listener: 'true' # 取消监听器托管 kubernetes.io/elb.protocol-port: http:80 # 使用HTTP协议 spec: selector: app: app-b ports: - name: cce-service-0 targetPort: 8081 port: 80 protocol: TCP type: LoadBalancer
创建完成后,您需要在ELB侧创建一个监听器,并通过转发策略将Service A和Service B各自的后端云服务器组关联至该监听器,配置域名/URL转发规则实现流量分发。具体操作请参见在ELB侧配置监听器并绑定后端云服务器组。
- Service A:
在ELB侧配置监听器并绑定后端云服务器组
取消监听器托管后,您需要在ELB侧手动创建监听器并绑定后端云服务器组,流量才能正常转发。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,找到目标Service所在行,单击负载均衡名称跳转至ELB控制台。
- 在左侧导航栏选择"后端服务器组",在搜索框中输入Service名称搜索对应的后端云服务器组。
后端云服务器组的名称由Service名称、监听器协议和端口等组成。如果存在同名后端云服务器组,请查看其描述信息,描述中包含集群ID和Service ID,可用于区分。
- 在左侧导航栏选择“负载均衡器”,进入对应的负载均衡器详情页面。
- 切换至“监听器”页签,单击“添加监听器”,创建对应端口的监听器。
- 在监听器配置中,将步骤3中查找到的后端云服务器组绑定至该监听器。
- 使用应用型ELB的场景,还需配置转发策略(域名/URL规则),将不同后端云服务器组关联至同一监听器。
- 使用网络型ELB的场景,一个监听器只能绑定一个后端云服务器组。
- 完成配置后,验证流量是否正常转发。