在生产环境中运行Docker,环境变量是机密的,在服务器上看不到



我需要将环境变量发送到在容器中运行的应用程序,但我知道这是一种糟糕的做法;。env";文件在服务器上;根";用户可以阅读它。在我的应用程序中使用这些变量,并且在服务器上不留下任何跟踪,并且不使用Kubernetes,最好的选择是什么?

根据您的实际生产堆栈,有几种解决方案:

(1( 在k8s集群上运行

Kubernete支持用户将二进制文件作为机密上传。你可以将秘密挂载到你的生产pod中,以解耦你的docker镜像和秘密。

https://kubernetes.io/docs/concepts/configuration/secret/

(2( 独立服务器上的Docker

这是(1(的同构解决方案,但没有k8s的本地支持。

https://docs.docker.com/storage/volumes/

(3( 外部密钥管理服务

如果您使用云托管应用程序,那么您可以考虑更多选项。以azure为例,如果你在虚拟机上托管你的应用程序,你可以使用像azure KeyVault:这样的服务

https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts

其概念是通过将服务器连接到服务来存储和获取所有密钥。您可以将密钥动态加载到应用程序中,从KeyVault获取密钥,从而防止在服务实例中留下秘密足迹。密钥管理服务和虚拟机之间的连接可以以无密码的方式配置(aws/azure中的iam/托管身份(,以防止服务器中存在机密。

最新更新