External Secrets Operator 是什么
External Secrets Operator(ESO)把外部密钥库(Vault、AWS/GCP/Azure 密钥服务等)里的密钥同步为 K8s Secret:密钥的唯一真源留在外部库,集群只是投影。模型分两层:SecretStore / ClusterSecretStore 定义后端与认证方式,ExternalSecret 声明要拉取哪些键、落到哪个 Secret;refreshInterval 控制对齐周期,外部库变更后集群自动更新。好处是集中管理、按需下发、避免密钥散落在集群各处。
基本信息
| 模型 | SecretStore/ClusterSecretStore 定义后端与认证;ExternalSecret 声明要拉取的键 |
|---|---|
| 同步 | 按 refreshInterval 定期对齐;变更入集群自动更新 |
| 收益 | 密钥唯一真源在外部库,集群只是投影 |
| 权限边界 | 控制器能读的密钥范围即攻击面,逐环境隔离后端 |
典型使用场景
- 多集群统一密钥:各集群从同一外部库同步,杜绝各环境手工配置漂移。
- 轮换自动化:外部库轮换后,集群按周期自动对齐,缩短旧密钥存活时间。
- 审计集中:密钥访问记录留在外部库的审计日志里,谁读了什么有据可查。
- 减少集群内的长期凭据:以 workload identity 方式认证,集群不存基础凭据。
- 环境隔离:生产 Store 使用独立认证与路径,开发账号看不到生产密钥。
ExternalSecret 片段
ExternalSecret 片段
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
spec:
refreshInterval: 1h
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: db-credentials
data:
- secretKey: password
remoteRef:
key: prod/db
property: password资源速查
| 资源 | 作用 |
|---|---|
| SecretStore | 命名空间级的后端定义与认证 |
| ClusterSecretStore | 集群级后端,跨命名空间复用 |
| ExternalSecret | 声明拉取键与目标 Secret |
| refreshInterval | 同步周期,按密钥敏感度设置 |
集群侧权限最小化:该控制器能读的密钥范围即攻击面范围,逐环境隔离后端与凭据。
同步失败要可观测:外部库不可达时目标 Secret 保持旧值,表现为「改了不生效」,监控 ExternalSecret 状态与同步延迟。
多集群时各集群控制器独立认证:一处凭据泄露不影响其他集群,这也是选用同步模型而非中心化推送的理由之一。