2

我打算将我们的应用程序(由多个微服务组成)包装到一个图表中。

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

我注意到一些流行的图表使用ConfigMap( 1 , 2 ) 和Secret( 1 , 2 ) Kubernetes 对象分别存储配置值和秘密。

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

我已经可以从yaml我们拥有的所有文件中制作模板,使所有硬编码的值都可配置,从而在 helm 的模板编译期间可解析。

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

4

1 回答 1

2

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

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

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

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

Helm 图表的最佳实践是同时使用两者,请参阅mariadb 图表

就个人而言,当我需要在 Pod 中加载文件时,我使用配置映射,而当我处理敏感的环境变量时,我使用秘密,请记住它没有加密。

于 2017-06-07T14:09:09.713 回答