[IBMCloud] もう期限切れで焦らない！IKSのTLS証明書を自動更新する仕組みを作る Part4

## 作業概要
通常インターネットでのWebアプリケーションを公開する場合、カスタムドメインを利用する
カスタムドメインを利用する際は、HTTPS通信の場合、証明書が必要となりユーザ管理となるため更新処理が手間になることが多い
SecretManagerを利用することでカスタムドメイン証明書も自動更新が可能となり、運用性が高まる

今回はIKS上でSecret Managerのカスタムドメイン証明書を参照し、自動更新を行う
利用する証明書はPart2の記事で実施した証明書、カスタムドメイン名："acspaas.site"

Part2:[DNS Providerの設定と自動更新カスタムドメイン証明書(パブリック)の発行](https://qiita.com/khoshina/items/65ac174f20924b486b4c)

## 全体の流れ
ボリュームがあるので、全5回で記事を記載します。
本記事では「4.IKSからパブリック証明書の参照と自動更新」の内容を記載

**前回**
1.[自動証明書管理環境（ACME）のセットアップと認証局の構成](https://qiita.com/khoshina/items/c435a155b7048d8a9069)
2.[DNS Providerの設定と自動更新カスタムドメイン証明書(パブリック)の発行](https://qiita.com/khoshina/items/65ac174f20924b486b4c)
3.[IKSとSecret Managerの連携設定と自動更新の確認](https://qiita.com/khoshina/items/f994d2e413363e48cf26)

**本記事はこちら**
<font color="red">**4.[IKSからパブリック証明書の参照と自動更新]**</font>

**次回以降**
5.[IngressALBから証明書の利用とアプリケーションへのHTTPS動作確認](https://qiita.com/khoshina/items/c436d1d20703aec19cfc)

**全体図**
IKSでSecret Managerを利用して、IngressALBにPublic証明書を適用し、証明書の自動更新を行う一例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/a0522f04-e045-44c9-a439-b012b6ddb589.png)

## IKSでSecret Managerにあるパブリック証明書を参照してシークレットを作成
まずは、参照する証明書のCRNを確認する

Secrets -> "参照する証明書"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/c52dbeb8-083b-4e76-bf24-f9e1a27de0f8.png)

下にあるCRNを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/ca9bbd8e-a1b2-4f44-9793-b9cae9ff7746.png)

IKSから証明書を参照し、シークレットを作成
```
% ibmcloud ks ingress secret create --name testcert-namespace-before --cluster cv4ef49t0jeirigoaasg --cert-crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309 --namespace test
OK
```

確認
```
 % ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前                                                名前空間         CRN                                                                                                                                                                有効期限                   ドメイン                                                                              状況      タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000   default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   ibm-cert-store   crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   kube-system      crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
testcert-namespace-before                           test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T02:14:48+0000   acspaas.site                                                                          created   TLS
```

**有効期限：2025-06-04T02:14:48+0000、ドメイン：acspaas.siteの作成ができている**

## パブリック証明書の更新と同期
先ほどのパブリック証明書を更新し、先ほど作ったシークレットと同期するか確認する

acspaas.siteの証明書のローテートを実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/40ea710c-4070-4b98-a159-fa15a36dd0d6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/e5b68711-f1e9-4f8f-b309-c8bcd906b220.png)

新しく更新した証明書をIKS上で参照し、シークレットを作成
```
% ibmcloud ks ingress secret create --name testcert-namespace-after --cluster cv4ef49t0jeirigoaasg --cert-crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309 --namespace test
OK
```

確認
```
 % ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前                                                名前空間         CRN                                                                                                                                                                有効期限                   ドメイン                                                                              状況      タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000   default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   ibm-cert-store   crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   kube-system      crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
testcert-namespace-after                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert-namespace-before                           test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T02:14:48+0000   acspaas.site                                                                          created   TLS
```

**testcert-namespace-after => 今回更新した証明書**
**testcert-namespace-before => 更新前の古い証明書**

Secret Managerとの同期は1日1回行われるため、現時点では二つの証明書は同期されておらず、有効期限が異なる状態

参考：[登録済みの Secrets Manager インスタンスに保管されているシークレットは自動的に更新されますか?](https://cloud.ibm.com/docs/containers?topic=containers-secrets-mgr#secrets-mgr_migration_faq)

1日経過後に確認し、証明書が同期されていることを確認
これにより、カスタムドメイン証明書もSecret Managerにより自動更新が実施され、IKSまで正常に反映されることがわかる

```
 % ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前                                                名前空間         CRN                                                                                                                                                                有効期限                   ドメイン                                                                              状況      タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000   default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   ibm-cert-store   crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   kube-system      crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
testcert-namespace-after                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert-namespace-before                           test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
```

---

続き「[5.IngressALBから証明書の利用とアプリケーションへのHTTPS動作確認](https://qiita.com/khoshina/items/c436d1d20703aec19cfc)」