HashiCorp Vault填充kubernetes秘密

时间:2018-10-17 16:01:41

标签: kubernetes hashicorp-vault kubernetes-secrets

最近,我了解了HashiCorp Vault及其结合Kubernetes的用法。我发现了两个非常棒的博客文章,内容涉及如何使用HashiCorp Vault通过使用初始化容器和共享卷(post1post2)快速生成信誉。 Kubernetes还提供了一种使用Kubernetes机密处理凭据的好方法,它还使人们能够通过环境变量读取凭据。因此,它为秘密存储提供了很好的抽象。

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

2 个答案:

答案 0 :(得分:5)

正如@Rico提到的那样,在Vault和Kubernetes中同时公开秘密会破坏首先使用Vault的目的。

使用保险柜,数据被加密(传输/剩余),并且您可以提供访问权限控制,以控制谁可以访问哪些数据。将Vault中的数据暴露给基本上限于base64编码的Kubernetes Secret对象,将大大削弱 Vault 的最大好处,即保护您的基础架构并成为负责管理您的秘密的单一实体

Vault是一个很棒的工具,但我认为对于非开发配置,它可能会变得更加复杂,因为您将不得不附加Consul之类的东西,以便拥有持久的后端存储,因此可以利用架构诸如sidecar pattern之类的分布式模式可能也非常过分,根本不建议使用。

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

因此,我绝对理解,试图找到一种方法将Pod紧紧放置在Pod旁边似乎很诱人,特别是以一种简单的方式,但是如果只是将其完全未加密,则肯定会破坏目的。

通过这种方式,为什么不简单地创建一个Vault控制器,该控制器将成为负责与Vault交互的实体,并且将负责查询Vault的Wrapped Token,后者可以临时提供对某些机密信息的访问权限,被Pod内部的init容器解包后?那是由于启动Pod所需的额外时间,因为我们需要执行一些早期调用才能检索包装的令牌吗?还是由于必须在需要从保险柜中查询机密数据时执行额外的调用而导致的额外延迟?

每当我想到整合Kubernetes和Vault的想法时,我通常都会倾向于考虑由Kelsey Hightower创建的以下原型,here进行了解释。

答案 1 :(得分:3)

  

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

是,不是。

否:Kubernetes或Vault方面均不提供支持。仅支持使用Service Account对保险柜进行身份验证。一个更大的问题是,为什么您希望Vault填充Kubernetes秘密中的秘密,因为它们已经在Vault中“安全”了。

是:您将必须构建自己的自动化。像这样的东西为您所有的秘密:

kubectl create secret generic mynicepass2 --from-literal=key1=`vault read <your-secret>`