Kubernetes - 如何将信任库路径和密码传递给 JVM 参数

标签 kubernetes environment-variables dockerfile ssl-certificate configmap

我需要将 jks 文件添加到我的 JVM 以与服务器进行 SSL 握手。 JKS 安装在卷中并可供 docker 容器使用。如何在启动期间将 JKS 信任库路径和密码传递给 Springboot(JVM)。
我认为一种选择是作为环境变量 (-Djavax.net.ssl.trustStore, -Djavax.net.ssl.trustStorePassword) 。对于 Openshift,下面的 url 中描述了以下工作。
选项1:

      env:
          - name: JAVA_OPTIONS
            value: -Djavax.net.ssl.trustStore=/var/run/secrets/java.io/keystores/truststore.jks -Djavax.net.ssl.trustStorePassword=changeit
https://developers.redhat.com/blog/2017/11/22/dynamically-creating-java-keystores-openshift/
但是,我似乎没有为 Kubernetes 找到类似的 JAVA_OPTIONS 环境变量。
选项2:
我的 Docker 文件是:
FROM openjdk:8-jre-apline
..........
........
ENTRYPOINT ["java", "-jar", "xxx.jar"]
可以按如下方式进行更改,并且可以通过 configmap 将 $JAVA_OPTS 设置为 JVM 的 env 变量吗?
FROM openjdk:8-jre-apline
..........
........
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar xxx.jar" ]
配置图:
JAVA_OPTS: "-Djavax.net.ssl.trustStore=/var/run/secrets/java.io/keystores/truststore.jks -Djavax.net.ssl.trustStorePassword=changeit"
请建议这是否可行或任何其他更好的解决方案。如果我们可以 secret 存储密码,则更优选。

最佳答案

几个选项:
1:您可以将其全部分解并使用 secrets将您的凭据仅存储为 env vars,将 key 存储为可作为文件安装在容器中的磁盘上的 key ,以及将其他 java 选项保存为 env 变量的 ConfigMap,然后使用容器中的入口点脚本来验证和混搭它们一起形成 JAVA_OPTS 字符串。
2:您可以将整个字符串放入您在运行时使用的 JAVA_OPTS key 中。

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: myimage
    env:
      - name: JAVA_OPTS
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: JAVA_OPTS
  restartPolicy: Never

关于Kubernetes - 如何将信任库路径和密码传递给 JVM 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62682943/

相关文章:

docker - 如何通过 Dockerfile 为特权用户复制/添加资源?

kubernetes - 是否有可能使kubernetes入口treafik适用于所有 namespace

azure - Aks pods 环境变量 keyvault

python - 解析配置文件、环境和命令行参数,以获取单个选项集合

linux - solaris os设置路径和环境变量

docker - 将 `/bin/bash`命令附加到 `docker run -it IMAGE ID`后,为什么不执行Dockerfile中的命令?

django - docker文件中PYTHONUNBUFFERED的作用是什么?

kubernetes - Google容器引擎

kubernetes - 如何在GKE中使用临时IP创建Kubernetes负载均衡器?

c# - 如何使用.NET 远程扩展环境变量?