# 取消负载均衡类型的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管控，后续不再更新或删除。            | 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时，仅清理后端云服务器组，监听器不会被级联删除。        | 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可对接同一个监听器，各自独立管理后端云服务器组。           | 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及以上 |
   
#### 注意事项
- 取消监听器托管后**不支持恢复**，如需恢复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连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
 
#### 创建负载均衡并取消监听器托管
您可以通过以下方式进行创建。
- [通过控制台创建]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧导航栏中选择"服务"，在右上角单击"创建服务"。 
     本示例中仅列举取消监听器托管相关的必选参数，其余参数保持默认，您可根据需求参考[通过控制台创建](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section6880821105120)进行设置。
     
     
  
  3. 设置基础配置参数。 
     
     | 参数    | 说明                                                                                                                                                                           | 示例       |
     |:---|:---|:---|
     | 访问类型 | 选择"负载均衡"。                                                                                                                                                                  | -       |
     | 服务名称   | 自定义服务名称，可与工作负载名称保持一致。                                                                                                                                                      | nginx     |
     | 命名空间 | 工作负载所在命名空间。                                                                                                                                                               | default |
     | 选择器   | 您可以添加Pod标签的键值，Service将会根据标签与工作负载的Pod进行关联，将流量导向包含该标签的Pod。 您也可以引用已有工作负载的标签，单击"引用负载标签"，在弹出的窗口中选择负载，然后单击"确定"。 | app:nginx |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002407634521.png "点击放大")
     
     
     
  
  4. 设置负载均衡配置参数。 
     
     | 参数     | 说明                                                                                                                                                                           | 示例                                              |
     |:---|:---|:---|
     | 负载均衡器 | 取消监听器托管功能只支持选择已有ELB，不支持自动创建ELB。 仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例，请单击"创建负载均衡器"跳转到ELB控制台创建。                                                    | 选择已有"独享型"的"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"实例 |
     | 监听器托管             | 勾选表示由CCE托管监听器（默认行为），CCE自动管理监听器的创建、更新和删除。取消勾选表示取消监听器托管，CCE仅创建后端云服务器组、健康检查和后端服务器成员，不创建和管理监听器。 请您前往ELB控制台手动配置监听器，并关联当前Service生成的后端云服务器组。**且后续将无法再切换成监听器托管模式。** | 不勾选                                                       |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002660004031.png "点击放大")
     
     
     
  
  5. 填写访问设置参数。 
     
     | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     |:---|:---|:---|
     | 服务亲和 | 选择将外部流量路由到节点本地或集群范围的端点，详情请参见[服务亲和（externalTrafficPolicy）](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html#cce_10_0249__section18134208069)。 - 集群级别：集群下所有节点的IP+节点端口均可以访问到此服务关联的负载，服务访问会因路由跳转导致一定性能损失，且无法获取到客户端源IP。  - 节点级别：只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载，服务访问没有因路由跳转导致的性能损失，且可以获取到客户端源IP。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 集群级别                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | 端口配置   | - 协议：请根据业务的协议类型选择。根据Kubernetes中定义的实现方案，Service在使用ELB提供的非UDP协议时，都需要将该参数设置为TCP并选择对应的[监听器前端协议](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__li1688115499190)。详细说明请参见[Service所用的协议](https://kubernetes.io/zh-cn/docs/reference/networking/service-protocols/#special-cases)。  - 容器端口：工作负载程序实际监听的端口，需用户确定。例如nginx默认使用80端口。  - 服务端口：Service使用的端口。 - 单端口监听：端口范围为1-65535。  - 区间端口监听：负载均衡服务支持创建某个端口范围的监听器，您最多可为每个监听器添加10个互不重叠的监听端口段。 为负载均衡服务配置区间端口监听需满足以下条件： - 集群版本为v1.23.18-r0、v1.25.13-r0、v1.27.10-r0、v1.28.8-r0、v1.29.4-r0、v1.30.1-r0及以上。  - 使用独享型ELB且选择TCP/UDP/TLS协议。  - 该功能依赖ELB能力，使用该功能前请确认ELB在当前区域是否支持四层协议全端口监听和转发。      - 监听器前端协议：ELB监听器的前端协议，是客户端与负载均衡监听器建立流量分发连接所使用的协议。当选择独享型负载均衡器类型时，包含"应用型（HTTP/HTTPS）"方可支持配置HTTP/HTTPS；包含"网络型（TCP/UDP/TLS）"方可支持配置TLS。   说明： 在创建LoadBalancer类型Service时，会自动生成一个随机节点端口号（NodePort）。 | - 协议：TCP协议  - 容器端口：80  - 服务端口：80  - 监听器前端协议：HTTP   |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002413836705.png "点击放大")
     
     
     
  
  6. 单击"创建"，创建Service。
  
  7. 创建完成后，您需要在ELB侧手动创建监听器，并将后端云服务器组绑定至监听器，否则流量无法转发。具体操作请参见[在ELB侧配置监听器并绑定后端云服务器组]。
   
- [通过kubectl命令行创建]
  - **创建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共享监听器示例**
    ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
    网络型（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侧配置监听器并绑定后端云服务器组]。
    
   
 #### 在ELB侧配置监听器并绑定后端云服务器组
取消监听器托管后，您需要在ELB侧手动创建监听器并绑定后端云服务器组，流量才能正常转发。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"服务"，找到目标Service所在行，单击负载均衡名称跳转至ELB控制台。
3. 在左侧导航栏选择"后端服务器组"，在搜索框中输入Service名称搜索对应的后端云服务器组。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   后端云服务器组的名称由Service名称、监听器协议和端口等组成。如果存在同名后端云服务器组，请查看其描述信息，描述中包含集群ID和Service ID，可用于区分。
   
   
4. 在左侧导航栏选择"负载均衡器"，进入对应的负载均衡器详情页面。
5. 切换至"监听器"页签，单击"添加监听器"，创建对应端口的监听器。
6. 在监听器配置中，将步骤3中查找到的后端云服务器组绑定至该监听器。 
   - 使用应用型ELB的场景，还需配置转发策略（域名/URL规则），将不同后端云服务器组关联至同一监听器。
   
   - 使用网络型ELB的场景，一个监听器只能绑定一个后端云服务器组。
   
   
   
   
7. 完成配置后，验证流量是否正常转发。
 
