为负载均衡类型的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: **.**.**.**
参数 | 是否必填 | 参数类型 | 描述 |
|---|---|---|---|
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相关能力。
注意: 当需要切换健康检查的协议时(包括全局检查和自定义检查互相切换的场景),需要先关闭健康检查,然后重新开启并切换其他协议。 |
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-599。若健康检查type为GRPC,则默认值为0,状态码范围为0-99。 仅支持HTTP/HTTPS/GRPC设置该字段,其他协议设置不会生效。 |

