组件介绍
External Secrets 组件用于在 TKE 集群中实现 Kubernetes Secret 的外部化管理。组件通过对接外部密钥管理系统(如腾讯云 SSM、HashiCorp Vault、AWS Secrets Manager 等),将外部密钥自动同步为 Kubernetes Secret,从而避免在代码仓库或配置文件中直接存储敏感信息。
组件包含的子模块
子模块 | 类型 | 说明 |
external-secrets | Deployment | 核心 Controller,负责 ExternalSecret / ClusterExternalSecret / PushSecret 的协调与同步。 |
webhook | Deployment | Validating Webhook Server,对 CRD 资源进行准入校验,保障配置合法性。 |
cert-controller | Deployment | 证书控制器,负责自动轮换 Webhook 所需的 TLS 证书。 |
支持的 CRD 资源
CRD | 说明 |
SecretStore | 命名空间级别的密钥存储后端配置。 |
ClusterSecretStore | 集群级别的密钥存储后端配置。 |
ExternalSecret | 命名空间级别的外部密钥同步对象。 |
ClusterExternalSecret | 集群级别的外部密钥同步对象,可跨命名空间创建 Secret。 |
PushSecret | 将 Kubernetes Secret 推送到外部密钥管理系统。 |
配置参数说明
全局参数
名称 | 含义 | 类型 | 必填 | 取值范围 | 备注 |
replicaCount | Controller 副本数 | Integer | 否 | 正整数,默认值为 1 | 生产环境建议设置为 2 并开启 leaderElect |
image.repository | Controller 镜像仓库地址 | String | 否 | 默认使用官方镜像 | - |
image.tag | Controller 镜像版本标签 | String | 否 | 默认使用 Chart appVersion | 留空时自动使用与 Chart 版本匹配的镜像 |
image.pullPolicy | 镜像拉取策略 | String | 否 | IfNotPresent、Always、Never,默认值为 IfNotPresent | - |
imagePullSecrets | 镜像拉取凭证列表 | Array | 否 | 默认值为 [] | 拉取私有仓库镜像时填写 |
serviceAccount.create | 是否自动创建 ServiceAccount | Boolean | 否 | true / false,默认值为 true | 设为 false 时需通过 serviceAccount.name 指定已有 SA |
serviceAccount.name | ServiceAccount 名称 | String | 否 | 默认值为 "" | 留空时自动生成 |
serviceAccount.annotations | ServiceAccount 注解 | Object | 否 | 默认值为 {} | 常用于配置 Workload Identity / IRSA |
rbac.create | 是否自动创建 RBAC 资源 | Boolean | 否 | true / false,默认值为 true | - |
podAnnotations | Controller Pod 注解 | Object | 否 | 默认值为 {} | - |
podSecurityContext | Controller Pod 安全上下文 | Object | 否 | 默认值为 {} | - |
securityContext | Controller 容器安全上下文 | Object | 否 | 默认值为 {} | - |
nodeSelector | Controller 节点选择器 | Object | 否 | 默认值为 {} | - |
tolerations | Controller 容忍配置 | Array | 否 | 默认值为 [] | - |
affinity | Controller 亲和性配置 | Object | 否 | 默认值为 {} | - |
Controller(external-secrets)参数
名称 | 含义 | 类型 | 必填 | 取值范围 | 备注 |
resources.requests.cpu | CPU 请求量 | String | 否 | 默认值为 10m | - |
resources.requests.memory | 内存请求量 | String | 否 | 默认值为 64Mi | - |
resources.limits.cpu | CPU 限制 | String | 否 | 默认值为 100m | - |
resources.limits.memory | 内存限制 | String | 否 | 默认值为 128Mi | - |
leaderElect | 是否启用 Leader 选举 | Boolean | 否 | true / false,默认值为 true | 当 replicaCount > 1 时必须开启 |
concurrent | 并发 Reconcile 数量 | Integer | 否 | 正整数,默认值为 1 | 增大该值可提升大规模集群的同步吞吐量 |
controllerClass | Controller 类名 | String | 否 | 默认值为 "" | 用于多 Controller 实例场景隔离资源处理范围 |
processClusterExternalSecret | 是否处理 ClusterExternalSecret 资源 | Boolean | 否 | true / false,默认值为 true | 设为 false 则忽略集群级别的外部密钥同步对象 |
processClusterStore | 是否处理 ClusterSecretStore 资源 | Boolean | 否 | true / false,默认值为 true | 设为 false 则忽略集群级别的密钥存储后端配置 |
processPushSecret | 是否处理 PushSecret 资源 | Boolean | 否 | true / false,默认值为 true | 设为 false 则禁用将 Kubernetes Secret 推送到外部密钥管理系统的功能 |
extendedMetricLabels | 是否开启扩展指标标签 | Boolean | 否 | true / false,默认值为 false | 开启后 Prometheus 指标包含 Secret 名称等附加标签 |
scopedRBAC | 是否启用 Scoped RBAC | Boolean | 否 | true / false,默认值为 false | 开启后 Controller 仅具有指定命名空间的权限 |
log.level | 日志级别 | String | 否 | debug、info、warn、error,默认值为 info | - |
log.timeEncoding | 日志时间格式 | String | 否 | epoch、millis、nano、iso8601,默认值为 epoch | - |
Webhook 参数
名称 | 含义 | 类型 | 必填 | 取值范围 | 备注 |
webhook.create | 是否部署 Webhook 组件 | Boolean | 否 | true / false,默认值为 true | 禁用后 CRD 资源将不进行准入校验 |
webhook.replicaCount | Webhook 副本数 | Integer | 否 | 正整数,默认值为 1 | - |
webhook.image.repository | Webhook 镜像仓库地址 | String | 否 | 默认与 Controller 共用同一镜像 | - |
webhook.image.tag | Webhook 镜像版本标签 | String | 否 | 默认值为 "" | 留空时与 Controller 镜像版本一致 |
webhook.image.pullPolicy | 镜像拉取策略 | String | 否 | IfNotPresent、Always、Never,默认值为 IfNotPresent | - |
webhook.resources.requests.cpu | CPU 请求量 | String | 否 | 默认值为 10m | - |
webhook.resources.requests.memory | 内存请求量 | String | 否 | 默认值为 64Mi | - |
webhook.resources.limits.cpu | CPU 限制 | String | 否 | 默认值为 100m | - |
webhook.resources.limits.memory | 内存限制 | String | 否 | 默认值为 128Mi | - |
webhook.port | Webhook 服务监听端口 | Integer | 否 | 默认值为 10250 | - |
webhook.servicePort | Webhook Service 对外端口 | Integer | 否 | 默认值为 443 | - |
webhook.certCheckInterval | TLS 证书检查间隔 | String | 否 | 默认值为 5m | 格式遵循 Go duration,例如 5m、1h |
webhook.lookaheadInterval | 证书提前续签时间窗口 | String | 否 | 默认值为 "" | 留空时使用 cert-controller 默认策略 |
webhook.podAnnotations | Webhook Pod 注解 | Object | 否 | 默认值为 {} | - |
webhook.nodeSelector | Webhook 节点选择器 | Object | 否 | 默认值为 {} | - |
webhook.tolerations | Webhook 容忍配置 | Array | 否 | 默认值为 [] | - |
webhook.affinity | Webhook 亲和性配置 | Object | 否 | 默认值为 {} | - |
CertController 参数
名称 | 含义 | 类型 | 必填 | 取值范围 | 备注 |
certController.create | 是否部署 CertController 组件 | Boolean | 否 | true / false,默认值为 true | 禁用时需自行管理 Webhook 的 TLS 证书 |
certController.replicaCount | CertController 副本数 | Integer | 否 | 正整数,默认值为 1 | - |
certController.image.repository | CertController 镜像仓库地址 | String | 否 | 默认与 Controller 共用同一镜像 | - |
certController.image.tag | CertController 镜像版本标签 | String | 否 | 默认值为 "" | 留空时与 Controller 镜像版本一致 |
certController.image.pullPolicy | 镜像拉取策略 | String | 否 | IfNotPresent、Always、Never,默认值为 IfNotPresent | - |
certController.resources.requests.cpu | CPU 请求量 | String | 否 | 默认值为 10m | - |
certController.resources.requests.memory | 内存请求量 | String | 否 | 默认值为 64Mi | - |
certController.resources.limits.cpu | CPU 限制 | String | 否 | 默认值为 100m | - |
certController.resources.limits.memory | 内存限制 | String | 否 | 默认值为 128Mi | - |
certController.requeueInterval | 证书轮换检查间隔 | String | 否 | 默认值为 5m | 格式遵循 Go duration,例如 5m、1h |
certController.podAnnotations | CertController Pod 注解 | Object | 否 | 默认值为 {} | - |
certController.nodeSelector | CertController 节点选择器 | Object | 否 | 默认值为 {} | - |
certController.tolerations | CertController 容忍配置 | Array | 否 | 默认值为 [] | - |
certController.affinity | CertController 亲和性配置 | Object | 否 | 默认值为 {} | - |
通过 Terraform 管理组件参数
使用 Terraform 管理 TKE 集群时,可通过
addon_config 字段传入 JSON 格式的 Helm values,自定义组件配置。以下示例展示了如何通过 Terraform 配置 ExternalSecrets 组件的副本数和资源限制:
resource "tencentcloud_kubernetes_addon_attachment" "external_secrets" {cluster_id = var.cluster_idname = "external-secrets"addon_config = jsonencode({replicaCount = 2leaderElect = trueresources = {requests = { cpu = "50m", memory = "128Mi" }limits = { cpu = "200m", memory = "256Mi" }}webhook = {replicaCount = 2}certController = {replicaCount = 1}})}
说明:
addon_config 接受标准 Helm values 结构。各参数的含义和默认值请参见上方配置参数说明。使用方法
安装组件
您可以按照以下步骤进行安装:
1. 登录 容器服务控制台,在左侧导航栏中选择集群。
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建。
4. 在新建组件管理页面中勾选 external-secrets。
5. 单击完成即可创建组件。