在Kubernetes Init容器

时间:2018-03-30 09:21:13

标签: docker kubernetes environment-variables

我使用Kubernetes Init容器来配置应用程序的数据库。完成此操作后,我想通过环境变量将DB的凭据提供给主容器。

如何归档?

我不想在Init容器中创建Kubernetes Secret,因为我不想在那里保存凭据!

1 个答案:

答案 0 :(得分:4)

我看到了几种实现目标的方法:

  1. 从我的角度来看,最好的方法是使用Kubernetes Secret。 @Nebril已在评论中提供了这个想法。例如,您可以通过Init Container生成它并通过PreStop钩子将其删除。但是,你不想这样做。

  2. 您可以使用InitConatainer和主pod使用的共享卷。 InitContainer将在您可以装入的卷中生成环境变量文件db_cred.env,例如,/env路径。之后,您可以通过在Pod规范中修改容器的command来加载它,并在启动应用程序的主脚本之前添加命令source /env/db_cred.env。 @ user2612030已经给了你这个想法。

  3. Hashicorp的另一种替代方式是Vault,您可以将其用作所有凭据的存储。

  4. 您可以使用一些自定义解决方案直接从Kubernetes应用程序写入和读取Etcd。这是一个图书馆示例 - k8s-kv

  5. 但无论如何,在Kubernetes中存储凭据的最佳和最正确的方法是Secrets。它比几乎任何其他方式更安全,更容易。