CLB 目标组

最近更新时间:2025-08-20 15:34:12

我的收藏

概述

容器服务 TKE 已支持通过 Kubernetes 自定义资源 TargetGroup,实现对负载均衡 CLB 新版本目标组的创建、复用与管理。用户可以通过为 Service 添加目标组 Annotation,将指定目标组绑定到 LB Service 端口对应的监听器上。

使用前提

在 CLB 侧开启使用新版本四层目标组以及支持新版本目标组挂载弹性网卡 IP 白名单。若需要使用七层目标组能力,则需要开启七层目标组白名单(联系 CLB 侧 提交工单 进行开启)。
确保集群内的 service-controller 以及 ingress-controller 版本 ≥ v2.8.0 (若版本未达到要求,请联系 TKE 侧 提交工单 进行升级)。
请务必阅读并确认 相关限制风险

核心概念

TargetGroup CRD

TargetGroup 是 TKE 引入的自定义资源(CRD),用于映射和管理 CLB 侧的目标组资源。TKE 侧会定期将用户定义的配置同步并覆盖到 CLB 侧目标组上。
TargetGroup 主要有两种使用方式:

纳管 CLB 侧已有目标组

用户在 CLB 控制台创建并配置目标组后,在 TKE 集群创建 TargetGroup 资源,并在 spec.id字段填写 CLB 目标组 ID(注意此时暂不支持填写 spec 下的其他字段)。该 TargetGroup 资源提交到集群后,系统会自动同步 CLB 侧目标组配置到 TargetGroup 资源,同步完成后,用户可以在 TKE 侧对 CLB 目标组的相关属性进行配置。
apiVersion: cloud.tencent.com/v1alpha1
kind: TargetGroup
metadata:
name: existing-tg
spec:
id: lbtg-123456
注意:
目标组配置同步期间,用户禁止对 TargetGroup 资源的配置进行修改。

新建 CLB 目标组

用户在 TKE 侧创建 TargetGroup 资源,TKE 根据用户提交的配置信息帮助用户在 CLB 侧创建目标组。用户需要指定待创建目标组的协议类型,如 TCP,HTTP 等。TargetGroup 资源的完整字段与定义请参考 定义
apiVersion: cloud.tencent.com/v1alpha1
kind: TargetGroup
metadata:
name: target-group
spec:
protocol: TCP
name: test
注意:
通过 TargetGroup CRD 新建的 CLB 目标组在集群销毁后不会被回收,需要用户于 CLB 控制台进行删除。

在 LB Service 上使用目标组

通过在 Service 上添加以下的 Annotation 为 Service 的某个端口开启目标组能力:
service.cloud.tencent.com/target-groups: |
[
{"protocol": "TCP", "port": 80, "name": "default.test.tcp.80"}
]
配置中的字段含义如下:
protocol:需要开启目标组能力的端口协议,必填。
port:需要开启目标组能力的端口,必填。
name:该端口需要关联的 TargetGroup CR 资源名称,选填。
注意:
如果在上述配置中指定了 name,则 name 对应的 TargetGroup CR 资源必须提前创建。
当配置中的 name 字段非空时,TKE 会自动将用户指定端口对应的 CLB 监听器关联到指定名称的 TargetGroup 资源引用的 CLB 目标组上,完成 CLB 侧监听器与目标组的绑定。
当配置中未指定 name 字段时,TKE 会自动为用户在集群中创建一个 TargetGroup 资源,并将端口对应的 CLB 监听器关联到该自动创建的 CLB 目标组上。
说明:
自动创建的 TargetGroup 资源名称为 <service 命名空间>.<service 名称>.<protocol>.<port>。
当 TKE 完成监听器与目标组的绑定后,会将该 Service 选中的所有 Pod 作为 RS 绑定到 CLB 目标组上。
通过更新 name 字段用户可以切换对应监听器绑定的 CLB 目标组。
警告:
切换 CLB 目标组涉及到 RS 切换,可能有断流风险,请谨慎操作。

在 ClusterIP Service 上使用目标组

TKE 同时支持在 ClusterIP 类型的 Service 上使用目标组。此时service.cloud.tencent.com/target-groups配置中的 name 字段必填。TKE 仅会将该 Service 所选中的所有 Ready Pod 作为 RS 绑定到指定的 CLB 目标组上。

相关限制

Service 的某一端口开启目标组后,不支持回滚(即回滚到监听器直接绑定 RS 的模式)。
不支持多个 TargetGroup 资源纳管同一个 CLB 目标组。
不支持纳管与当前集群所在 VPC 不同的 CLB 目标组。
不支持单个 Service 的不同端口使用相同的 TargetGroup 资源。
不支持多个 Service 引用相同的 TargetGroup 资源。
当前仅支持绑定弹性网卡 IP 的 Service 开启目标组(非直连或者 GR 直连模式 Service 不支持)。
不支持配置了自定义权重(service.cloud.tencent.com/lb-rs-weight)的 Service 使用目标组。
不支持一个 Service 端口配置多个 TargetGroup 资源。

风险提示

开启或者切换目标组涉及到 RS 的绑定与解绑,可能有断流风险。
请勿在 CLB 控制台对 TKE 侧管理的目标组进行修改,否则会有配置覆盖的风险。

TargetGroup CRD 字段说明

apiVersion: cloud.tencent.com/v1alpha1
kind: TargetGroup
metadata:
name: default.tg-test.tcp.80
spec:
keepAlive: false # 是否开启长连接,此参数仅适用于HTTP/HTTPS监听器。选填,默认为 false
sessionExpireTime: 0 # 会话保持时间。选填,默认为 0
scheduleAlgorithm: WRR # 七层目标组负载均衡算法:WRR;LEAST_CONN;IP_HAS。 默认为 WRR
healthCheck: # 健康检查配置,选填。
protocol: TCP # 健康检查协议 TCP;HTTP;HTTPS;PING;CUSTOM;GRPC。必填
healthyThresholdCount: 3 # 检测健康阈值:2-10。选填,默认为 3
interval: 5 # 检查间隔:3-300。选填,默认为 5
jumboFrame: false # 是否开启巨帧。选填,默认 false
port: 80 # 健康检查端口。选填,默认为rs注册端口
timeout: 2 # 超时时间。选填,默认为 2
unhealthyThresholdCount: 3 # 检查失败阈值:2-10。选填,默认为 3
extendedCode: 12 # GRPC健康检查状态码(仅适用于后端转发协议为GRPC的规则)。选填,默认为12
custom: # 当健康检查类型为 CUSTOM 时可配置
contextType: TEXT # 文本类型:HEX,TEXT。必填
sendContext: "xxxxx" # 发送内容
receiveContext: "xxxxx" # 接收内容
http: # 当健康检查类型为 HTTP 时可配置
domain: test.com # 健康检查域名。选填
path: / # 健康检查路径。选填
method: GET # HTTP 请求方式:GET,HEAD。选填,默认为 GET
version: HTTP/1.0 # HTTP 版本:HTTP/1.0;HTTP/1.1。选填,默认为 HTTP/1.0
statusCodes: # 表示健康检查正常的状态码列表:1,2,3,4,5。选填,默认为1,2,3,4
- 1 # 1xx
- 2 # 2xx
name: test-tg # CLB 侧目标组资源名称。选填,默认为 <集群 ID>.<k8s 资源名称>
protocol: TCP # 协议类型:TCP;UDP;HTTP;HTTPS;TCP_SSL;QUIC。必填
id: lbtg-xxxxx # CLB 目标组ID,填写了 id 的情况下不能填写其他字段。选填