k8s默认证书有效期只有一年,目的就是为了让你经常升级k8s?升级成功后也会更新证书,延长1年有效期。实际生产中,由于升级k8s往往会产生一些奇奇怪怪的问题,因此也不会经常升级,那么就需要进行证书续签的操作,如果使用kubeadm安装的集群,证书续签还是挺简单的。
下面的这些操作,在所有master节点都需要执行哦。

备份证书

任何操作前先备份,给自己留口后悔药

1
cp -r /etc/kubernetes /etc/kubernetes.bak

不放心,etcd数据也可以备份一下

1
cp -r /var/lib/etcd /var/lib/etcd.bak

排查当前证书过期状态

1
2
3
4
5
6
kubeadm certs check-expiration
较老版本kubeadm使用
kubeadm alpha certs check-expiration
# 直接用openssl查看证书有效期
cd /etc/kubernetes/pki
for i in $(ls *.crt); do echo "===== $i ====="; openssl x509 -in $i -text -noout | grep -A 3 'Validity' ; done

master节点,通过kubeadm进行证书升级

先确认备份过了哟,kubeadm certs renew可以指定组件更新证书,目前我也没碰到啥场景需要这么弄,就全部续签了。

1
kubeadm certs renew all

重启相关组件

证书更新完成后,还需要重启 kube-apiserver、kube-controller、kube-scheduler、etcd 这4个组件,用docker跑的话,用下面的命令可以方便的重启。

1
docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash

重建 kubectl 访问凭证

需要更新下kubectl的配置信息

1
2
3
mv $HOME/.kube/config $HOME/.kube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

如果kubectl 不在master节点上,拷贝配置过去就好啦,把master节点上的/etc/kubernetes/admin.conf 复制到客户机保存为~/.kube/config即可。

1
scp root@master-node:/etc/kubernetes/admin.conf ~/.kube/config

CA证书续签

k8s提供的CA证书默认期限是10年,还是挺宽松的,目前没有自动续签的方法,先未雨绸缪找了下续签的方法,还未实践,权当收藏。
手动轮换 CA 证书 | Kubernetes

续签10年

通过以下脚本,可以直接实现续签十年,相当省心了。
update-kube-cert/README-zh_CN.md at master · yuyicai/update-kube-cert (github.com)

参考:
使用 kubeadm 进行证书管理 | Kubernetes