ExternalSecrets 说明

最近更新时间:2026-05-20 17:35:35

我的收藏

组件介绍

External Secrets 组件用于在 TKE 集群中实现 Kubernetes Secret 的外部化管理。组件通过对接外部密钥管理系统(如腾讯云 SSM、HashiCorp Vault、AWS Secrets Manager 等),将外部密钥自动同步为 Kubernetes Secret,从而避免在代码仓库或配置文件中直接存储敏感信息。
组件基于 external-secrets 开源项目构建,通过自定义资源(CRD)描述密钥来源与同步策略,Controller 负责监听并同步,实现密钥的生命周期管理。

组件包含的子模块

子模块
类型
说明
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
IfNotPresentAlwaysNever,默认值为 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
debuginfowarnerror,默认值为 info
-
log.timeEncoding
日志时间格式
String
epochmillisnanoiso8601,默认值为 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
IfNotPresentAlwaysNever,默认值为 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,例如 5m1h
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
IfNotPresentAlwaysNever,默认值为 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,例如 5m1h
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_id
name = "external-secrets"

addon_config = jsonencode({
replicaCount = 2
leaderElect = true
resources = {
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. 单击完成即可创建组件。