更新时间:2024-01-04 GMT+08:00

Service使用HTTP/HTTPS协议

约束与限制

  • Service使用HTTP/HTTPS协议仅v1.19.16及以上版本集群支持。
  • 请勿将Ingress与使用HTTP/HTTPS的Service对接同一个ELB下的同一个监听器,否则将产生端口冲突。

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:
    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",
          "l4_flavor_name": "L4_flavor.elb.s1.medium"
      }'
    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端口的监听器。