はじめに
以下の記事にてMasterNodeとWorkerNodeを1台ずつ構築しました。
本記事ではtokenの有効期限が切れた際にWorkerNodeを追加する流れを記載します。
環境情報
- kubeadm 1.15
Tokenを再作成する必要がある
Masterノードを構築した際に出たtoken情報をWorkerノードに入れると参加できましたが
kubeadm join 10.1.1.111:6443 --token ... --discovery-token-ca-cert-hash sha256:7ca8...
token情報には有効期限が設定されており、有効期限は以下のように確認できます。
# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS ...
このTOKENという項目に記載があるのがjoin時に--token
として入れる値ですが、TTLという項目がinvalid
となっている場合は有効期限切れ状態なので利用できません。
よって、TOKENを再作成する必要があります。
ちなみに切れたTOKENでkubeadm joinを行うとUnauthorizedとしてエラーとなります。
error execution phase preflight : unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized
Tokenを再生成する
MasterNodeにて以下コマンドで生成でき
# kubeadm token create ....
作成したTokenがリストに追記され、有効期限が1日なので残り23時間と表記されています。
# kubeadm token list .... xxxx 23h ... authetication,signing <none> system:bootstrappers:kubeadm:default-node-token
discovery-token-ca-cert-hastの値を確認する
こちらは前回用いた値と同一ですが、メモし忘れた場合に再確認する手順を説明します。
用いるのは以下の認証局証明書です。
-rw-r--r-- /etc/kubernetes/pki/ca.crt
以下の手順で該当情報を出力します。
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der | openssl dgst -sha256 -hex
流れとしてopenssl x509 -pubkey -in
で公開鍵を抜き出しopenssl rsa -pubin -outform der
でDERフォーマットに変換し、メッセージダイジェストを計算するdgst
でsha256として計算しています。
実行結果は以下の形式で表示されるので
writing RSA key (stdin)= 921cb07...
kubeadm join
する際に以下のように値を書き直せば認証が通ります。
--discovery-token-ca-cert-hash sha256:921cb07...
終わりに
本手順はMasterにてkubeadm init
した際に表示される以下の画面の値がクリアされた場合にも利用できるので
worker# kubeadm join <arguments-returned-from-init>
同様のことを実施しようとする方の参考になれば幸いです。