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
それで、コンテナー/ポッドがデプロイ/開始されるときに、これらの証明書で満たされたこれらのトラストストアにどのようにデータを追加できますか?
うまく説明できたと思います。
RedHatには、OpenShiftでこれを行う方法に関するチュートリアルがあります。
https://developers.redhat.com/blog/2017/11/22/dynamically-creating-Java-keystores-openshift/
CAに組み込まれたOpenShiftsを使用して実際に証明書を生成および提供するため、Vanilla k8sを使用する場合は自分で行う必要がありますが、ポッドのファイルに証明書を取得すると、メソッドはまったく同じです。
ポッドの作成中に信頼証明書を保存するには、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
を実装するという点で非常に便利です。