存储配置和秘密

Storing configuration and secrets

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

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

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

使用ConfigMapSecret对象有哪些优势,无论是人体工程学and/or安全收益

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

但是,由于 Kubernetes 提供了专门的对象来存储配置和机密,我想证明添加 configmap.yamlsecrets.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 中加载文件时,我使用配置映射,当我处理敏感的环境变量时,我使用秘密,请记住它没有加密。