更新时间:2026-03-30 GMT+08:00
分享

为负载均衡类型的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: **.**.**.**
表1 elb.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设置该字段,其他协议设置不会生效。

相关文档