せっかく作ったk3sクラスタですからローカル(Windows10)から接続して、色々試したいわけです。しかし、k3sクラスタを起動するのが久しぶりであったせいか、k3s内部証明書が期限切れしてしまったようです(デフォルトでは期限は1年)。また、同時にAWS Client VPNを使ってアクセスしようと思ったので、これを機に設定その他を見直しました。
以前に似たような記事を書きましたが、TLS認証を無理やりスキップするような内容だったので、あまりよくない記事だったと思います。色々試しながら以下のやり方に行きつきました(正しいと言い切る自信はない)。
手順
以下の操作は全て、k3sのコントロールプレーンのノードで行います。
secrets/k3s-serving の変更
AWS Client VPNを利用して接続することとしたので、Windows端末側のIPアドレスを設定してあげる必要があります。調べるとWindows側は192.168.252.0/22の中から割り当てられる事が分かりました。
sudo kubectl -n kube-system edit secrets/k3s-serving
を叩くとエディタが開くので(苦手な)viを操作し
metadata:
annotations:
listener.cattle.io/cn-__1-f16284: ::1
listener.cattle.io/cn-10.43.0.1: 10.43.0.1
listener.cattle.io/cn-127.0.0.1: 127.0.0.1
listener.cattle.io/cn-172.31.42.76: 172.31.42.76
listener.cattle.io/cn-172.31.46.204: 172.31.46.204
listener.cattle.io/cn-172.31.47.52: 172.31.47.52
listener.cattle.io/cn-ip-172-31-42-76: ip-172-31-42-76
listener.cattle.io/cn-ip-172-31-46-204: ip-172-31-46-204
listener.cattle.io/cn-ip-172-31-47-52: ip-172-31-47-52
+ listener.cattle.io/cn-ip-192-168-252-0: 192.168.252.0/22
#(以下略)
と追記します。
キャッシュされた証明書の削除
kubernetes シークレットからキャッシュされた(期限切れ)証明書を削除します。
sudo kubectl -n kube-system edit secrets/k3s-serving
k3s停止
証明書を作り直すために、一時停止します。
sudo systemctl stop k3s
証明書のローテーション
念のため先に、dynamic-cert.jsonを削除しておきます。
sudo rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json
次に証明書を再作成します。
sudo k3s certificate rotate
k3s再スタート
sudo systemctl start k3s
.kube/configを再確認
sudo cat /etc/rancher/k3s/k3s.yaml
の中身を参考に、Windows端末側の.kube/configファイルを見直しました。
以上で、再び接続が可能になりました。
参考URL
以下の記事が参考になりました。ありがとうございました。
k3sクラスタを立ち上げたあとに、control-planeのIPアドレスを変えた時の対処方法
期限切れの K3s 証明書は自動ローテーションされないため接続問題が発生します