証明書を置き換える K8S 証明書の有効期限切れソリューション

目次

1 証明書の有効期限が切れたとき

2 Kubernetes環境の紹介

証明書を置き換える 3 つのステップ

3.1 マスター上の各証明書の有効期限を表示する

3.2 マスター (192.168.0.190) で kubelet 証明書リストを表示する

3.3 マスター (192.168.0.190) 上の kubelet 証明書の有効期限を表示する

3.4 ノード1とノード2のkubelet証明書の有効期限を確認する((2)と同様)

3.5 関連する証明書ファイルのディレクトリをバックアップする

3.6 マスター上の証明書をローテーションする

3.7 証明書の有効期限を再度表示する

3.8 /etc/kubernetes/pki/certificate が更新されたかどうかを確認する

3.9 conf ファイルを削除する

3.10 kubeconfig ファイルを再生成する

3.11 新しい設定ファイルが生成されたかどうかを確認する

3.12 管理者が使用する新しい kubeconfig ファイルを再コピーします。

3.13 kubeスケジューラを再起動する

4 kubelet証明書のローテーション

4.1 マスター上で kubelet 証明書をローテーションする

4.1.1 マスター上の証明書署名要求 (CSR と呼ばれます) を確認する

4.1.2 現在の kubelet 証明書の有効期限の表示

 4.2 ノード上の kubelet 証明書をローテーションする

4.2.1 ノード1に必要なkubelet.confファイルの生成

4.2.2 ノード1に切り替えてkubeletを再起動する 

5 クラスターを再起動します

6 後遺症


このブログの参考資料

https://blog.csdn.net/Harry_z666/article/details/128015175

検証されました、元のブロガーの記録に感謝します~

また、私の Kubernetes バージョンは V1.23.4 です。

ガベージ データが生成され、テストに不要なトラブルが発生しないように、証明書を更新する前に、コマンド ラインを使用して以前の作業デプロイメント コンテナーを削除してください。スクリーンショットの時間は無視して、内容に注目してください 結局、このブログを記録するときにチュートリアルに従って証明書を更新しましたが、それらはすべて補足写真または検索で見つかった同様のステータスの写真です。

1 証明書の有効期限が切れたとき

kubeadm を使用してインストールされた kubernetes クラスターのさまざまなコンポーネントで使用される証明書の有効期限は 1 年であり、有効期限が切れると証明書は無効になり、kubectl コマンドが使用できなくなります。kubectl コマンドを使用すると、エラーが発生して localhost:8080 に接続できなくなります。

2 Kubernetes環境の紹介

192.168.0.190 はマスター ノード、192.168.0.191 と 192.168.0.192 はそれぞれノード 1 とノード 2 です。オペレーティング システムは Linux 4.19.90-25.2.v2101.gfb01.ky10.aarch64 です。

証明書を置き換える 3 つのステップ

3.1 マスター上の各証明書の有効期限を表示する

kubeadm certs check-expiration

3.2 マスター (192.168.0.190) で kubelet 証明書リストを表示する

ls /var/lib/kubelet/pki/

3.3 マスター (192.168.0.190) 上の kubelet 証明書の有効期限を表示する

openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not

3.4 ノード1とノード2のkubelet証明書の有効期限を確認する((2)と同様)

3.5 関連する証明書ファイルのディレクトリをバックアップする

(バックアップを習慣付けることが非常に重要です。証明書が無効になるとクラスターが再インストールされます)

cp -r /etc/kubernetes/ /tmp/backup/ # 静态pods配置以及证书
cp -r /var/lib/kubelet/pki/ /tmp/backup.crr #证书pem存放目录

3.6 マスター上の証明書をローテーションする

[root@master kubernetes]#kubeadm certs renew all

 (証明書が更新されたため、写真をお借りしました。記録は更新完了後に作成されます)

3.7 証明書の有効期限を再度表示する

[root@master kubernetes]#kubeadm certs check-expiration

3.8 /etc/kubernetes/pki/certificate が更新されたかどうかを確認する

[root@master kubernetes]#ll -a /etc/kubernetes/pki/

kubernetes の各コンポーネントで現在使用されている kubeconfig は /etc/kubernetes/ にあります。 

[root@master kubernetes]#ll -a /etc/kubernetes/

3.9 conf ファイルを削除する

