gpt4 book ai didi

openshift - 在 OpenShift 环境中部署 secret Java keystore 的好方法是什么?

转载 作者:行者123 更新时间:2023-12-04 11:10:02 32 4
gpt4 key购买 nike

我们有一个 Java Web 应用程序,它应该从常规部署模型(安装在服务器上)移动到 OpenShift 环境(部署为 docker 容器)。目前,此应用程序使用一组 Java keystore (.jks 文件)来获取客户端证书,以便与第三方 Web 界面进行通信。我们每个接口(interface)都有一个 keystore 。

这些 jks 文件在生产机器上手动部署,并且在需要更新第三方证书时偶尔会更新。我们的应用程序有一个带有 keystore 文件路径的设置,在启动时它会从中读取证书,然后使用它们与第三方系统进行通信。

现在,当转移到 OpenShift 部署时,我们有一个 docker 镜像,其中包含将用于所有环境(开发、测试和生产)的应用程序。所有配置都作为环境变量给出。但是我们不能将 jks 文件作为环境变量提供,这些文件需要安装到 docker 容器的文件系统中。

由于这些证书是 secret ,我们不想将它们烘焙到图像中。我扫描了 OpenShift 文档以获取有关如何解决此问题的一些线索,并且基本上找到了两个选项:使用 Secrets 或安装持久卷声明 (PVC)。

secret 似乎对我们不起作用,因为它们几乎只是键值对,您可以将其作为文件挂载或作为环境变量提交。它们也有大小限制。使用 PVC 理论上是可行的,但是我们首先需要有某种方法将 JKS 文件放入该卷中。一个简单的方法是启动一个 shell 容器,安装 PVC 并使用 OpenShift 命令行工具手动将文件复制到其中,但是我希望有一个稍微少一些手动的解决方案。

您是否找到了解决此问题或需要将文件放入容器的类似问题的巧妙解决方案?

最佳答案

事实证明,我误解了 secret 的运作方式。它们确实是可以作为文件挂载的键值对。然而,该值可以是将被映射为文件内容的任何 base64 编码二进制文件。所以解决办法是先将JKS文件的内容编码为base64:

cat keystore.jks| base64

然后你可以把它放到你的 secret 定义中:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
namespace: my-namespace
data:
keystore.jks: "<base 64 from previous command here>"

最后,您可以通过在部署配置中引用它来将其安装到您的 docker 容器中:
apiVersion: v1
kind: DeploymentConfig
spec:
...
template:
spec:
...
container:
- name: "my-container"
...
volumeMounts:
- name: secrets
mountPath: /mnt/secrets
readOnly: true

volumes:
- name: secrets
secret:
secretName: "my-secret"
items:
- key: keystore.jks
path: keystore.jks

这将挂载 secret 卷 secrets/mnt/secrets并创建名为 keystore.jks 的条目可用作文件 keystore.jks/mnt/secrets .

我不确定这是否真的是这样做的好方法,但至少在这里工作。

关于openshift - 在 OpenShift 环境中部署 secret Java keystore 的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423398/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com