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}')

 

posted on 2020-12-21 17:12  耿耿~  阅读(478)  评论(0编辑  收藏  举报

导航