IBM Cloud Kubernetes Service で Certificate Manager から Secrets Manager への移行

##### はじめに

IBM Cloud の Kubernetes Service(IKS)で使用されていたCertificate Managerが2022年末で終了となるため移行先サービスのSecrets Managerへの移行を実施したログです。


・[Migrating from IBM Cloud Certificate Manager to IBM Cloud Secrets Manager](https://cloud.ibm.com/docs/containers?topic=containers-certs-mgr-migration)

> Support for Certificate Manager in IBM Cloud Kubernetes Service clusters is set to end in late 2022, and any remaining Certificate Manager instances are set to be deleted on 31 Dec 2022. 


参考手順：

https://www.ibm.com/cloud/blog/how-to-migrate-certificates-from-ibm-certificate-manager-to-ibm-cloud-secrets-manager


---

##### 環境


・IBM Cloud Kubernetes Service v1.24  (Certificate Manager 管理)

・Secrets Managerインスタンス(新規作成)

---
##### 1. Secrets Managerインスタンス作成


(参考) [Setting up your Secrets Manager instance](https://cloud.ibm.com/docs/containers?topic=containers-secrets-mgr&locale=ja#secrets-mgr_setup)

標準プランを選択
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/e084c424-1489-e632-0036-99643ae981f5.png)

リソースの構成を適宜設定します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/a735a995-e63b-b39d-59e9-a667e3c7106b.png)

作成されました。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/b95b771b-a6d4-f7cb-e78a-f3bd695b36a9.png)


---

##### 2. Secrets Managerへの置き換え


###### IAM 資格情報の構成

作成したSecrets Managerインスタンスで"IAM 資格情報"に移動します。
![2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/c5ba3cb4-68c3-ddf9-7021-5d6ff6a1f42e.png)

既存の IBM Cloud API鍵を保持していたので、そちらを入力して構成を押します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/5dc9e78c-b1be-303e-e340-19491c8b97e5.png)

構成されました。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/685ad571-313e-9b75-c646-2dd4b0a33d30.png)!

続いて、画面右上の"管理" -> アクセス(IAM)を選択し、IAMの画面の”許可"へ移動します。
許可の管理で"作成"を押します。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/1f2b0553-66bb-4d68-8e97-4ffbe7850e7f.png)

ソース・サービスに"Kubernetes Service"、ターゲット・サービスに"Secrets Manager"を選択します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/9236b2f2-b480-c6e5-5cf4-dd13089b4051.png)

作成されました。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/d4af1ae0-10c9-d4a1-a632-0e0f9e8d41cb.png)

---

###### IKSにSecrets Managerを登録

Secrets Manager インスタンスのIDを確認します。

```
$ ibmcloud resource service-instance "Secrets-Manager"
xxxxxxxx.@xx.xxx.xx としてアカウント AAAAA の リソース・グループ default のサービス・インスタンス Secrets-Manager を取得しています...
OK


名前:                   Secrets-Manager
ID:                    crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::　　　#<= 確認するID
GUID:                   04xxx-zzzz-4xxx-zzzz-8bazzzzz
場所:                   jp-tok
サービス名:             secrets-manager
サービス・プラン名:     standard
リソース・グループ名:   default
状態:                   active
タイプ:                 service_instance
サブタイプ:
ロック中:               false
作成日時:               2022-09-28T05:39:19Z
作成元:                 xxxxxxxx.@xx.xxx.xx
更新日時:               2022-09-28T05:45:40Z
最後の操作:
                        状況         create succeeded
                        メッセージ   Task not found
$
```


対象のSecrets ManagerインスタンスをIKSクラスターにデフォルトで登録します。

```
$ ibmcloud ks ingress instance register --cluster IKS-test1 --is-default --crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
OK
```

登録を確認します。

```
$ ibmcloud ks ingress instance ls --cluster IKS-test1
OK
名前                    タイプ            デフォルト   状況      シークレット・グループ   CRN
kube-bxxxxxxxxxx       cloudcerts        false        created   default                  crn:v1:bluemix:public:cloudcerts:jp-tok:a/xxxxxxxxxxxx:e2azzzf-7892-zzzz-b58e-fzzzzzz1a29::
secrets-manager        secrets-manager   true         created   default                  crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
$
```

名前 "secrets-manager"、タイプ"secrets-manager"のインスタンスがデフォルト"true"で登録されました。



---

###### 証明書の再発行

再発行前の確認  (対象のみ抜粋)

