我打算将我们的应用程序(包含多个微服务)打包成图表。
现在,对于每个微服务,我们将秘密和配置值直接硬编码到我们的deployment.yaml
文件中...containers[].env
。我们所有的yaml
文件都存储在git repo。
我注意到一些热门图表使用ConfigMap
(1,2)和Secret
(1,2)Kubernetes对象分别存储配置值和秘密。
使用ConfigMap
和Secret
对象有哪些优势,无论是人体工程学和/或安全性增益?
我已经可以从我们拥有的所有yaml
文件中创建模板,使所有硬编码值可配置,因此在helm的模板编译时可以解析。
然而,由于Kubernetes提供专门的对象来存储配置和秘密,我想证明添加configmap.yaml
和secrets.yaml
模板文件,以及从现有deployment.yaml
文件添加对它们的引用。
答案 0 :(得分:2)
Configmaps是非常通用的配置文件。它们可以包含键值对列表,但它们也可以是通用文件。例如,您可以在配置映射中存储nginx配置文件nginx.conf
,并将其加载到适当的位置,以便nginx守护程序读取它。
秘密应该用于存储敏感数据,不幸的是,现在秘密没有加密,它们只是基于64编码。因此,虽然这有助于您从清单中删除硬编码的非加密值,但它根本无助于加密。这应该会在v1.7
中变得更好您可以在部署清单中设置环境变量,以指向secrets或configmaps中的特定值。两者也可以使用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变量时,我使用了一个秘密,请记住它没有加密。