我有一个运行容器的 pod,这些容器需要访问 API 密钥和数据库密码等敏感信息。现在,这些敏感值嵌入到控制器定义中,如下所示:
env:
- name: DB_PASSWORD
value: password
然后可以在 Docker 容器中作为$DB_PASSWORD
环境变量使用。一切都相当容易。
但是阅读他们关于Secrets的文档时,他们明确表示将敏感配置值放入您的定义中违反了最佳实践,并且可能是一个安全问题。我能想到的唯一其他策略如下:
- 为每个用户社区或命名空间创建一个 OpenPGP 密钥
- 使用crypt将配置值设置为 etcd(使用私钥加密)
- 创建一个包含私钥的 Kubernetes 机密,就像这样
- 将该秘密与容器相关联(这意味着私钥将可以作为卷安装访问),就像这样
- 当容器启动时,它将访问卷挂载中的文件以获取私钥,并使用它来解密从 etcd 返回的 conf 值
- 然后可以将其合并到confd中,它根据模板定义(例如 Apache 或 WordPress 配置文件)填充本地文件
这看起来相当复杂,但更安全和灵活,因为这些值将不再是静态的并以明文形式存储。
所以我的问题,我知道这不是一个完全客观的问题,这是否完全有必要?首先只有管理员才能查看和执行 RC 定义;因此,如果有人破坏了 Kubernetes 主控,您还有其他问题需要担心。我看到的唯一好处是没有秘密以明文形式提交到文件系统的危险......
还有其他方法可以安全地使用秘密信息填充 Docker 容器吗?