直接回答:K8s Secret 只是 base64 编码的 ConfigMap——默认明文存在 etcd 里,任何能读 etcd 或具有 Secret get 权限的人都能拿到原文。它解决的是"配置与镜像分离",不是加密保险柜。生产正确姿势:开启 etcd 静态加密(EncryptionConfiguration 加 KMS)、RBAC 最小化 Secret 访问、更重要的是用外部密钥管理(云 KMS/Vault)作为源头,Secret 只存引用或完全不落 K8s。
展开解析:主流方案三条路线。其一,云商集成:Secrets Store CSI Driver 把云 KMS/Key Vault 的密钥以卷挂载进 Pod,etcd 不落敏感值,支持轮转。其二,Vault 体系:sidecar/agent 注入,用 K8s SA 认证换取动态凭证(数据库动态账号用完即焚),功能最强但运维最重。其三,GitOps 友好方案:Sealed Secrets / SOPS——密钥加密后才能进 git,集群内控制器解密,兼顾声明式与不进明文。通用纪律:Secret 不挂环境变量(进程崩溃 dump、子进程继承都会泄),优先 volume 挂载;审计 Secret 访问日志;密钥定期轮换且应用支持热加载。别把密钥打进镜像或 ConfigMap——扫描镜像仓库是攻击者的日常。
追问方向:etcd 静态加密的密钥本身放哪(KMS 信封加密)?动态凭证如何改变数据库账号管理?Secret 挂载为环境变量为何更危险?
(约 460 字)