kubernetes常见问题处理
一、证书过期
1.1、过期原因:
• 服务器时间不对,导致证书过期
• 确认证书过期了
kubernetes集群证书
集群分为两种证书:一是用于集群MAster、Etcd等通信的证书。二是用于集群kubelet的组件证书
说明:集群搭建时一般只创建声明用于集群master、etcd、等通信的证书为10年或者更久,但为声明集群kubelet组件证书,kubelet组件证书默认有效期为1年,一年后过期会影响集群node不能于集群master正常通信。
1.2、解决办法:
• 重新生成1年有效期的证书
1.2.1 在证书过期的node删除kubelet相关证书文件及配置文件、然后重启kubelet
说明:kubelet的启动原理
• kubelet在第一次启动时若没有证书及配置文件、会在启动时连接APIserver,kubelet 使用 bootstrap.kubeconfig
中的 apiserver CA 证书来与 apiserver 建立 TLS 通讯,使用 bootstrap.kubeconfig
中的用户 Token 来向 apiserver 声明自己的 RBAC 授权身份,意思就是kubelet会向apiserver发起一个csr请求
kublet 启动时查找配置的 --kubeletconfig 文件是否存在,如果不存在则使用 --bootstrap-kubeconfig 向 kube-apiserver 发送证书签名请求 (CSR)。 kube-apiserver 收到 CSR 请求后,对其中的 Token 进行认证(事先使用 kubeadm 创建的 token),认证通过后将请求的 user 设置为 system:bootstrap:,group 设置为 system:bootstrappers,这就是Bootstrap Token Auth。
1.2.2 检查集群bootstrap的token是否存在,若不存在则创建一条token
# 查看token:kubeadm token list --kubeconfig ~/.kube/config
# 创建token:kubeadm token create --description kubelet-bootstrap-token --groups system:bootstrappers:kubernetes-clientgroup --kubeconfig ~/.kube/config
注意: token 生效时间为 1day , 超过时间未创建自动失效,需要重新创建 token
1.2.3 备份kubelet相关文件
备份 kubelet-bootstrap.kubeconfig 、kubelet.kubeconfig、kubelet.crt 、kubelet.key、kubelet-client-2020-12-21-10-03-56.pem
注意:确认/etc/kubernetes/目录没有kubelet-bootstrap.kubeconfig 、kubelet.kubeconfig这两个文件,/etc/kubernetes/pki目录下没有kubelet.*相关文件,因为重启kubelet会重新生成这些文件
# systemctl restart kubelet
# systemctl status kubelet
//查看未授权的CSR请求:
# kubectl get csr
//approve CSR 请求:
# kubectl certificate approve node-csr-cEk-2MICeonmeFRtDHc8p2bRbujeDnC5-8AqCtpsvF4 #例子
// 查看node状态:
# kubectl get node
# 查看各个证书的过期时间
for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.pem"`;do openssl x509 -in $item -text -noout| grep Not;echo ======================$item===============;done
# 查看dashborad 登录token
# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')