如何在 Kubernetes 中部署 HashiCorp Vault 而无需编写大量 YAML 清单
任何手动在 Kubernetes 集群中设置 HashiCorp Vault 的人都记得那无尽的 Deployment、StatefulSet、ConfigMap、TLS 密钥和 sidecar 容器的组装工作。YAML 文件中一个缩进错误——你的应用程序就会失去对数据库的访问。
官方 vault-helm chart 解决了这个问题。HashiCorp 工程师将密钥管理器的部署打包成一个单一的 chart,涵盖了从本地开发环境到分布式 HA 集群的一切。
为什么要使用这个 Chart?
该仓库已成为在 Kubernetes 中运行 Vault 的标准方式。你无需从头编写 pod 规范,也无需弄清楚如何为内置的 Raft 共识挂载存储。这些设置已经内置在 values.yaml 配置文件中。
该工具对在其基础设施中组织密钥存储的 DevOps 工程师和系统管理员很有用。如果你的服务需要 API 密钥、数据库凭证或 TLS 证书,该 chart 可以在几分钟内帮助你部署一个可靠的 vault。
主要特性
Chart 开发者预见了主要的使用场景:
-
快速切换操作模式
你可以通过配置参数将实例从独立模式切换到容错集群。对于本地测试,最小化的 values 文件就足够了,而生产环境则启用内置的 Raft 或外部数据库。
-
通过 Vault Agent Injector 进行密钥注入
你的应用程序不再需要知道如何与 vault 的 REST API 交互。注入器自动向 pod 添加一个 sidecar 容器。该容器检索密钥并将其保存到 pod 的本地文件系统。应用程序从文件中读取数据,而无需与 Vault 网络进行任何交互。
-
通过 Kubernetes Auth Engine 进行身份验证
该 chart 与 Kubernetes 授权机制集成。Vault 验证 pod 服务账户,仅向授权的应用程序提供密钥。
-
组件分离
你可以分别部署服务器端、代理和注入器。这有助于将 Vault 服务器移出主应用程序,或仅在 worker 节点上运行轻量级代理。
如何部署 Vault
你需要运行 Kubernetes 集群版本 1.29 或更高版本,以及已安装的 Helm 版本 3.6+。设置一个基本的 release 实例只需两个命令:
对于真实环境,标准设置通常不够。你需要一个自定义参数文件,例如 custom-values.yaml:
使用组装好的参数部署 chart:
之后,你只需访问正在运行的 pod,运行 vault operator init 命令,然后 unseal vault。
运维注意事项
values.yaml 配置文件包含数百个选项。第一次就弄清楚所有选项可能很有挑战性,所以准备好花时间阅读官方文档。
第二个问题是关于重启后 unseal vault。默认情况下,Vault 以 sealed 状态启动。对于生产使用,最好立即通过云 KMS 服务配置 Auto-Unseal,否则每次 pod 崩溃后你都需要手动输入密钥。
这个工具适合谁
如果你使用 Kubernetes 并计划实施集中式密钥管理,这个 chart 将为你节省数周编写自己的清单的工作。
首先在隔离的命名空间中部署一个测试实例。尝试向一个简单的测试应用程序添加注入器注解,看看密钥如何进入容器而无需对你的源代码进行任何更改。
相关项目