はじめに
前回の記事で、OpenShift GitOpsを設定して、IBM Application Gatewayをデプロイする流れを試しました。
SSL証明書を差し替えるケースをイメージして、Secretを再作成してみます。
1. Pod内のSSL証明書を確認
PS C:\temp-openshift\iag> oc get po
NAME READY STATUS RESTARTS AGE
iag-1-build 0/1 Completed 0 17h
iag-1-deploy 0/1 Completed 0 17h
iag-2-4k2h8 1/1 Running 0 17h
iag-2-deploy 0/1 Completed 0 17h
PS C:\temp-openshift\iag> oc rsh iag-2-4k2h8
sh-4.4$ cat /var/iag/config/secret_files/iag.certkey.pem
-----BEGIN CERTIFICATE-----
MIIDT~~~Avo+iE+Cs4w==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEv~~~346LGtujs=
-----END PRIVATE KEY-----
2. ブラウザアクセス時の証明書を確認
IAGにブラウザでアクセスして、SSL証明書をダウンロード/中身を確認します。
ダウンロードした証明書を確認すると、同じ証明書を利用しています。
-----BEGIN CERTIFICATE-----
MIIDT~~~Avo+iE+Cs4w==
-----END CERTIFICATE-----
2. SSL証明書とSecretを再作成する
スクリプトを使ってSSL証明書の再作成します。
.\common\create-iag-crypto.sh
再作成した証明書です。
> cat .\common\secret_files\iag.certkey.pem
-----BEGIN CERTIFICATE-----
MIIDT~~~M6eix/3to0w==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIE~~~jYFaRel9EBxJqvcE=
-----END PRIVATE KEY-----
Secretを再作成します。
.\openshift\create-iag-assets.sh
Podの中の証明書を確認すると、新しい証明書に差し替えされていました。
sh-4.4$ cat /var/iag/config/secret_files/iag.certkey.pem
-----BEGIN CERTIFICATE-----
MIIDT~~~M6eix/3to0w==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIE~~~jYFaRel9EBxJqvcE=
-----END PRIVATE KEY-----
Pod内に即時反映されたのはシークレットをボリュームとしてマウントしていたためです。
シークレットの値を変更する場合、値 (すでに実行されている Pod で使用される値) は動的に変更されません。
シークレットを変更するには、元の Pod を削除してから新規の Pod を作成する必要があります
(同じ PodSpec を使用する場合があります)。
シークレットをボリュームとしてマウントする場合、シークレットは自動的に更新されます。
20.1.4. シークレットの更新
3. WebアクセスしてSSL証明書を確認する
アプリケーションが利用しているSSL証明書も新しくなっているか確認します。
Webアクセス時に利用しているSSL証明書は更新前のものでした。
-----BEGIN CERTIFICATE-----
MIIDT~~~Avo+iE+Cs4w==
-----END CERTIFICATE-----
4. SSL証明書を反映するため、デプロイメントする
既存の DeploymentConfig から新規デプロイメントプロセスを開始します。
> oc rollout latest dc/iag
Podが新しく作成されます。
> oc get po -w
NAME READY STATUS RESTARTS AGE
iag-1-build 0/1 Completed 0 17h
iag-1-deploy 0/1 Completed 0 17h
iag-2-4k2h8 1/1 Running 0 17h
iag-2-deploy 0/1 Completed 0 17h
iag-3-deploy 0/1 Pending 0 0s
iag-3-deploy 0/1 Pending 0 0s
iag-3-deploy 0/1 ContainerCreating 0 0s
iag-3-deploy 0/1 ContainerCreating 0 2s
iag-3-deploy 0/1 ContainerCreating 0 2s
iag-3-deploy 1/1 Running 0 3s
iag-3-n7mvk 0/1 Pending 0 0s
iag-3-n7mvk 0/1 Pending 0 0s
iag-3-n7mvk 0/1 ContainerCreating 0 0s
iag-3-n7mvk 0/1 ContainerCreating 0 2s
iag-3-n7mvk 0/1 ContainerCreating 0 2s
iag-3-n7mvk 0/1 ContainerCreating 0 2s
iag-3-n7mvk 0/1 Running 0 3s
iag-3-n7mvk 1/1 Running 0 11s
iag-2-4k2h8 1/1 Terminating 0 17h
iag-2-4k2h8 1/1 Terminating 0 17h
iag-2-4k2h8 0/1 Terminating 0 17h
iag-3-deploy 0/1 Completed 0 18s
iag-3-deploy 0/1 Completed 0 19s
iag-2-4k2h8 0/1 Terminating 0 17h
iag-2-4k2h8 0/1 Terminating 0 17h
5. WebアクセスしてSSL証明書を確認する
新しいPodがデプロイされたため、再度ブラウザから証明書を確認します。
Podが再作成されたため、新しい証明書が利用されていました。
-----BEGIN CERTIFICATE-----
MIIDT~~~M6eix/3to0w==
-----END CERTIFICATE-----
最後に
今回は、SSL証明書の差し替えをイメージしたSecretの更新を試してみました。
DeploymentConfigでなく、Deploymentの場合は、restartが使えそうです。
リソースを再起動します。
oc rollout restart