ページの先頭行へ戻る
Enterprise Service Development Platform V1.2.0 運用ガイド(FJCS仕様)
FUJITSU Software

5.6 Container Management の証明書の設定

Container Managementでは、コンポーネント間の通信でサーバー認証およびクライアント認証を行っています。 利用するサーバー証明書およびクライアント証明書 については、有効期限を迎える前に以下の手順で更新する必要があります。

「インストールガイド」の「アップデート手順」および、「第13章 修正パッチの適用」からOSSのアップデートを行った場合は、証明書は自動的に更新されます。

Container Managementで使用する証明書

Container Managementでは、以下の証明書が存在します。

  • Kubernetes masterサーバーで使用する証明書
  • Kubernetes nodeサーバーで使用する証明書
  • kubectlコマンド実行環境で使用する証明書

これらの証明書の有効期限は、新規環境構築時や更新実施時から1年(ルート証明書は10年)となっています。直近の更新時から 1 年以内に更新する必要があります。Kubernetes nodeサーバーで使用する証明書は、有効期限が近くなると自動で更新されるように設定されているため、手動での更新は不要です。このため、以降ではKubernetes masterサーバーおよびkubectlコマンド実行環境で使用する証明書の更新方法について説明します。

注意

Kubernetes nodeサーバーの証明書は、有効期限が近くなると自動で更新されるように設定されていますが、Kubernetesクラスタを長期間停止していると更新されないことがあります。有効期限を確認のうえ、定期的にKubernetesクラスタを起動してください。

Kubernetes masterサーバーで使用しているサーバー証明書の有効期限の確認方法

Kubernetes masterサーバーで使用しているサーバー証明書の有効期限を確認します。

  1. Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。

  2. 以下のコマンドを実行します。"EXPIRES"で表示される日時が有効期限です。
    $ 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サーバーで使用する証明書を更新します。

  1. Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。

  2. 管理者権限に変更します。
    $ sudo su -
  3. 以下のコマンドを実行し、Kubernetes masterサーバーで使用する定義をバックアップします。
    # cp -r /etc/kubernetes /etc/kubernetes.bk
  4. 以下のコマンドを実行し、証明書を更新します。更新後、「 Kubernetes masterサーバーで使用しているサーバー証明書の有効期限の確認方法 」を参照して、有効期限が更新されていることを確認してください。
    # kubeadm alpha certs renew all

kubectlコマンド実行環境で使用する証明書の更新手順

kubectlコマンド実行環境では、kubectlコマンド実行時に使用する認証情報を更新する必要があります。上記の"Kubernetes masterサーバーで使用する証明書の更新手順"を実行後、以下の更新作業を行ってください。

まず、Kubernetes masterサーバー上でkubectlコマンドを実行する際に使用する認証情報を更新します。

  1. Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。

  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
  3. 以下のコマンドを実行し、kubectlコマンドが正常に動作していることを確認します。
    $ 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コマンドを実行する際に使用する認証情報を更新します。

  1. Ansibleサーバーにログインします。
  2. 以下のコマンドを実行します。
    $ 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
  3. 以下のコマンドを実行し、kubectlコマンドが正常に動作していることを確認します。
    $ 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"}

Kubernetes master サーバーの証明書の期限が切れた場合

期限が切れた場合は、kubectl実行時に以下のメッセージが出力されます。

Unable to connect to the server: x509: certificate has expired or is not yet valid

また、一部のPodに異常が発生している場合があります。上記の証明書更新の手順を実施後、さらに以下の作業を行ってください。

  1. Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。

  2. 以下のコマンドを実行して、各Podに異常がないかを確認します。以下は"kube-controller-manager-master.novalocal"が"CreateContainerError"だった場合の出力例です。
    $ kubectl get pods -n kube-system
    kube-system      kube-controller-manager-master.novalocal            0/1     CreateContainerError   3          176m
  3. 以下のコマンドを実行し、Podを再作成します。
    $ sudo docker rm -f $(sudo docker ps -a | grep kube-controller-manager | awk '{print $1}')

    実行後、再度手順2を行い、Podが"Running"になっていることを確認してください。