我需要将环境变量发送到在容器中运行的应用程序,但我知道“.env”文件位于服务器上是不好的做法,因为“根”用户可以读取它。在我的应用程序中使用这些变量,并且不在服务器上留下任何痕迹并且不使用Kubernetes的最佳选择是什么?
9rygscc11#
根据您的实际生产堆栈,有几种解决方案:
(1)运行在K8S集群上
Kubernete支持用户将二进制文件作为秘密上传。您可以将秘密安装到您的生产吊舱中,以分离您的码头形象和秘密。
https://kubernetes.io/docs/concepts/configuration/secret/
(2)独立服务器上的Docker
这是与(1)同构的解,但没有来自K8的本地支持。
https://docs.docker.com/storage/volumes/
(3)对外密钥管理服务
如果您使用在云上托管您的应用程序,则有更多的选择可供您考虑。以Azure为例,如果您在虚拟机上托管您的应用程序,您可以使用Azure KeyVault之类的服务:
https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts
其概念是通过将您的服务器连接到服务来存储和获取您的所有密钥。您可以将秘密动态加载到您的应用程序中,从KeyVault获取,这可以防止在您的服务示例中留下秘密足迹。可以以无密码的方式(AWS中的IAM/Azure中的托管身份)配置密钥管理服务和您的虚拟机之间的连接,以防止您的服务器中存在机密。
1条答案
按热度按时间9rygscc11#
根据您的实际生产堆栈,有几种解决方案:
(1)运行在K8S集群上
Kubernete支持用户将二进制文件作为秘密上传。您可以将秘密安装到您的生产吊舱中,以分离您的码头形象和秘密。
https://kubernetes.io/docs/concepts/configuration/secret/
(2)独立服务器上的Docker
这是与(1)同构的解,但没有来自K8的本地支持。
https://docs.docker.com/storage/volumes/
(3)对外密钥管理服务
如果您使用在云上托管您的应用程序,则有更多的选择可供您考虑。以Azure为例,如果您在虚拟机上托管您的应用程序,您可以使用Azure KeyVault之类的服务:
https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts
其概念是通过将您的服务器连接到服务来存储和获取您的所有密钥。您可以将秘密动态加载到您的应用程序中,从KeyVault获取,这可以防止在您的服务示例中留下秘密足迹。可以以无密码的方式(AWS中的IAM/Azure中的托管身份)配置密钥管理服务和您的虚拟机之间的连接,以防止您的服务器中存在机密。