不小心将测试服务器上k8s一个节点的所有证书文件删除,从另一台机器将证书文件拷贝过来启动运行时节点状态总是NotReady。
排查过程
首先查看所有服务的运行状态,发现所有服务都是running状态,进一步查看发现kubelet服务有报错信息。显示如下:
kubelet[4696]: E1216 00:26:17.345636 4696 kubelet_node_status.go:106] Unable to register node “172.16.0.10” with API server: nodes “172.16.0.10” is forbidden: node “172.16.0.9” cannot modify node “172.16.0.10”
通过此处知道大概是kubelet服务认证文件有问题,从网上搜索发现kubelet的证书是通过在主节点使用 kubectl certificate approve 命令来生成的。
解决方法:
问题的关键是重新配置kubelet相关的证书,因此首先将kubelet相关的ssl证书移走。
kubelet相关的证书主要有这几个
[root@k8s-node3-172-233 ssl]# ls kubelet*
kubelet-client.crt
kubelet-client.key
kubelet.crt
kubelet.key
kubelet.kubeconfig
移走相关文件
mkdir /tmp/ssl
mv kubelet* /tmp/ssl
mv …/cfg/kubelet.kubeconfig /tmp/ssl
重启相关服务
systemctl restart flannel kube-proxy kubelet flannel docker
重启服务后发现自动生成了几个证书
kubelet-client.key
kubelet.crt
kubelet.key
还有几个证书没有生成
ls …/cfg/kubelet.kubeconfig
ls: cannot access …/cfg/kubelet.kubeconfig: No such file or directory
通过kublet的TLS证书请求
kubelet 首次启动时向 kube-apiserver 发送证书签名请求,必须通过后 kubernetes 系统才会将该 Node 加入到集群。
查看未授权的 CSR 请求
[root@k8s-master2-172-230 ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-t4 2m kubelet-bootstrap Pending
通过 CSR 请求
kubectl certificate approve node-csr-t4
自动生成了 kubelet kubeconfig 文件和公私钥
ls …/cfg/kubelet.kubeconfig
…/cfg/kubelet.kubeconfig
ls kubelet*
kubelet-client.crt kubelet-client.key kubelet.crt kubelet.key
再次查看节点状态已经正常。