存储配置和秘密
Storing configuration and secrets
我打算将我们的应用程序(由多个微服务组成)包装到图表中。
现在,对于每个微服务,我们将直接硬编码的秘密和配置值存储在 deployment.yaml
文件中,在 ...containers[].env
中。我们所有的 yaml
文件都存储在 git 存储库中。
我注意到一些流行的图表使用 ConfigMap
(1, 2) and Secret
(1, 2) Kubernetes 对象分别存储配置值和秘密。
使用ConfigMap
和Secret
对象有哪些优势,无论是人体工程学and/or安全收益?
我已经可以用我们拥有的所有 yaml
文件制作模板,使所有硬编码值都可配置,从而在 helm 的模板编译期间可解析。
但是,由于 Kubernetes 提供了专门的对象来存储配置和机密,我想证明添加 configmap.yaml
和 secrets.yaml
模板文件以及从现有 deployment.yaml
添加对它们的引用是合理的文件。
Configmap 是非常通用的配置文件。它们可以由键值对列表组成,但也可以是通用文件。例如,您可以将 nginx 配置文件 nginx.conf
存储在 configmap 中,并将其加载到适当的位置以供 nginx 守护进程读取。
秘密应该用于存储敏感数据,不幸的是现在秘密没有加密,它们只是基于 64 位编码。因此,虽然这可以帮助您从清单中删除硬编码的非加密值,但对加密根本没有帮助。这应该会在 v1.7
中变得更好
您可以在部署清单中设置环境变量以指向 secrets or configmaps 中的特定值。两者也很容易用 kubectl
生成,例如:
kubectl create secret generic foobar --from-literal=password=foobar
kubectl create configmap foobar --from-file=foobar.conf
Helm 图表最佳做法是同时使用两者,请参阅 mariadb chart。
就个人而言,当我需要在 Pod 中加载文件时,我使用配置映射,当我处理敏感的环境变量时,我使用秘密,请记住它没有加密。
我打算将我们的应用程序(由多个微服务组成)包装到图表中。
现在,对于每个微服务,我们将直接硬编码的秘密和配置值存储在 deployment.yaml
文件中,在 ...containers[].env
中。我们所有的 yaml
文件都存储在 git 存储库中。
我注意到一些流行的图表使用 ConfigMap
(1, 2) and Secret
(1, 2) Kubernetes 对象分别存储配置值和秘密。
使用ConfigMap
和Secret
对象有哪些优势,无论是人体工程学and/or安全收益?
我已经可以用我们拥有的所有 yaml
文件制作模板,使所有硬编码值都可配置,从而在 helm 的模板编译期间可解析。
但是,由于 Kubernetes 提供了专门的对象来存储配置和机密,我想证明添加 configmap.yaml
和 secrets.yaml
模板文件以及从现有 deployment.yaml
添加对它们的引用是合理的文件。
Configmap 是非常通用的配置文件。它们可以由键值对列表组成,但也可以是通用文件。例如,您可以将 nginx 配置文件 nginx.conf
存储在 configmap 中,并将其加载到适当的位置以供 nginx 守护进程读取。
秘密应该用于存储敏感数据,不幸的是现在秘密没有加密,它们只是基于 64 位编码。因此,虽然这可以帮助您从清单中删除硬编码的非加密值,但对加密根本没有帮助。这应该会在 v1.7
中变得更好您可以在部署清单中设置环境变量以指向 secrets or configmaps 中的特定值。两者也很容易用 kubectl
生成,例如:
kubectl create secret generic foobar --from-literal=password=foobar
kubectl create configmap foobar --from-file=foobar.conf
Helm 图表最佳做法是同时使用两者,请参阅 mariadb chart。
就个人而言,当我需要在 Pod 中加载文件时,我使用配置映射,当我处理敏感的环境变量时,我使用秘密,请记住它没有加密。