2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2年以上使っている OpenShift クラスタで必須な証明書の更新作業

Posted at

TL;DR

(以下のコマンドラインは再現のため再構築したものなので、一部実際とは異なる点があるかもしれません)

問題発生

それは、削除できない名前空間から始まった。

$ oc delete ns mynamespace
namespace "mynamespace" deleted
$ oc get ns | grep mynamespace
mynamespace        Terminating   27d

こうなった場合に一番あり得るのが、「finalizer で登録された Pod が先にいなくなってしまったため、後処理する人がいなくて削除が止まる」という理由。多くのページでは(例えば こちら)、原因となっているリソースを復旧させるか、それでも無理なら .spec.finalizers を削除すればよい、と書いてある。

ところが私の場合、oc edit.spec.finalizers を削除しても、再度 oc get ns で確認すると .spec.finalizers が勝手に復活してしまい、いつまで経っても削除できなかった。

そのメッセージを見てみると、どうやら packageserver という Operator が提供する apiservice の不具合らしい。PackageManifest カスタムリソースが見つからないようだ。PackageManifest は、Operator Lifecycle Manager (OLM) の CatalogSource で追加された Operator ひとつにつきひとつ用意される、いわば OLM でインストール可能な Operator を表現するためのカスタムリソースで、その定義がない、というのは明らかにおかしい。

$ oc -n openshift-operator-lifecycle-manager get csv packageserver
NAME            DISPLAY          VERSION   REPLACES   PHASE
packageserver   Package Server   0.19.0               Installing

ステータスが Installing になっていて、どうやら packageserver のインストールが途中で止まっているようだ。

仕方ないので OpenShift web console から入ってみようとて、新規ユーザを作成して web console にログインを試みるもログインできない。おかしいなと思って CLI でログインしようとすると…

$ oc login https://api.example.com/ -u myuser -p mypasswd
error: x509: certificate has expired or is not yet valid: ...

あ、これは証明書の問題だ、と気付いた。

ingress-controller の cert 更新

エラーメッセージで検索を書けると、原因と対策はすぐに見つかった。

How to redeploy/renew an expired default ingress certificate in RHOCP4 - Red Hat Customer Portal

OpenShift はインストール後2年でデフォルト証明書の有効期限が切れてしまい、不具合が発生し始めることが記述されている。そこで、ここに書いてあることを丁寧に読んで、"Workaround for the default ingress certificate" に記述されている手順を踏んだ。手順実施直後は oc login できなかった (oauth サーバが応答してくれない)が、しばらく(数分)時間が経つと oc login できるようになり、web console にも入れるようになった。どうやら更新した証明書は徐々に内部サービスに浸透していくらしい。そうかそうか、待てばいいのか。

しかし、待てど暮らせど packageserverInstalling のまま。正直途方に暮れた。

packageserver の cert 更新

ここで「もしや」と思って、"operator package server certificate renew" で検索してみた。

How to renew/rotate the certificate for cluster operator operator-lifecycle-manager-packageserver in RHOCP4 - Red Hat Customer Portal

全ての Operator に浸透するわけじゃないのか…とここで気付いた。このドキュメントも上記の ingress-controller のものと同じく丁寧に記述されているので、きちんと手順を踏めば証明書は更新される。

そして…

$ oc -n openshift-operator-lifecycle-manager get csv packageserver
NAME            DISPLAY          VERSION   REPLACES   PHASE
packageserver   Package Server   0.19.0               Succeeded
$ oc get ns | grep mynamespace
$

消えた。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?