
# 为ELB Ingress配置多个监听端口
Ingress支持配置自定义监听端口，可为同一个服务配置HTTP和HTTPS协议的监听器，例如一个服务可以同时暴露HTTP协议的80端口和HTTPS的443端口对外提供访问。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.23集群：v1.23.14-r0及以上
  
  - v1.25集群：v1.25.9-r0及以上
  
  - v1.27集群：v1.27.6-r0及以上
  
  - v1.28集群：v1.28.4-r0及以上
  
  - 其他更高版本的集群
   
- 集群中需提前部署可用的工作负载用于对外提供访问。若您无可用工作负载，可参见[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)、[创建有状态负载（StatefulSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0048.html)或[创建守护进程集（DaemonSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0216.html)部署工作负载。
- 为提供对外访问的工作负载配置Service，ELB Ingress支持的Service类型请参见[ELB Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section3565202819276)。
 
#### 约束与限制
仅使用独享型ELB时，Ingress支持配置多个监听端口。
#### 通过kubectl命令行配置
1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)，使用kubectl连接集群。
2. 创建名为"**ingress-test.yaml** "的YAML文件，此处文件名可自定义。
   
   ```
   vi ingress-test.yaml
   ```
   以使用已有ELB为例，配置示例如下：
   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     annotations:
       kubernetes.io/elb.id: 2c623150-17bf-45f1-ae6f-384b036f547e     # 已有ELB的ID
       kubernetes.io/elb.class: performance    # ELB的类型
       kubernetes.io/elb.listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'    # 多监听器配置
       kubernetes.io/elb.tls-certificate-ids: 6cfb43c9de1a41a18478b868e34b0a82,6cfb43c9de1a41a18478b868e34b0a82   # HTTPS证书配置
     name: ingress-test
     namespace: default
   spec:
     ingressClassName: cce
     rules:
     - host: example.com
       http:
         paths:
         - backend:
             service:
               name: test
               port:
                 number: 8888
           path: /
           pathType: ImplementationSpecific
           property:
             ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
   ```
   
   表1自定义监听端口注解 
   | 参数                             | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|:---|
   | kubernetes.io/elb.listen-ports | String | 为同一个Ingress创建多个监听端口，端口号范围为1\~65535。 参数值为JSON格式的字符串，示例如下： ``` kubernetes.io/elb.listen-ports: '[{"HTTP":80},{"HTTPS":443}]' ``` - 仅支持同时配置HTTP和HTTPS协议的监听端口。  - v1.23.18-r10、v1.25.16-r0、v1.27.16-r0、v1.28.13-r0、v1.29.8-r0、v1.30.4-r0以下集群版本中仅支持新建Ingress场景，且配置多个监听端口后annotation不支持修改和删除。v1.23.18-r10、v1.25.16-r0、v1.27.16-r0、v1.28.13-r0、v1.29.8-r0、v1.30.4-r0及以上集群版本中支持修改和删除。  - 同时指定多监听器（kubernetes.io/elb.listen-ports）和单监听器（kubernetes.io/elb.port）配置时，多监听器优先级更高。  - Ingress内配置项对多个监听器同时生效，如黑白名单配置、超时时间配置。Ingress开启HTTP/2配置时，HTTP/2仅在HTTPS端口生效。   |
      
   
   
3. 创建Ingress。 
   ```
   kubectl create -f ingress-test.yaml
   ```
   回显类似如下，表示Ingress服务已创建。
   ```
   ingress.networking.k8s.io/ingress-test created
   ```
   
   
4. 查看已创建的Ingress。 
   ```
   kubectl get ingress
   ```
   回显如下，表示Ingress服务创建成功。
   ```
   NAME          CLASS    HOSTS           ADDRESS          PORTS   AGE
   ingress-test  cce      example.com     121.**.**.**     80,443  10s
   ```
   
   
 
