猜想您已经部署了使用证书的服务来创建tls / https通信。
因此,我需要部署必须信任这些证书的Java客户端容器。
尽管如此,java仍在信任库中查找以检查证书是否有效。
如您所见,由于这些证书在构建时未知,因此我无法使用这些证书创建映像。
我的意思是,由于Dockerfile
不在构建时,因此我无法创建这种/var/run/secrets/kubernetes.io/certs/tls.crt
代码段。
RUN keytool -import -alias vault -storepass changeit -keystore truststore.jks -noprompt -trustcacerts -file /var/run/secrets/kubernetes.io/certs/tls.crt
那么,在部署/启动容器/吊舱时,如何填充填充有这些证书的信任库?
我希望我解释得很好。
答案 0 :(得分:1)
我建议使用Kubernetes from here,以便在Pod创建过程中存储您的信任证书。证书文件应使用base64
编码算法加密,如下所示:
$ cat tls.crt | base64
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc09yNjVWNmpnR0pacWxZOFNYSitBZlFONitaUzRM
创建Kubernetes Secret
资源,为先前加密的证书添加值:
apiVersion: v1
kind: Secret
metadata:
name: tls.crt
namespace: default
type: kubernetes.io/tls
data:
tls.crt:LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc09yNjVWNmpnR0pacWxZOFNYSitBZlFONitaUzRM
现在,您可以在Pod部署中包含Secret
资源:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: onboarding
spec:
replicas: 1
template:
metadata:
labels:
app: java
spec:
containers:
- image: username/java
name: java
volumeMounts:
- name: tls
mountPath: /var/run/secrets/kubernetes.io/certs/
volumes:
- name: tls
secret:
secretName: tls.crt
我发现此Secrets
对于在Kubernetes中实现TLS Secrets
而言非常有用。
答案 1 :(得分:0)
RedHat提供了有关如何在OpenShift上执行此操作的教程:
https://developers.redhat.com/blog/2017/11/22/dynamically-creating-java-keystores-openshift/
它使用CA内置的OpenShifts实际生成和提供证书,因此,如果使用香草k8,则需要您自己执行此操作,但是一旦将证书存储在Pod中的文件中,则方法完全相同