我使用一个Kubernetes Init容器来配置应用程序的数据库。完成后,我想通过环境变量将DB凭据提供给主容器。
如何实现这一点呢?
我不想在Init容器内创建一个Kubernetes机密,因为我不想在那里保存凭据!
我使用一个Kubernetes Init容器来配置应用程序的数据库。完成后,我想通过环境变量将DB凭据提供给主容器。
如何实现这一点呢?
我不想在Init容器内创建一个Kubernetes机密,因为我不想在那里保存凭据!
从我的角度来看,最好的方法是使用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。
CMD/ENTRYPOINT
将会执行 app-boot.sh
,其中它将会执行 source /env/db_cred.ev
。 - Marcello DeSales