故障现象
在测试环境使用kubeadm部署的集群,在运行了一年之后今天,出现k8s api无法调取的现象,使用kubectl命令获取资源均返回如下报错:
1 | [root@master35 ~]# kubectl get nodes |
一看报错,大概率是证书到期了,经过命令一查证书时间,果然是
1 | openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not ' |
替换apiserver证书
进入master节点
1 | cd /etc/kubernetes |
完成上方操作后,docker restart重启kube-apiserver,kube-controller,kube-scheduler这3个容器
如果有多台master节点,先仿照上方将证书文件和配置文件进行备份,然后将这一台配置完成的master上的证书和配置scp过去
验证
kubectl命令发现还是无法查看资源,检查apiserver的日志: docker logs
1 | 1 customresource_discovery_controller.go:156] Shutting down DiscoveryController |
怀疑是etcd证书的原因
etcd证书过期处理
看下etcd证书配置文件,发现是8760h
1 | cat config.json |
首先备份etcd数据:
1 | cd /var/lib |
修改ca配置文件,将默认证书签署过期时间修改为10年:
1 | [root@master35 etcd]# cat ca-config.json |
生成新证书:
1 | #删除过期证书 |
etcd替换成功后,再重启kube-apiserver,kube-controller,kube-scheduler这3个容器