web-dev-qa-db-ja.com

Kubernetes:証明書をキーストアに入力します

Tls/https通信を作成するために証明書を使用するサービスを配備したと思います。

したがって、これらの証明書を信頼する必要があるJavaクライアントコンテナをデプロイする必要があります。

それでも、Javaは、証明書が有効かどうかを確認するためにトラストストアを検索します。

ご覧のとおり、ビルド時には不明であるため、これらの証明書を使用してイメージを作成することはできません。

つまり、/var/run/secrets/kubernetes.io/certs/tls.crtがビルド時に配置されていないため、この種のDockerfileスニペットを作成できません。

RUN keytool -import -alias vault -storepass changeit -keystore truststore.jks -noprompt -trustcacerts -file /var/run/secrets/kubernetes.io/certs/tls.crt

それで、コンテナー/ポッドがデプロイ/開始されるときに、これらの証明書で満たされたこれらのトラストストアにどのようにデータを追加できますか?

うまく説明できたと思います。

7
Jordi

RedHatには、OpenShiftでこれを行う方法に関するチュートリアルがあります。

https://developers.redhat.com/blog/2017/11/22/dynamically-creating-Java-keystores-openshift/

CAに組み込まれたOpenShiftsを使用して実際に証明書を生成および提供するため、Vanilla k8sを使用する場合は自分で行う必要がありますが、ポッドのファイルに証明書を取得すると、メソッドはまったく同じです。

3
James Roper

ポッドの作成中に信頼証明書を保存するには、Kubernetes Secrets を使用することをお勧めします。証明書ファイルは、以下のような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

ポッドのデプロイに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

私はこれを見つけました 記事 は、KubernetesにTLS Secretsを実装するという点で非常に便利です。

1
mk_sta