如何配置External-Secrets-Operator避免Vault故障时修改K8s Secrets?
配置External Secrets Operator(ESO)在Vault交互异常时保留现有K8s Secret值
完全可以通过配置实现这个需求,核心是利用ESO的特定字段,同时配合正确的Vault KV v2配置从根源减少异常场景:
1. 核心配置:spec.refreshPolicy: Retain
在你的ExternalSecret资源中添加这个字段,当ESO无法从Vault获取有效密钥(比如路径错误、权限不足、KV版本不匹配等情况)时,会保留Kubernetes Secret的现有值,而不是覆盖为空字符串。
示例配置片段:
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: your-app-secret spec: refreshPolicy: Retain # 关键配置,异常时保留旧值 secretStoreRef: name: vault-secret-store kind: SecretStore target: name: your-app-k8s-secret data: - secretKey: db-password remoteRef: key: apps/your-app/db-creds property: password
2. 可选补充:spec.target.deletionPolicy: Retain
如果希望当ExternalSecret资源被删除时,对应的Kubernetes Secret依然保留,可以添加这个配置,进一步避免意外丢失密钥数据:
spec: target: name: your-app-k8s-secret deletionPolicy: Retain # 删除ExternalSecret时不删除K8s Secret
3. 修复KV v2适配问题(解决根源异常)
你之前遇到的KV升级后找不到密钥的问题,是因为KV v2的路径规则和API逻辑与v1不同,需要在SecretStore中明确指定KV版本:
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: vault-secret-store spec: provider: vault: server: "https://your-vault-server" path: "secret" # Vault中KV引擎的挂载路径 version: "v2" # 明确指定使用KV v2版本 auth: tokenSecretRef: name: vault-auth-token key: token
同时,ExternalSecret中remoteRef.key的路径要对应Vault KV v2中存储密钥的路径(不需要加data前缀,ESO会自动处理v2的API路径)。
内容的提问来源于stack exchange,提问作者Michael Martinez
相关产品推荐
相关产品推荐

