我们有一个Java Web应用程序,它原本是部署在常规服务器上的,现在需要迁移到OpenShift环境中(以Docker容器形式部署)。目前,该应用程序消耗一组Java密钥库(.jks文件)以获取与第三方Web接口通信所需的客户端证书。每个接口都有一个密钥库。
这些jks文件手动部署在生产机器上,并在第三方证书需要更新时偶尔进行更新。我们的应用程序具有指向密钥库文件路径的设置,启动时会从中读取证书,然后使用它们与第三方系统通信。
现在当我们迁移到OpenShift环境时,我们有一个Docker镜像用于所有环境(开发,测试和生产),并且所有配置都作为环境变量提供。但是我们无法将jks文件作为环境变量提供,它们需要挂载到Docker容器的文件系统中。
由于这些证书是机密的,我们不想将其嵌入到镜像中。我扫描了OpenShift文档以寻找解决方法,基本上找到了两个选项:使用Secrets或安装持久卷索赔(PVC)。
对我们来说,Secrets似乎行不通,因为它们基本上只是可挂载为文件或作为环境变量传递的键值对。它们还有大小限制。使用PVC在理论上是可行的,但我们需要一些方法将JKS文件放入该卷中。一个简单的方法是只需启动一个Shell容器,挂载PVC并使用OpenShift命令行工具手动将文件复制到其中,但我希望有一种不那么手动的解决方案。
您是否遇到过相似的问题,需要将文件放入容器中?
这些jks文件手动部署在生产机器上,并在第三方证书需要更新时偶尔进行更新。我们的应用程序具有指向密钥库文件路径的设置,启动时会从中读取证书,然后使用它们与第三方系统通信。
现在当我们迁移到OpenShift环境时,我们有一个Docker镜像用于所有环境(开发,测试和生产),并且所有配置都作为环境变量提供。但是我们无法将jks文件作为环境变量提供,它们需要挂载到Docker容器的文件系统中。
由于这些证书是机密的,我们不想将其嵌入到镜像中。我扫描了OpenShift文档以寻找解决方法,基本上找到了两个选项:使用Secrets或安装持久卷索赔(PVC)。
对我们来说,Secrets似乎行不通,因为它们基本上只是可挂载为文件或作为环境变量传递的键值对。它们还有大小限制。使用PVC在理论上是可行的,但我们需要一些方法将JKS文件放入该卷中。一个简单的方法是只需启动一个Shell容器,挂载PVC并使用OpenShift命令行工具手动将文件复制到其中,但我希望有一种不那么手动的解决方案。
您是否遇到过相似的问题,需要将文件放入容器中?
KeyStore ks = KeyStore.getInstance("JKS"); InputStream readStream = new FileInputStream("/mnt/secrets/keystore.jks"); ks.load(readStream, keystorePasswordCharArray);
)。 - Jan Thomäkubectl create secret generic my-secret --from-file=keystore.jks=/path/to/file/keystore.jks
直接从文件创建。 - TecHunter