存储配置和秘密

时间:2017-06-07 08:42:51

标签: configuration kubernetes kubernetes-helm

我打算将我们的应用程序(包含多个微服务)打包成图表。

现在,对于每个微服务,我们将秘密和配置值直接硬编码到我们的deployment.yaml文件中...containers[].env。我们所有的yaml文件都存储在git repo。

我注意到一些热门图表使用ConfigMap12)和Secret12)Kubernetes对象分别存储配置值和秘密。

使用ConfigMapSecret对象有哪些优势,无论是人体工程学和/或安全性增益?

我已经可以从我们拥有的所有yaml文件中创建模板,使所有硬编码值可配置,因此在helm的模板编译时可以解析。

然而,由于Kubernetes提供专门的对象来存储配置和秘密,我想证明添加configmap.yamlsecrets.yaml模板文件,以及从现有deployment.yaml文件添加对它们的引用。

1 个答案:

答案 0 :(得分:2)

Configmaps是非常通用的配置文件。它们可以包含键值对列表,但它们也可以是通用文件。例如,您可以在配置映射中存储nginx配置文件nginx.conf,并将其加载到适当的位置,以便nginx守护程序读取它。

秘密应该用于存储敏感数据,不幸的是,现在秘密没有加密,它们只是基于64编码。因此,虽然这有助于您从清单中删除硬编码的非加密值,但它根本无助于加密。这应该会在v1.7

中变得更好

您可以在部署清单中设置环境变量,以指向secretsconfigmaps中的特定值。两者也可以使用kubectl轻松生成,例如:

  • kubectl create secret generic foobar --from-literal=password=foobar
  • kubectl create configmap foobar --from-file=foobar.conf

Helm chart最佳做法是使用两者,请参阅mariadb chart

就个人而言,当我需要在Pod中加载文件时,我使用了configmap,当我处理敏感的env变量时,我使用了一个秘密,请记住它没有加密。