负载均衡(LoadBalancer) ELB转发说明 LoadBalancer类型Service创建完后,可以在ELB控制台查看ELB实例的监听器转发规则,如下所示。 图 ELB转发说明 可以看到这个ELB实例创建了一个监听器,其后端服务器地址是Pod的IP地址,业务端口是容器端口。这是因为Pod使用了ENI或SubENI,ELB会直通Pod,当有流量通过ELB请求时,会直接转发给Pod,从而访问到Pod,这跟操作场景中所述是一致的。 ELB直通容器场景(CCE Turbo + 独享型ELB实例)下,LoadBalancer类型Service创建完后,可以在ELB控制台查看ELB实例的监听器转发规则,如下所示。 图 ELB转发说明 Service使用HTTP 说明 Service使用HTTP仅v1.19.16及以上版本集群支持。 CCE控制台当前仅支持自动创建4层独享型ELB实例,此种情况下无法使用HTTP能力,在控制台创建Service使用HTTP时请选择对接已有独享型ELB实例。 请勿将Ingress与使用HTTP的Service对接同一个ELB下的同一个监听器,否则将产生端口冲突。 Service支持使用ELB的7层能力,共享型和独享型ELB都支持对接。 独享型ELB实例有如下限制: 对接已有的独享型ELB实例,需要 独享型ELB实例同时支持4层和7层的flavor ,否则会功能不可用。 使用自动创建的ELB实例,注意 同时使用独享型ELB实例的4层和7层能力 ,需要在kubernetes.io/elb.autocreate的annotation中指定4层和7层flavor。 使用ELB的7层能力时,需要添加如下annotation kubernetes.io/elb.protocolport : "https:443,http:80" protocolport的取值需要和service的spec.ports字段中的端口对应,格式为protocol:port,port中的端口会匹配service.spec.ports中端口,并将该端口发布成对应的protocol协议。 kubernetes.io/elb.certid : "17e3b4f4bc40471c86741dc3aa211379" certid内容为ELB证书管理的证书ID,当protocolport指定了https协议,ELB监听器的证书会设置为certid证书,当发布多个HTTPS的服务,会使用同一份证书。 配置示例如下,其中spec.ports中两个端口与kubernetes.io/elb.protocolport中对应,443端口、80端口分别发布成HTTPS、HTTP协议。 apiVersion: v1 kind: Service metadata: annotations: kubernetes.io/elb.autocreate: ' { "type": "public", "bandwidthname": "ccebandwidth1634816602057", "bandwidthchargemode": "bandwidth", "bandwidthsize": 5, "bandwidthsharetype": "PER", "eiptype": "5bgp", "availablezone": [ "cnnorth4b" ], "l7flavorname": "L7flavor.elb.s2.small", "l4flavorname": "L4flavor.elb.s1.medium" }' kubernetes.io/elb.class: performance kubernetes.io/elb.protocolport: "https:443,http:80" kubernetes.io/elb.certid: "17e3b4f4bc40471c86741dc3aa211379" labels: app: nginx name: test name: test namespace: default spec: ports: name: cceservice0 port: 443 protocol: TCP targetPort: 80 name: cceservice1 port: 80 protocol: TCP targetPort: 80 selector: app: nginx version: v1 sessionAffinity: None type: LoadBalancer 使用上面的示例创建Service,在新建的ELB实例中可以看到创建了443端口和80端口的监听器。