不小心将测试服务器上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

再次查看节点状态已经正常。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