为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)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。
- 为提供对外访问的工作负载配置Service,ELB Ingress支持的Service类型请参见ELB Ingress支持的Service类型。
通过kubectl命令行配置
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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端口生效。
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test cce example.com 121.**.**.** 80,443 10s