5

最近我了解了 HashiCorp Vault 及其与 Kubernetes 的结合使用。我发现了两篇关于如何使用 HashiCorp Vault 通过使用 init-container 和共享卷(post1post2)即时生成凭据的非常棒的博客文章。Kubernetes 还提供了一种处理带有 Kubernetes 机密的凭证的好方法,这也使人们能够通过环境变量读取凭证。因此,它为秘密存储提供了一个很好的抽象。

我的问题是 HashiCorp Vault 是否也可以用于使用凭据填充 Kubernetes Secrets,如何实现?

4

3 回答 3

6

正如@Rico 提到的那样,在 Vault 和 Kubernetes 中暴露这些秘密首先违背了使用 Vault 的目的。

使用 Vault,数据被加密(传输/休息),您可以提供对谁可以访问哪些数据的访问粒度控制。将 Vault 中的数据暴露给基本上仅限于 base64 编码的 Kubernetes Secret 对象,将在很大程度上破坏 Vault 的最大好处即保护您的基础设施并成为负责管理您的秘密的单一实体。

Vault 是一个很棒的工具,但在我看来,它对于非开发配置可能会变得相当复杂,因为您将不得不附加 Consul 之类的工具,这样您就可以拥有持久的后端存储,因此使用架构分布式模式,例如因为sidecar 模式也可能过于矫枉过正,根本不推荐。

  • 但是有了它,您可以在与您的“主”容器相同的 Pod 中“生活”一个 Vault 实例,因此可以利用 Vault 提供的加密服务,但我们会将 Vault 的生命周期与 Pod 的生命周期联系起来。
  • 使用这种方法,我们需要在每个 Pod 上都有一个 Vault 实例,以防我们计划必须访问秘密信息,这只会使系统变得极其复杂。通过这种方法,我们可以将每个对象所需的秘密信息分离到多个保管库实例上,从而将我们基础设施的秘密信息传播到多个地方,但我们不断增加管理基础设施的挑战。

因此,我完全理解,试图找到一种方法将 Pod 所需的秘密信息放在它旁边似乎很诱人,特别是以一种简单的方式,但如果它完全不加密,肯定会达不到目的。

既然这样,为什么不简单地创建一个 Vault 控制器,该控制器将是负责与 Vault 交互的实体,其将负责查询 Vault 的 Wrapped Tokens,它可以在被 Pod 内的初始化容器解包?这是因为启动 Pod 需要额外的时间,因为我们需要执行一些早期调用来检索 Wrapped Token?或者是因为在需要从 Vault 查询秘密数据时必须执行额外调用的额外延迟?

每当我想到集成 Kubernetes 和 Vault 的想法时,我通常倾向于考虑以下由 Kelsey Hightower 解释的原型

于 2018-10-17T21:01:16.397 回答
3

我的问题是 HashiCorp Vault 是否也可以用于使用凭据填充 Kubernetes Secrets,如何实现?

是和不是。

否:Kubernetes 或 Vault 方面都没有支持。仅支持使用服务帐户向 Vault 进行身份验证。一个更大的问题是为什么您希望 Vault 在 Kubernetes 机密中填充机密,因为它们在 Vault 中已经是“安全的”。

是的:你必须建立自己的自动化。你所有的秘密都是这样的:

kubectl create secret generic mynicepass2 --from-literal=key1=`vault read <your-secret>`
于 2018-10-17T19:53:00.320 回答
2

考虑到 3 年过去了,一些更新的东西:

BanzaiCloud 的 mutating webhook可以做到这一点 ,尤其要注意BanzaiCloud 的 mutating webhook

当然你需要考虑安德烈提到的事情:你最终会得到带有该秘密数据的 Kubernetes 秘密(而不是被注入 POD 的秘密数据)

还有Vault CSI 提供者

于 2021-11-16T15:58:22.033 回答