Nee*_*esh 4 java ssl docker kubernetes
我有一个头盔图表。部署时会创建以下 Kubernetes 资源:
问题是我的容器无法与我的服务通信,除非我将 SSL 证书添加到 Java 证书中。我通过使用root用户在 docker 中手动运行以下命令来完成此操作。
cd ${JAVA_HOME}/jre/lib/security
keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias myservicecert -file /home/myuser/.myservice/certs/public.crt
Run Code Online (Sandbox Code Playgroud)
我想自动化上述步骤,但面临问题:
Dockerfile因为当时证书不可用。显而易见。entrypoint.shdocker 文件中添加这些步骤,因为入口点文件是由与 root 不同的用户执行的。${JAVA_HOME}/jre/lib/security/cacerts,777以便我可以entrypoint.sh毫无问题地运行这些命令。但出于安全原因,我不确定这是否是正确的方法。对此有何建议?Djavax.net.ssl.trustStore因为这样 java 将无法访问根证书。实现这一目标的正确方法是什么?
您可以将证书添加到initContainer. initContainer密钥库可以在和container使用之间共享volume。
在此示例中,我们将其作为 Kubernetes Secrettls-secret安装到 pod 中。包含需要添加到密钥库的内容。将安全文件复制到挂载到 pod 的.tls-secrettls.crtinitContainervolumecontainer
apiVersion: v1
kind: Pod
metadata:
name: myapp
labels:
app: myapp
spec:
containers:
- name: myapp
image: openjdk:8-jdk-slim-buster
command:
- bash
- -c
- |
keytool -list -keystore /usr/local/openjdk-8/jre/lib/security/cacerts -alias local
sleep infinity
volumeMounts:
- mountPath: /usr/local/openjdk-8/jre/lib/security
name: cacerts
initContainers:
- name: init-cacerts
image: openjdk:8-jdk-slim-buster
command:
- bash
- -c
- |
cp -R /usr/local/openjdk-8/jre/lib/security/* /cacerts/
keytool -import -noprompt -trustcacerts -alias local -file /security/tls.crt -keystore /cacerts/cacerts -storepass changeit
keytool -list -keystore /cacerts/cacerts -alias local
volumeMounts:
- mountPath: /cacerts
name: cacerts
- mountPath: /security
name: tls
volumes:
- name: cacerts
emptyDir: {}
- name: tls
secret:
secretName: tls-secret
defaultMode: 0400
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6729 次 |
| 最近记录: |