Kubernetes:将证书填充到密钥库中

时间:2018-07-16 11:26:40

标签: java kubernetes

猜想您已经部署了使用证书的服务来创建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

那么,在部署/启动容器/吊舱时,如何填充填充有这些证书的信任库?

我希望我解释得很好。

2 个答案:

答案 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中的文件中,则方法完全相同