【IBM Application Gateway】Secretを再作成してみる（SSL証明書差し替えイメージ）

# はじめに
前回の[記事](https://qiita.com/fitz/items/5449f07b2f708b549b84)で、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証明書をダウンロード/中身を確認します。
![qiita (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/abec2bc4-b1e6-3a7a-4c33-5db2eab32d2e.png)

ダウンロードした証明書を確認すると、同じ証明書を利用しています。
```
-----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. シークレットの更新

https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html/developer_guide/dev-guide-secrets#secrets-and-the-pod-lifecycle

# 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
```
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.9/html/cli_tools/cli-developer-commands#_oc-rollout-restart