目前,我的配置文件存储在GitHub中。我有一个json文件,格式如下:{
DEV:
{ key1 : val1, key2 : val2 }
,PROD:
{ key1 : val1, key2 : val2 }
}
。
我的构建系统复制git,构建项目并创建Docker映像并存储在私有Docker注册表中。我将jar文件和配置文件复制到Docker映像中。每当我旋转一个容器时,我就注入一个环境变量(ENV=DEV/PROD),我的代码使用这个变量来读取基于环境的信任。
我有几个问题要问:
发布于 2017-02-23 22:10:10
我对你大多数问题的回答是“哈希科普的跳台”
您可以在您的环境中旋转一个Vault集群,让您的容器连接到Vault,并在启动和运行时从Vault获取机密。实现秘密检索的最简单的方法是在启动时将秘密读入容器,并插入到容器的ENV中。
如果更进一步,您可以在应用程序运行时使用语言级保险库客户端库来检索和刷新机密,从而消除重新启动容器以检索新机密的必要性。
这怎么符合你的要求?
我会说是Vault。如果需要,可以使用将机密写入文件或文件夹,但这意味着将机密写入磁盘并不理想。TMK K8s在rest中存储未加密的秘密,这也不理想。我更喜欢这里的Vault。每个环境都有自己的Vault集群,还有您的“特定于环境的配置”。
请参见上面的。金库在休息时储存加密的秘密。使用您的Vault令牌(如果您愿意,可以通过卷装入到容器中)来访问这些秘密并解密它们。然后,您可以在启动容器主进程之前将它们推送到ENV,或者进行更紧密的集成,使Vault成为应用程序逻辑的一部分。
这一问题的答案在很大程度上取决于配置所包含的内容。如果它是特定于代码修订,我强烈建议将它与您的代码捆绑在一起,以防止代码和配置中的任何不匹配。
如果它实际上独立于代码(例如:调整值或秘密),我会将它们扔到Vault --当您可以将它们存储在加密的秘密管理系统中时,为什么要将它们放在文件中呢?
但是,如果您的心放在文件上,您可以轻松地将它们从一个已知的卷安装到一个已知的路径,并且所有的调度系统(包括Nomad now)都允许使用已部署的容器进行卷安装。
领事是你的朋友,如果你只想在启动时改变秘密的话。
有关对配置值的运行时更改的意见,请参见上文。
实际执行的tl;dr是创建一个“启动”脚本,它是容器的入口点。启动脚本将从您选择的任何管理系统(卷挂载、Vault、文件等)中检索机密,并为应用程序读取它们做好准备。
然后启动脚本启动主应用程序的运行过程。
希望这能有所帮助!
PS:我不为Hashicorp工作,但我确实喜欢他们用于处理容器的软件。通过购买Hashicorp的完全不同的软件,你可以得到很多东西,你也可以从K8s获得作为一个单一的解决方案。单个应用程序(Hashicorp)允许您选择和混合所需的解决方案,但也需要更高的维护开销。K8s是一个相当沉重的锁定,但是您可能不需要学习任何其他东西就可以完成大部分您想要的事情。
祝好运
发布于 2017-02-17 21:51:16
docker-compose.yml
:
版本:"2“服务:服务器:主机名:服务器container_name:服务器映像:./server env_file:./config/config.env文件./config/config.env
是您的“动态”配置。您只需重新创建容器来刷新应用程序中的值。据我所知,“码头工”和你提到的任何东西都能很好地配合。
https://stackoverflow.com/questions/42266352
复制相似问题