[root@master kubernetes]#rm -rf /etc/kubernetes/*.conf
[root@master kubernetes]#ls

3.10 kubeconfig ファイルを再生成する

#注意版本号
[root@master kubernetes]#kubeadm init --kubernetes-version=v1.23.4 phase kubeconfig all

3.11 新しい設定ファイルが生成されたかどうかを確認する

[root@master kubernetes]# ll -a /etc/kubernetes/

必要な kubeconfig ファイルは上記の kubelet.conf です。

3.12 管理者が使用する新しい kubeconfig ファイルを再コピーします。

#备份下/root/.kube/config 文件:
cp /root/.kube/config /tmp/kube.old/config
#替换:
[root@master kubernetes]# cp /etc/kubernetes/admin.conf ~/.kube/config

3.13 kubeスケジューラを再起動する

[root@master kubernetes]# docker ps -a | grep kube-scheduler | awk ‘{print $1}’
[root@master kubernetes]# docker rm -f 上述容器

#等待kube-scheduler彻底启动起来,即状态为1/1。
[root@master kubernetes]# kubectl get pods -n kube-system | grep scheduler

4 kubelet証明書のローテーション

4.1 マスター上で kubelet 証明書をローテーションする

#查看kubelet当前所使用的证书
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/


#通过kubeadm certs renew all更新的 k8s 证数,是不会更新 kubelet.conf 的证书的。
#所以此处的证书重启kubelet cho重新生成。
#因为前面已经重新生成了kubelet.conf,现在重启kubelet。
[root@master kubernetes]# systemctl restart kubelet


[root@master kubernetes]# ll -a /var/lib/kubelet/pki/

4.1.1 マスター上の証明書署名要求 (CSR と呼ばれます) を確認する

[root@master kubernetes]# kubectl get csr

#我的报的是“No Resource Found”,目前看来是不影响使用的,看其他人的是有信息的,不清楚具体原因。


[root@master kubernetes]# kubectl certificate approve csr-vg9bd
certificatesigningrequest.certificates.k8s.io/csr-vg9bd approved(未操作该步骤)

4.1.2 現在の kubelet 証明書の有効期限の表示

[root@master kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not


#PS:未过期的话应该是可以不处理的,我当时查看kubelet的证书时间还没过期,所以没有操作证书替换

 4.2 ノード上の kubelet 証明書をローテーションする

4.2.1 ノード1に必要なkubelet.confファイルの生成

#在master上生成worker所需要的kubelet.conf临时放在/tmp下
[root@master tmp]# mkdir -p /tmp/worker

#生成node1所需要的kubelet.conf文件。注意更改成自己的信息
[root@master worker]# kubeadm init --kubernetes-version=v1.23.4 phase kubeconfig kubelet --node-name node1 --kubeconfig-dir /tmp/worker/
#[kubeconfig] Writing “kubelet.conf” kubeconfig file

#node1(192.168.0.191)上的/etc/kubernetes/目录里覆盖原来的kubelet.conf。先备份原先node1的kubelet.conf文件:
[root@node1 kubernetes]# mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubeletconf.bak

[root@master worker]# scp /tmp/worker/kubelet.conf [email protected]:/etc/kubernetes/

4.2.2 ノード1に切り替えてkubeletを再起動する 

[root@node1 kubernetes]# systemctl restart kubelet


#再次查看证书
[root@node1 kubernetes]# ll -a /var/lib/kubelet/pki/


#查看kubelet证书的过期时间。
[root@node1 kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not


#切换到master(192.168.0.190)上,查看CSR。(未操作)
[root@master worker]# kubectl get csr

他のノードも上記と同様に動作します。

5 クラスターを再起動します

reboot

構成を変更した後は必ず再起動してください。ほとんどの場合、再起動により多くの問題が解決します~~

6 後遺症

コンテナが自動でスケジュールできない場合は、ノード数が少ないときに手動で各ノードを割り当ててみるとスケジュールできるようになりますが、具体的な理由はまだ明らかになっていません。

証明書の更新後に前のタスク コンテナーが実行されているように見えても、実際には機能していない場合は、コマンド ラインを使用してコンテナーを削除するか、k8s の名前空間をクリーンアップして、ガベージ データが原因でコンテナーが再起動できなくなるのを防ぐことができます。

おすすめ

転載: blog.csdn.net/q_hsolucky/article/details/131308025
おすすめ