更新时间:2024-12-04 GMT+08:00

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。

操作步骤

使用"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,401,404"
	}
    ]'
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”

path

String

健康检查的URL,协议是“HTTP”时需要配置

默认值:“/”

取值范围:1-80字符