```
$ ibmcloud ks ingress secret ls --cluster IKS-test1
OK
名前                名前空間        　CRN                                                                                                                      有効期限                    ドメイン                                                                                状況      タイプ
IKS-test1          default          crn:v1:bluemix:public:cloudcerts:jp-tok:a/xxxxxxxxxxxx:e2azzzf-7892-zzzz-b58e-fzzzzzz1a29:certificate:a9xxxxxxx9f4yyyy   2022-12-22T07:00:25+0000   IKS-test1.jp-tok.containers.appdomain.cloud                                           created   TLS
```


対象のIKSの画面でIngressサブドメインを確認します。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/73d52834-a067-6ee5-33a6-802061f2b24b.png)


再発行を実行します。
--nlb-subdomain には確認したIngressサブドメインを指定します。

```
$ ibmcloud ks nlb-dns secret regenerate --cluster IKS-test1 --nlb-subdomain IKS-test1.jp-tok.containers.appdomain.cloud
NLB サブドメインの証明書および秘密を再生成中...
注: 変更が適用されるまで数分かかる場合があります。
OK
$ 
```

確認　(対象のみ抜粋)

```
$ ibmcloud ks ingress secret ls --cluster IKS-test1
OK
名前                名前空間        　CRN                                                                                                                                有効期限                   ドメイン                                                                                       状況      タイプ
IKS-test1          default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz:secret:xxxxxefe-2a4d-xxxx-cc27-5xxxxxxac1a2   2022-12-27T05:59:26+0000   IKS-test1.jp-tok.containers.appdomain.cloud                                           created   TLS

名前   名前空間   状況   数値フィールド   タイプ
$
```

=>  "secrets-manager" に変わっていることが確認できました。



##### 3. 不要インスタンスの削除

移行前のCertificate Managerインスタンスを削除します。

確認

```
$ ibmcloud ks ingress instance ls --cluster IKS-test1
OK
名前                                    タイプ            デフォルト   状況      シークレット・グループ   CRN
kube-bxxxxxxxxxx                        cloudcerts        false        created   default                  crn:v1:bluemix:public:cloudcerts:jp-tok:a/xxxxxxxxxxxx:e2azzzf-7892-zzzz-b58e-fzzzzzz1a29:certificate:a9xxxxxxx9f4yyyy
secrets-manager                         secrets-manager   true         created   default                  crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
$
```

=> タイプ"cloudcerts" デフォルト"false"のkube-bxxxxxxxxxxを削除します。


```
$ ibmcloud ks ingress instance unregister --cluster IKS-test1v --name kube-bxxxxxxxxxx
OK
$ echo $?
0
$
```

```
$ ibmcloud ks ingress instance ls --cluster voice-analysis-dev
OK
名前               タイプ            デフォルト   状況      シークレット・グループ   CRN
secrets-manager   secrets-manager   true         created   default                  crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
$
```

＝> 削除されました。



変更後、対象アプリの稼働に問題がないことを確認します。

---

###### 2台目のIKSへの登録で発生したエラーについて

IKSクラスターを複数保持しているため、続いて登録を行った際に以下のようなエラーが発生しました。


Secrets Manager登録前の確認

```
$ ibmcloud ks ingress instance ls --cluster IKS-test2
OK
名前                                    タイプ       デフォルト   状況      シークレット・グループ   CRN
kube-fxxxxxxxxxx  cloudcerts   true         created   default                  crn:v1:bluemix:public:cloudcerts:jp-tok:a/xxxxxxxxxxxx:e2azzzf-7892-zzzz-b58e-fzzzzzz1a29::

```

登録の実行

```
$ ibmcloud ks ingress instance register --cluster IKS-test2 --is-default --crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
要求を完了できませんでした。
Unable to connect to https://containers.cloud.ibm.com/global/ingress/v2/secret/registerInstance


Incident ID: xxxx0eb-57ac-4xxx-xxxa-eexxx22e9

$
```

エラーが発生したものの対象のクラスターのingressインスタンスにはデフォルトでSecrets Managerが登録されていました。

```
$ ibmcloud ks ingress instance ls --cluster IKS-test2
名前                                    タイプ            デフォルト   状況      シークレット・グループ   CRN
kube-fxxxxxxxxxx   cloudcerts        false        created   default                  crn:v1:bluemix:public:cloudcerts:jp-tok:a/xxxxxxxxxxxx:e2azzzf-7892-zzzz-b58e-fzzzzzz1a29::
secrets-manager                         secrets-manager   true         created   default                  crn:v1:bluemix:public:secrets-manager:jp-tok:a/xxxxxxx:04xxx-zzzz-4xxx-zzzz-8bazzzzz::
```

この後の証明書更新作業等は問題なく完了しています。


CaseをOpenして問い合わせましたが、このインシデントは特に問題なかったようです。
こういうエラーが発生する可能性もあるという事例で共有します。

同じエラーが発生しても原因が同じではない可能性がありますので問い合わせ等で問題判別をすることをお勧めします。



以上です。