
# 为负载均衡类型的Service指定多个端口配置健康检查
LoadBalancer Service的健康检查相关注解字段由"kubernetes.io/elb.health-check-option"升级为"kubernetes.io/elb.health-check-options"，支持Service每个端口单独配置健康检查，且可以只配置部分端口。如无需为指定端口单独配置健康检查，依旧可使用原有健康检查字段为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字段必须配置，且不能重复。
 
#### 操作步骤
为不同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"
}
    ]'
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: **.**.**.**
```
表1elb.health-check-options字段数据结构说明 
| 参数                  | 是否必填 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| 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"、"HTTPS"、"TLS"、"GRPC" 选择"HTTPS"、"TLS"或者 "GRPC"协议需要使用独享型ELB且集群版本为v1.28.15-r90、v1.29.15-r50、v1.30.14-r50、v1.31.14-r10、v1.32.9-r10、v1.33.7-r10、v1.34.3-r0及以上。GRPC和TLS依赖ELB能力，使用该功能前请提交工单申请开通ELB相关能力。 - 若监听器后端协议为UDP/QUIC，则健康检查协议只能是UDP。  - 若监听器后端协议为TCP，则健康检查协议可以是TCP、HTTP、HTTPS。  - 若监听器后端协议为TLS/HTTP/HTTPS/GRPC，则健康检查协议可以是TCP、HTTP、HTTPS、TLS、GRPC。   注意： 当需要切换健康检查的协议时（包括全局检查和自定义检查互相切换的场景），需要先关闭健康检查，然后重新开启并切换其他协议。 |
| path                | 否    | String | 健康检查的URL，协议是"HTTP"、"HTTPS"、"GRPC"时需要配置 默认值："/" 取值范围：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"。  - 列表：多个特定返回码，例如"200,202"。  - 区间：一个返回码区间，例如"200-204"。   默认值：200，状态码范围为200-599。若健康检查type为GRPC，则默认值为0，状态码范围为0-99。 仅支持HTTP/HTTPS/GRPC设置该字段，其他协议设置不会生效。                                                                                                                                                                                                                |
   
