使用kubeadm安装的kubernates(版本号为:1.9.0),使用了一年以后出现问题。问题状态为不管使用kubectl 的什么指令,都报出以下的异常
Unable to connect to the server: x509: certificate has expired or is not yet valid
原因为apiserver证书时间到期,需要重新生成证书,使用kubeadm部署集群的时候,1.13.x版本可以直接renew,但是1.9.0没有需要重新生成证书。
使用kubeadm部署集群的时候,CA的有效期为10年,可以使用原CA进行签发证书,即ca.crt、front-proxy-ca.crt。
一、备份原证书和配置文件
cd /etc/kubernetes
mv admin.conf admin.conf.bak
mv controller-manager.conf controller-manager.conf.bak
mv kubelet.conf kubelet.conf.bak
mv scheduler.conf scheduler.conf.bak
cd pki
mv apiserver.crt apiserver.crt.bak
mv apiserver.key apiserver.key.bak
mv apiserver-kubelet-client.crt apiserver-kubelet-client.crt.bak
mv apiserver-kubelet-client.key apiserver-kubelet-client.key.bak
mv front-proxy-client.crt front-proxy-client.crt.bak
mv front-proxy-client.key front-proxy-client.key.bak
二、生成新证书
kubeadm alpha phase certs apiserver --apiserver-advertise-address 192.168.13.80(我这里是HA的地址)
kubeadm alpha phase certs apiserver-kubelet-client
kubeadm alpha phase certs front-proxy-client
三、生成新的配置文件
kubeadm alpha phase kubeconfig all --apiserver-advertise-address 192.168.13.80(我这里是HA的地址)
四、替换老的admin.conf配置文件
cp /etc/kubernetes/admin.conf /root/.kube/config
五、重启服务
需要重启kube-apiserver,kube-controller-manager, kube-scheduler
docker ps | grep xxxx
docker kill -s HUP {容器ID}
kill掉容器后,会自动重构
查看证书有效时间
openssl x509 -in front-proxy-client.crt -noout -text |grep Not
Not Before: Apr 12 01:35:40 2018 GMT
Not After : Apr 11 10:26:06 2020 GMT
完成以上步骤,证书就更新完成了。
PS:在生成证书的时候需要访问谷歌dl.k8s.io,需要进行代理。
閱讀更多 運維小筆記 的文章