我有一个kubeadm
安装的 Kubernetes 集群。最近它停止工作了。kubelet
正在运行,但似乎停留在初始化阶段。我认为根本原因是这种重复登录kube-apiserver
:
1 authentication.go:63] "Unable to authenticate the request" err="[x509: certificate has expired or is not yet valid: current time 2021-06-02T13:18:50Z is after 2021-05-29T15:48:22Z
所以有一个证书问题,也kubectl
失败了unauthorized
。事情是,kubeadm certs check-expiration
似乎很高兴,我什至手动检查了一些 yaml 配置文件(base64 解码证书,并通过 openssl 运行它们以检查日期)。尽管如此,我还是要求 kubeadm 更新所有证书并重新启动所有内容,但没有任何效果。
知道如何确定哪个证书已过期吗?
[致谢和参考] 一位 kubernetes 的开发人员在这里帮助了我
过期的证书是
/var/lib/kubelet/pki/kubelet/pki/kubelet-client-2020-*.pem
. 里面的证书/var/lib/kublet/pki/
不是自己处理的,kubeadm cert
而是kubelet
自己处理的,所以它应该是自动更新的,但由于某种原因,这并没有按我们的计划发生。已kubelet-client-current.pem
更新,但某些东西仍在使用旧的(和过期的)证书。这是我解决问题的方法:
/etc/kubernetes/kubelet.conf
已过时,尤其是使用default-user
而不是system:node:node_name
. 我删除了该文件,创建了一个 kubeadm conf 文件并运行kubeadm init phase kubeconfig kubelet
以重新创建一个干净的kubelet.conf
/var/lib/kublet/pki/kubelet-client-current.pem
应该是一个符号链接,对我来说不是这样。所以我删除了它。kubelet-client-current.pem
的创建;它应该是一个符号链接。kubeadm init phase kubelet-finalize all
kubeadm certs renew all
/etc/kubernetes/admin.conf
类似的问题似乎与 NTP 去同步有关。
尝试强制时间同步(以 root 身份运行):
更新 Kubernetes 证书(在所有主节点上运行)