问题及修复
手里有个实验环境部署了一年多,最近重新启用想做一些测试验证,信心满满的准备先跑下kubectl get pods来看下环境是不是正常,结果就看到了下面的错误:
Unable to connect to the server: x509: certificate has expired or is not yet valid.
哈?证书无效?失效?其实错误非常明显了,但是怎么解决却有点蒙圈。因为一开始是用kubeadm安装的cluster,并不记得有手动配置什么证书...
搜了一圈才发现,kubeadm安装的cluster里用的证书默认就是一年,这个环境超过一年了,证书自然也就过期了。当前集群的证书信息可以通过kubeadm certs check-expiration来查看,有些老版本需要运行kubeadm alpha certs check-expiration。更新证书的命令kubeadm也直接提供了,只需要运行kubeadm certs renew all即可,老版本是kubeadm alpha certs renew all。
当然为了保险起见,也可以先备份下现有的配置文件:cp -p /etc/kubernetes/*.conf $HOME/k8s-old-certs。
本地的kubeconfig文件因为证书的更新也会失效,需要将/etc/kubernetes/admin.conf拷贝至$HOME/.kube。如果没有其他cluster的配置信息,那么直接拷贝并重命名为config即可。