This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.3.4. コントロールプレーン証明書の期限切れの状態からのリカバリー
3.4.1. コントロールプレーン証明書の期限切れの状態からのリカバリー リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従い、コントロールプレーンの証明書の期限が切れの状態からのリカバリーを実行します。
前提条件
- マスターホストへの SSH アクセス。
手順
- root ユーザーとして、証明書が期限切れになっているマスターホストにアクセスします。
リリースの
cluster-kube-apiserver-operator
イメージ参照を取得します。RELEASE_IMAGE=<release_image>
# RELEASE_IMAGE=<release_image>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<release_image>
のサンプルの値はquay.io/openshift-release-dev/ocp-release:4.3.0-x86_64
です。利用可能なタグの一覧については、「Repository Tags」ページを参照してください。
KAO_IMAGE=$( oc adm release info --registry-config='/var/lib/kubelet/config.json' "${RELEASE_IMAGE}" --image-for=cluster-kube-apiserver-operator )
# KAO_IMAGE=$( oc adm release info --registry-config='/var/lib/kubelet/config.json' "${RELEASE_IMAGE}" --image-for=cluster-kube-apiserver-operator )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cluster-kube-apiserver-operator
イメージをプルします。podman pull --authfile=/var/lib/kubelet/config.json "${KAO_IMAGE}"
# podman pull --authfile=/var/lib/kubelet/config.json "${KAO_IMAGE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リカバリー API サーバーを作成します。
podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" recovery-apiserver create
# podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" recovery-apiserver create
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記コマンドの出力から
export KUBECONFIG
コマンドを実行します。 これはこの手順の後の部分のoc
コマンドで必要になります。export KUBECONFIG=/<path_to_recovery_kubeconfig>/admin.kubeconfig
# export KUBECONFIG=/<path_to_recovery_kubeconfig>/admin.kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リカバリー API サーバーの起動を待機します。
until oc get namespace kube-system 2>/dev/null 1>&2; do echo 'Waiting for recovery apiserver to come up.'; sleep 1; done
# until oc get namespace kube-system 2>/dev/null 1>&2; do echo 'Waiting for recovery apiserver to come up.'; sleep 1; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow regenerate-certificates
コマンドを実行します。これは API の証明書を修正し、ローカルドライブの古い証明書を上書きし、静的 Pod を再起動して上書き内容を取得できるようにします。podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" regenerate-certificates
# podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" regenerate-certificates
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書が API で修正されたら、以下のコマンドを使用してコントロールプレーンの新規ロールアウトを強制実行します。これは、kubelet が内部ロードバランサーを使用して API サーバーに接続されているため、他のノードにも再インストールされます。
oc patch kubeapiserver cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
# oc patch kubeapiserver cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch kubecontrollermanager cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
# oc patch kubecontrollermanager cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch kubescheduler cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
# oc patch kubescheduler cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有効なユーザーとしてブートストラップ kubeconfig を作成します。
recover-kubeconfig.sh
スクリプトを実行し、出力をkubeconfig
というファイルに保存します。recover-kubeconfig.sh > kubeconfig
# recover-kubeconfig.sh > kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
kubeconfig
ファイルをすべてのマスターホストにコピーし、これを/etc/kubernetes/kubeconfig
に移動します。 API サーバーからの接続を検証するために使用する CA 証明書を取得します。
oc get configmap kube-apiserver-to-kubelet-client-ca -n openshift-kube-apiserver-operator --template='{{ index .data "ca-bundle.crt" }}' > /etc/kubernetes/kubelet-ca.crt
# oc get configmap kube-apiserver-to-kubelet-client-ca -n openshift-kube-apiserver-operator --template='{{ index .data "ca-bundle.crt" }}' > /etc/kubernetes/kubelet-ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
/etc/kubernetes/kubelet-ca.crt
ファイルをその他すべてのマスターホストおよびノードにコピーします。 すべてのマスターホストおよびノードに
machine-config-daemon-force
ファイルを追加して、Machine Config Daemon がこの証明書の更新を受け入れるようにします。touch /run/machine-config-daemon-force
# touch /run/machine-config-daemon-force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
すべてのマスターで kubelet を回復します。
マスターホストで、kubelet を停止します。
systemctl stop kubelet
# systemctl stop kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い kubelet データを削除します。
rm -rf /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig
# rm -rf /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kubelet を再起動します。
systemctl start kubelet
# systemctl start kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 他のすべてのマスターホストでこれらの手順を繰り返し実行します。
必要な場合には、ワーカーノードで kubelet を回復します。
マスターノードの復元後、ワーカーノードはそれら自体を復元する可能性があります。これは、
oc get nodes
コマンドを実行して確認できます。ワーカーノードが一覧表示されない場合には、各ワーカーノードで以下の手順を実行します。kubelet を停止します。
systemctl stop kubelet
# systemctl stop kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い kubelet データを削除します。
rm -rf /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig
# rm -rf /var/lib/kubelet/pki /var/lib/kubelet/kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kubelet を再起動します。
systemctl start kubelet
# systemctl start kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
保留状態の
node-bootstrapper
証明書署名要求 (CSR) を承認します。現在の CSR の一覧を取得します。
oc get csr
# oc get csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CSR の詳細をレビューし、これが有効であることを確認します。
oc describe csr <csr_name>
# oc describe csr <csr_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<csr_name>
は、現行の CSR の一覧からの CSR の名前です。
それぞれの有効な CSR を承認します。
oc adm certificate approve <csr_name>
# oc adm certificate approve <csr_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保留状態のすべての
node-bootstrapper
CSR を承認するようにしてください。
リカバリー API サーバーは不要になるため、これを削除します。
podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" recovery-apiserver destroy
# podman run -it --network=host -v /etc/kubernetes/:/etc/kubernetes/:Z --entrypoint=/usr/bin/cluster-kube-apiserver-operator "${KAO_IMAGE}" recovery-apiserver destroy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントロールプレーンが再起動し、新規証明書を取得するまで待機します。これには、最長 10 分の時間がかかる可能性があります。