本文档介绍 TKE 接入层组件(service-controller 和 ingress-controller)通过 ConfigMap 管理的全局开关配置。全局开关用于控制集群级别的特性行为,与资源级注解 Service Annotation 和 Ingress Annotation 不同,全局开关对整个集群生效。
概述
全局开关存储在
kube-system 命名空间下的 ConfigMap tke-service-controller-config 中。用户可通过修改该 ConfigMap 来动态开启或关闭集群级别的特性。ConfigMap 示例:
apiVersion: v1kind: ConfigMapmetadata:name: tke-service-controller-confignamespace: kube-systemdata:VERSION: "v2.11.4"GlobalRouteDirectAccess: "true"EnableNodeGracefulDeletion: "false"EnablePodGracefulDeletion: "false"EnableDefaultModificationProtection: "true"EnableDefaultDirectAccess: "true"
用户可配置的全局开关
GlobalRouteDirectAccess — GR 直连访问
项目 | 说明 |
ConfigMap Key | GlobalRouteDirectAccess |
作用 | |
支持版本 | >= v1.6.0,ConfigMap 可配置。支持配置 true 和 false |
新建集群默认值 | true(默认开启) |
注意事项 | 开启后,Service/Ingress 仍需要配置直连访问模式注解 service.cloud.tencent.com/direct-access: 'true' 或者 ingress.cloud.tencent.com/direct-access: 'true' |
EnableNodeGracefulDeletion — 节点优雅删除
项目 | 说明 |
ConfigMap Key | EnableNodeGracefulDeletion |
作用 | 控制集群是否开启节点优雅删除特性。开启后,当节点被删除或缩容时,控制器会先将该节点上的所有负载均衡实例(Cloud Load Balancer,CLB) 后端权重调整为 0,等待流量排空后再解绑后端,避免节点下线导致流量中断。 |
支持版本 | >= v2.4.2,支持配置 true 和 false |
新建集群默认值 | false(默认关闭) |
注意事项 | 开启后,节点删除过程中可能需要等待一段时间才能完成,如果节点下线紧急可关闭此开关。此开关仅对 NodePort 模式的 Service 生效。 |
EnablePodGracefulDeletion — Pod 优雅删除
项目 | 说明 |
ConfigMap Key | EnablePodGracefulDeletion |
作用 | 控制集群是否开启 Pod 优雅删除特性。开启后,当 Pod 被删除时,控制器会先将该 Pod 在 CLB 上的权重调整为 0,等待流量排空后再解绑后端,避免 Pod 下线导致请求失败。 |
支持版本 | >= v2.8.0,支持配置 true 和 false |
新建集群默认值 | false(默认关闭) |
注意事项 | 仅在直连访问模式下生效。全局开关作为默认值:开启后,集群内所有直连访问模式的 Service/Ingress 默认启用 Pod 优雅删除。用户可通过资源级注解 service.cloud.tencent.com/enable-grace-deletion 覆盖全局开关,对单个 Service/Ingress 单独开启或关闭。 |
EnableDefaultModificationProtection — 默认修改保护
项目 | 说明 |
ConfigMap Key | EnableDefaultModificationProtection |
作用 | 控制集群内自动创建的 CLB 是否默认开启配置修改保护。开启后,自动创建的 CLB 将无法通过 CLB 控制台或 API 修改负载均衡实例的配置属性,防止误操作。 |
支持版本 | >= v2.11.1,支持配置 true 和 false |
新建集群默认值 | true(v2.11.1 起默认开启) |
注意事项 | 该开关仅对新增的、自动创建 CLB 的资源生效,对存量资源不回溯。用户仍可通过 Service/Ingress 的 modification-protection 注解在资源级别单独控制修改保护属性。 |
EnableDefaultDirectAccess — 默认直连访问
项目 | 说明 |
ConfigMap Key | EnableDefaultDirectAccess |
作用 | 控制集群内新建的 LoadBalancer 类型 Service/Ingress 是否默认开启直连访问模式。开启后,新建的 Service/Ingress 将自动添加直连注解( direct-access: "true"),CLB 直接绑定 Pod IP 而非 NodePort。 |
支持版本 | >= v2.11.0,支持配置 true 和 false |
新建集群默认值 | 根据集群网络类型动态决定,TKE GlobalRoute 网络和 TKE VPC-CNI 网络新建集群默认值为 true;其他网络类型新建集群无默认值。 |
注意事项 | 该开关仅影响新建的 Service/Ingress,对存量资源不回溯。 |
只读字段
以下 ConfigMap 字段为系统自动写入的只读字段,用户不应修改:
ConfigMap Key | 说明 |
VERSION | 当前 controller 的版本号,由系统自动同步。 |
REUSE_LOADBALANCER | Service 支持复用 CLB 特性是否已开启,v2.5.1 起默认为 true,由组件自动写入。 |
注意:
系统会监听 ConfigMap 的变更事件,如果只读字段被用户修改,控制器会强制覆盖回正确的值。
常见问题
1. 修改 ConfigMap 后多久生效?
可配置类型的全局开关修改后立即生效,控制器会监听 ConfigMap 的变更事件并动态调整状态,无需重启组件。
2. 全局开关和注解(Annotation)有什么区别?
全局开关是集群级别的配置,对集群内所有资源生效;注解是资源级别的配置,只对单个 Service/Ingress 生效。两者的关系因开关而异:部分开关(如
EnablePodGracefulDeletion)作为默认值,当资源未设置对应注解时以全局开关为准,资源级注解可覆盖全局开关;部分开关(如 EnableDefaultDirectAccess)仅影响新建资源的默认行为。例如 EnablePodGracefulDeletion 开启后,所有直连访问模式的 Service/Ingress 默认启用 Pod 优雅删除,但用户可通过 service.cloud.tencent.com/enable-grace-deletion 注解对单个资源单独关闭。3. 存量集群升级后,新增的全局开关是否会自动开启?
不会。存量集群升级时,ConfigMap 中已存在的字段不会被覆盖,新增的开关只在 ConfigMap 首次创建时(即新建集群)设置默认值。例如,存量集群升级到 v2.11.1 后,
EnableDefaultModificationProtection 全局开关不会自动开启。4. 如何查看当前集群的全局开关状态?
kubectl get configmap tke-service-controller-config -n kube-system -o yaml
5. 如何修改全局开关?
kubectl edit configmap tke-service-controller-config -n kube-system