我使用Kubernetes Init容器来配置应用程序的数据库。完成此操作后,我想通过环境变量将DB的凭据提供给主容器。
如何归档?
我不想在Init容器中创建Kubernetes Secret,因为我不想在那里保存凭据!
答案 0 :(得分:4)
我看到了几种实现目标的方法:
从我的角度来看,最好的方法是使用Kubernetes Secret。 @Nebril已在评论中提供了这个想法。例如,您可以通过Init Container生成它并通过PreStop钩子将其删除。但是,你不想这样做。
您可以使用InitConatainer和主pod使用的共享卷。 InitContainer将在您可以装入的卷中生成环境变量文件db_cred.env
,例如,/env
路径。之后,您可以通过在Pod规范中修改容器的command
来加载它,并在启动应用程序的主脚本之前添加命令source /env/db_cred.env
。 @ user2612030已经给了你这个想法。
Hashicorp的另一种替代方式是Vault,您可以将其用作所有凭据的存储。
您可以使用一些自定义解决方案直接从Kubernetes应用程序写入和读取Etcd。这是一个图书馆示例 - k8s-kv。
但无论如何,在Kubernetes中存储凭据的最佳和最正确的方法是Secrets。它比几乎任何其他方式更安全,更容易。