はじめに
IBM Cloud の Kubernetes Service(IKS)で使用されていたCertificate Managerが2022年末で終了となるため移行先サービスのSecrets Managerへの移行を実施したログです。
・Migrating from IBM Cloud Certificate Manager to IBM Cloud Secrets Manager
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.
参考手順:
環境
・IBM Cloud Kubernetes Service v1.24 (Certificate Manager 管理)
・Secrets Managerインスタンス(新規作成)
1. Secrets Managerインスタンス作成
(参考) Setting up your Secrets Manager instance
2. Secrets Managerへの置き換え
IAM 資格情報の構成
作成したSecrets Managerインスタンスで"IAM 資格情報"に移動します。
既存の IBM Cloud API鍵を保持していたので、そちらを入力して構成を押します。
構成されました。
続いて、画面右上の"管理" -> アクセス(IAM)を選択し、IAMの画面の”許可"へ移動します。
許可の管理で"作成"を押します。
ソース・サービスに"Kubernetes Service"、ターゲット・サービスに"Secrets Manager"を選択します。
作成されました。
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サブドメインを確認します。
再発行を実行します。
--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して問い合わせましたが、このインシデントは特に問題なかったようです。
こういうエラーが発生する可能性もあるという事例で共有します。
同じエラーが発生しても原因が同じではない可能性がありますので問い合わせ等で問題判別をすることをお勧めします。
以上です。