为负载均衡类型的Service指定多个端口配置健康检查
LoadBalancer Service的健康检查相关注解字段由"kubernetes.io/elb.health-check-option"升级为"kubernetes.io/elb.health-check-options",支持Service每个端口单独配置,且可以只配置部分端口。如无需单独配置端口协议,原有注解字段依旧可用无需修改。
约束与限制
- 该特性从以下版本开始支持: 
     
- v1.19集群:v1.19.16-r5及以上版本
 - v1.21集群:v1.21.8-r0及以上版本
 - v1.23集群:v1.23.6-r0及以上版本
 - v1.25集群:v1.25.2-r0及以上版本
 - v1.25以上版本集群
 
 - 不允许同时配置 "kubernetes.io/elb.health-check-option" 和 "kubernetes.io/elb.health-check-options"。
 - target_service_port字段必须配置,且不能重复。
 - TCP端口只能配置健康检查协议为TCP、HTTP,UDP端口必须配置健康检查协议为UDP。
 
操作步骤
为不同service端口配置健康检查,使用"kubernetes.io/elb.health-check-options"注解的示例如下:
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels: 
    app: nginx
    version: v1
  annotations:
    kubernetes.io/elb.class: union         # 负载均衡类型
    kubernetes.io/elb.id: <your_elb_id>    # ELB ID,替换为实际值
    kubernetes.io/elb.lb-algorithm: ROUND_ROBIN  # 负载均衡器算法
    kubernetes.io/elb.health-check-flag: 'on'    # 开启ELB健康检查功能
    kubernetes.io/elb.health-check-options: '[
	{
		"protocol": "TCP",
		"delay": "5",
		"timeout": "10",
		"max_retries": "3",
		"target_service_port": "TCP:1",
		"monitor_port": "22"
	},
	{
		"protocol": "HTTP",
		"delay": "5",
		"timeout": "10",
		"max_retries": "3",
		"path": "/",
		"target_service_port": "TCP:2",
		"monitor_port": "22",
                "expected_codes": "200-399"
	}
    ]'
spec:
  selector:
    app: nginx
    version: v1
  externalTrafficPolicy: Cluster
  ports:
    - name: cce-service-0
      targetPort: 1
      nodePort: 0
      port: 1
      protocol: TCP
    - name: cce-service-1
      targetPort: 2
      nodePort: 0
      port: 2
      protocol: TCP
  type: LoadBalancer
  loadBalancerIP: **.**.**.**
   | 
         参数  | 
       
         是否必填  | 
       
         参数类型  | 
       
         描述  | 
      
|---|---|---|---|
| 
         target_service_port  | 
       
         是  | 
       
         String  | 
       
         spec.ports添加健康检查的目标端口,由协议、端口号组成,如:TCP:80  | 
      
| 
         monitor_port  | 
       
         否  | 
       
         String  | 
       
         重新指定的健康检查端口,不指定时默认使用业务端口。 
          说明: 
          请确保该端口在Pod所在节点已被监听,否则会影响健康检查结果。  | 
      
| 
         delay  | 
       
         否  | 
       
         String  | 
       
         健康检查间隔(秒) 默认值:5,取值范围:1-50  | 
      
| 
         timeout  | 
       
         否  | 
       
         String  | 
       
         健康检查的超时时间(秒) 默认值:10,取值范围1-50  | 
      
| 
         max_retries  | 
       
         否  | 
       
         String  | 
       
         健康检查的最大重试次数 默认值:3,取值范围1-10  | 
      
| 
         protocol  | 
       
         否  | 
       
         String  | 
       
         健康检查的协议 默认值:取关联服务的协议 取值范围:“TCP”、“UDP”或者“HTTP”  | 
      
| 
         path  | 
       
         否  | 
       
         String  | 
       
         健康检查的URL,协议是“HTTP”时需要配置 默认值:“/” 取值范围:1-80字符  | 
      
| 
         expected_codes  | 
       
         否  | 
       
         String  | 
       
         期望响应状态码,仅v1.19.16-r50、v1.21.11-r10、v1.23.9-r10、v1.25.4-r10、v1.27.1-r10及以上版本的集群支持。 取值: 
 默认值:200,取值范围1-64个字符 仅支持HTTP设置该字段,其他协议设置不会生效。  |