问题
JAVA访问自签名证书提供的服务时会出现
unable to find valid certification path to requested target的问题,导致不能正常请求所需的服务,可参考:juejin.cn/post/718287…
Kubernetes 支持 postStart 和 preStop 事件。 当一个容器启动后,Kubernetes 将立即发送 postStart 事件,我们可以利用postStart事件,在容器启动后导入自签名证书。
- 挂载服务器证书
**- 导入证书**
kubectl -n xx create configmap cloud-server-tls --from-file=./server.crt
**- 通过增加ENV加载证书**
env:
- name: CLOUD_SERVER_CERT
valueFrom:
configMapKeyRef:
name: cloud-server-tls
key: server.crt
**- 或者通过增加volume加载证书**
spec:
containers:
...
volumeMounts:
- name: server-tls
mountPath: /tmp
volumes:
- name: server-tls
configMap:
name: cloud-server-tls
items:
- key: server.crt
path: server.crt
- 加入postStart配置
**- 通过增加ENV加载证书**
lifecycle:
postStart:
exec:
command: [ "/bin/sh", "-c", 'echo """$CLOUD_SERVER_CERT""" > /tmp/server.crt; keytool -import -alias casserver -keystore $JAVA_HOME/lib/security/cacerts -file /tmp/server.crt -storepass changeit -noprompt' ]
**- 或者通过增加volume加载证书**
lifecycle:
postStart:
exec:
command: [ "/bin/sh", "-c", 'keytool -import -alias casserver -keystore $JAVA_HOME/lib/security/cacerts -file /tmp/server.crt -storepass changeit -noprompt' ]
不同环境的
$JAVA_HOME/lib/security/cacerts可能不同,根据实现情况修改。