容器服务 ExternalSecrets 说明

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 否 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_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. 单击完成即可创建组件。

赞 (0)
上一篇 4天前
下一篇 4天前