更新时间:2024-01-26 GMT+08:00
Service使用HTTP协议
约束与限制
- Service使用HTTP协议仅v1.19.16及以上版本集群支持。
- 请勿将Ingress与使用HTTP的Service对接同一个ELB下的同一个监听器,否则将产生端口冲突。
- Service支持使用ELB的7层能力,共享型和独享型ELB都支持对接。
- 对接已有的独享型ELB实例时,需要独享型ELB实例支持4层和7层的flavor,否则会功能不可用。
- 使用自动创建的ELB实例时,暂不支持使用CCE控制台自动创建7层独享型ELB实例,请通过YAML进行创建,并注意使用独享型ELB实例的4层和7层能力(即在kubernetes.io/elb.autocreate的annotation中指定4层和7层flavor)。
Service使用HTTP协议
使用ELB的7层能力时,需要添加如下annotation:
- kubernetes.io/elb.protocol-port: "https:443,http:80"
protocol-port的取值需要和service的spec.ports字段中的端口对应,格式为protocol:port,port中的端口会匹配service.spec.ports中端口,并将该端口发布成对应的protocol协议。
- kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379"
cert-id内容为ELB证书管理的证书ID,当protocol-port指定了https协议,ELB监听器的证书会设置为cert-id证书,当发布多个HTTPS的服务,会使用同一份证书。
配置示例如下,其中spec.ports中两个端口与kubernetes.io/elb.protocol-port中对应,443端口、80端口分别发布成HTTPS、HTTP协议。
apiVersion: v1 kind: Service metadata: annotations: #自动创建ELB实例时,需要同时指定4层和7层flavor kubernetes.io/elb.autocreate: ' { "type": "public", "bandwidth_name": "cce-bandwidth-1634816602057", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "" ], "l7_flavor_name": "L7_flavor.elb.s2.small" }' kubernetes.io/elb.class: performance kubernetes.io/elb.protocol-port: "https:443,http:80" kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" labels: app: nginx name: test name: test namespace: default spec: ports: - name: cce-service-0 port: 443 protocol: TCP targetPort: 80 - name: cce-service-1 port: 80 protocol: TCP targetPort: 80 selector: app: nginx version: v1 sessionAffinity: None type: LoadBalancer
使用上面的示例创建Service,在新建的ELB实例中可以看到创建了443端口和80端口的监听器。
父主题: 负载均衡(LoadBalancer)