kubectl get csr 显示No Resources Found的解决记录

在添加了CA证书并部署了kube-apiserver,kube-controller-manager以及kube-scheduler几个k8s的master组件后,添加kubelet组件,同时生成证书认证的配置文件.

kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予 system:node-bootstrapper 角色,然后 kubelet 才有权限创建认证请求(certificatesigning requests)。

文件token.csv内容:

e21b2365eb6e3c86a670dec0bdb511cc,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
#正常情况下只需创建一次认证即可.配置根据token.csv中的内容自行修改.
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

得到kubelet kubeconfig文件后,使用命令kubectl get csr可以看到还未认证的节点.
使用命令kubectl certificate approve {NodeName}可以加入TLS认证.
再使用命令kubectl get csr可以看到CONDITION项已经由Pending变为Approved:

NAME AGE REQUESTOR CONDITION
node-csr-Tju4S-Nabh5S-rinQVhIylvAv0_6eIJOtXalWgGO4_A 25m kubelet-bootstrap Approved,Issued

但若是无意中修改了证书,或者以前的kubelet的bootstrap.kubeconfig配置文件未删除,使用命令kubectl get csr则会显示No Resources Found,这时请检查:
– 1.kubelet 使用的 bootstrap.kubeconfig 文件中User 是否是 kubelet-boostrap,是否包含 token
– 2.token 是否位于 kube-apiserver 使用的 token.csv 文件中;

若还是不行,则可能以前有以前认证过的配置残留,尝试删除/etc/kubernetes/bootstrap.kubeconfig文件后,重启kubelet即可.