web-dev-qa-db-ja.com

Kubernetes:期限切れの証明書

Kubernetes 1.6クラスターには、2017年4月13日にクラスターを構築したときに証明書が生成されていました。

2017年12月13日に、クラスターはバージョン1.8にアップグレードされ、新しい証明書が生成されました[明らかに、不完全な証明書のセット]。

2018年4月13日に、api-serverのKubernetesダッシュボード内でこのメッセージが表示され始めました:

[authentication.go:64] Unable to authenticate the request due to an error: [x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid]

client-certificateclient-key/etc/kubernetes/kubelet.conf 12月13日に生成された証明書で[apiserver-kubelet-client.crtおよびapiserver-kubelet-client.crt]、ただし上記のエラーは引き続き表示されます。

client-certificateclient-key/etc/kubernetes/kubelet.conf atdifferent12月13日に生成された証明書[apiserver.crtおよびapiserver.crt](正直なところ、これらの2組の証明書/キーの違いを理解していません)が、上記のエラーは引き続き表示されます。

client-certificateclient-key/etc/kubernetes/kubelet.conf存在しないファイルで、kube *サービスはいずれも開始されず、/var/log/syslogこれについて不満を言う:

Apr 17 17:50:08 kuber01 kubelet[2422]: W0417 17:50:08.181326 2422 server.go:381] invalid kubeconfig: invalid configuration: [unable to read client-cert /tmp/this/cert/does/not/exist.crt for system:node:node01 due to open /tmp/this/cert/does/not/exist.crt: no such file or directory, unable to read client-key /tmp/this/key/does/not/exist.key for system:node:node01 due to open /tmp/this/key/does/not/exist.key: no such file or directory]

このエラーを克服する方法、またはより詳細なレベルでトラブルシューティングする方法に関するアドバイスはありますか? APIサーバー(kubeadm alpha phase certs apiserver)、 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/#cmd-phase-certs 内の指示に基づきますが、もっと多くのダメージを与えるでしょう。

Kubernetesにとって比較的新しいものであり、これを設定した紳士は相談に応じられません...どんな助けも歓迎します。ありがとう。

7
NoobSkywalker

Kubernetesクラスター内の各ノードには、kubelet ... /etc/kubernetes/kubelet.conf ...を実行するための構成ファイルが含まれており、このファイルはkubeadmによって自動生成されます。この自動生成中に、kubeadm/etc/kubernetes/ca.keyを使用して、ノード固有のファイル/etc/kubernetes/kubelet.confを作成します。その中に2つの非常に重要な部分があります... client-証明書データおよびクライアントキーデータ私の最初の思考プロセスは、対応する証明書ファイルとキーファイルを見つけ、それらのファイルを更新し、両方をbase64に変換し、クラスター全体のkubelet.confファイル内でそれらの値を使用する必要があると信じるようになりました...この考え方は正しくありません。

代わりに、修正プログラムはkubeadmを使用して、すべてのノードでkubectl.confを再生成し、クラスターのadmin.confcontroller-manager.conf、およびscheduler.confを再生成しましたマスターノード。構成ファイルにclient-certificate-dataおよびclient-key-dataの有効なデータを含めるには、各ノードで/etc/kubernetes/pki/ca.keyが必要です。

プロのヒント:--apiserver-advertise-addressパラメーターを使用して、新しい構成ファイルにkube-apiserverサービスをホストするノードの正しいIPアドレスが含まれるようにします。

9
NoobSkywalker

Apiserver証明書を再生成する必要があると思います/etc/kubernetes/pki/apiserver.crtこのように現在の有効期限を表示できます。

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
            Not Before: Dec 20 14:32:00 2017 GMT
            Not After : Dec 20 14:32:00 2018 GMT

以下は、v1.11.5クラスターで証明書を再生成するために使用した手順です。ここからコンパイルされた手順 https://github.com/kubernetes/kubeadm/issues/581


すべての証明書の有効期限を確認するには:

find /etc/kubernetes/pki/ -type f -name "*.crt" -print|egrep -v 'ca.crt$'|xargs -L 1 -t  -i bash -c 'openssl x509  -noout -text -in {}|grep After'

Maserノードの証明書を更新します。

*)証明書を更新する

mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old


kubeadm alpha phase certs apiserver  --config /root/kubeadm-kubetest.yaml
kubeadm alpha phase certs apiserver-kubelet-client
kubeadm alpha phase certs front-proxy-client

mv /etc/kubernetes/pki/apiserver-etcd-client.crt /etc/kubernetes/pki/apiserver-etcd-client.crt.old
mv /etc/kubernetes/pki/apiserver-etcd-client.key /etc/kubernetes/pki/apiserver-etcd-client.key.old
kubeadm alpha phase certs  apiserver-etcd-client


mv /etc/kubernetes/pki/etcd/server.crt /etc/kubernetes/pki/etcd/server.crt.old
mv /etc/kubernetes/pki/etcd/server.key /etc/kubernetes/pki/etcd/server.key.old
kubeadm alpha phase certs  etcd-server --config /root/kubeadm-kubetest.yaml

mv /etc/kubernetes/pki/etcd/healthcheck-client.crt /etc/kubernetes/pki/etcd/healthcheck-client.crt.old
mv /etc/kubernetes/pki/etcd/healthcheck-client.key /etc/kubernetes/pki/etcd/healthcheck-client.key.old
kubeadm alpha phase certs  etcd-healthcheck-client --config /root/kubeadm-kubetest.yaml


mv /etc/kubernetes/pki/etcd/peer.crt /etc/kubernetes/pki/etcd/peert.crt.old
mv /etc/kubernetes/pki/etcd/peer.key /etc/kubernetes/pki/etcd/peer.key.old
kubeadm alpha phase certs  etcd-peer --config /root/kubeadm-kubetest.yaml

*)  Backup old configuration files
mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old

kubeadm alpha phase kubeconfig all  --config /root/kubeadm-kubetest.yaml

mv $HOME/.kube/config .$HOMEkube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
chmod 777 $HOME/.kube/config
export KUBECONFIG=.kube/config

ノードを再起動し、etcd、kubeapi、kubeletのログを確認します。

注:CI/CDジョブkubeconfigファイルを更新することを忘れないでください。ヘルムコマンドを使用している場合は、それもテストします。

4
sfgroups

K8s 1.7では、同様の問題(x509期限切れエラーが/var/log/kube-apiserver.logに含まれています)に直面し、期限切れの証明書が見つかりませんでした。マスターノードでapiserverドッカーのみを再起動することにしました。問題を解決しました。

$ Sudo docker ps -a | grep apiserver
af99f816c7ec        gcr.io/google_containers/kube-apiserver@sha256:53b987e5a2932bdaff88497081b488e3b56af5b6a14891895b08703129477d85               "/bin/sh -c '/usr/loc"   15 months ago       Up 19 hours                                     k8s_kube-apiserver_kube-apiserver-ip-xxxxxc_0
40f3a18050c3        gcr.io/google_containers/pause-AMD64:3.0                                                                                      "/pause"                 15 months ago       Up 15 months                                    k8s_POD_kube-apiserver-ip-xxxc_0
$ Sudo docker restart af99f816c7ec
af99f816c7ec
$ 
3
user3541649