Container Managementでは、コンポーネント間の通信でサーバー認証およびクライアント認証を行っています。 利用するサーバー証明書およびクライアント証明書 については、有効期限を迎える前に以下の手順で更新する必要があります。
「インストールガイド」の「アップデート手順」および、「第13章 修正パッチの適用」からOSSのアップデートを行った場合は、証明書は自動的に更新されます。
Container Managementでは、以下の証明書が存在します。
これらの証明書の有効期限は、新規環境構築時や更新実施時から1年(ルート証明書は10年)となっています。直近の更新時から 1 年以内に更新する必要があります。Kubernetes nodeサーバーで使用する証明書は、有効期限が近くなると自動で更新されるように設定されているため、手動での更新は不要です。このため、以降ではKubernetes masterサーバーおよびkubectlコマンド実行環境で使用する証明書の更新方法について説明します。
注意
Kubernetes nodeサーバーの証明書は、有効期限が近くなると自動で更新されるように設定されていますが、Kubernetesクラスタを長期間停止していると更新されないことがあります。有効期限を確認のうえ、定期的にKubernetesクラスタを起動してください。
Kubernetes masterサーバーで使用しているサーバー証明書の有効期限を確認します。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
$ sudo kubeadm alpha certs check-expiration CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED admin.conf Dec 30, 2020 23:36 UTC 364d no apiserver Dec 30, 2020 23:36 UTC 364d ca no apiserver-etcd-client Dec 30, 2020 23:36 UTC 364d etcd-ca no apiserver-kubelet-client Dec 30, 2020 23:36 UTC 364d ca no controller-manager.conf Dec 30, 2020 23:36 UTC 364d no etcd-healthcheck-client Dec 30, 2020 23:36 UTC 364d etcd-ca no etcd-peer Dec 30, 2020 23:36 UTC 364d etcd-ca no etcd-server Dec 30, 2020 23:36 UTC 364d etcd-ca no front-proxy-client Dec 30, 2020 23:36 UTC 364d front-proxy-ca no scheduler.conf Dec 30, 2020 23:36 UTC 364d no CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED ca Dec 28, 2029 23:36 UTC 9y no etcd-ca Dec 28, 2029 23:36 UTC 9y no front-proxy-ca Dec 28, 2029 23:36 UTC 9y no
以下の手順でKubernetes masterサーバーで使用する証明書を更新します。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
$ sudo su -
# cp -r /etc/kubernetes /etc/kubernetes.bk
# kubeadm alpha certs renew all
kubectlコマンド実行環境では、kubectlコマンド実行時に使用する認証情報を更新する必要があります。上記の"Kubernetes masterサーバーで使用する証明書の更新手順"を実行後、以下の更新作業を行ってください。
まず、Kubernetes masterサーバー上でkubectlコマンドを実行する際に使用する認証情報を更新します。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
$ sudo cp -rf /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config $ sudo chmod 0644 $HOME/.kube/config
$ kubectl version Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:23:09Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:14:56Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
続いて、Ansibleサーバー上でkubectlコマンドを実行する際に使用する認証情報を更新します。
$ scp -i /home/k5user/<秘密鍵のファイル名> k5user@<Kubernetes masterサーバーのIPアドレス>:$HOME/.kube/config $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config $ sudo chmod 0644 $HOME/.kube/config
$ kubectl version Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:23:09Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:14:56Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
期限が切れた場合は、kubectl実行時に以下のメッセージが出力されます。
Unable to connect to the server: x509: certificate has expired or is not yet valid
また、一部のPodに異常が発生している場合があります。上記の証明書更新の手順を実施後、さらに以下の作業を行ってください。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
$ kubectl get pods -n kube-system kube-system kube-controller-manager-master.novalocal 0/1 CreateContainerError 3 176m
$ sudo docker rm -f $(sudo docker ps -a | grep kube-controller-manager | awk '{print $1}')
実行後、再度手順2を行い、Podが"Running"になっていることを確認してください。