Kubernetes集群证书更新

使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演示集群版本为 v1.13.1 版本,不保证下面的操作对其他版本也适用,在操作之前一定要先对证书目录进行备份,防止操作错误进行回滚。

1.查看证书有效期

$ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
            Not Before: Feb 13 19:17:50 2020 GMT
            Not After : Feb 12 19:17:50 2021 GMT

1.15及以上版本可以使用下面的命令查看证书有效期:

kubeadm alpha certs check-expiration

2.备份证书和etcd数据

mkdir /etc/kubernetes.bak
cp -r /etc/kubernetes/* /etc/kubernetes.bak
cp -r /var/lib/etcd /var/lib/etcd.bak

3.更新证书
注意:kubeadm.conf 中 controlPlaneEndpoint 需配置为leader的节点ip+apiserver 端口号。
注意:此处需要先备份并删除 /etc/kubernetes/admin.conf 文件,否则会导致admin.conf不能正常更新

# 备份并删除旧的配置文件
sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.bak
$ sudo mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak
$ sudo mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.bak
$ sudo mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.bak

$ sudo kubeadm alpha certs renew all --config=kubeadm.conf
$ sudo kubeadm init phase kubeconfig all --config kubeadm.conf
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Using existing up-to-date kubeconfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing up-to-date kubeconfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing up-to-date kubeconfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing up-to-date kubeconfig file: "/etc/kubernetes/scheduler.conf"

4.更新kubeconfig文件

# 更新kubeconfig文件
cp $HOME/.kube/config $HOME/.kube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

完成后重启 kube-apiserver、kube-controller、kube-scheduler、etcd 这4个容器即可,我们可以查看 apiserver 的证书的有效期来验证是否更新成功:

$ echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate
notAfter=Dec 24 10:03:04 2021 GMT

可以看到现在的有效期是一年过后的,证明已经更新成功了。
如果有多个master节点,分别在各个master上执行上述操作即可。

遇到的问题

1.证书到期后,kubeconfig文件失效,导致alpha不能正常访问K8s。其他表现:执行kubectl或kubeadm命令超时

原因:第3步未删除并备份/etc/kubernetes/admin.conf文件,导致admin.conf文件未正常更新,进而导致~/.kube/config文件未更新。

解决方案:重新执行第3步和第4步

2.证书到期后,kubelet重启失败,提示“Part of the existing bootstrap client certificate is expired”

原因:第3步未删除旧的kubelet.conf文件

解决方案:参考第3步更新kubelet.conf文件

3. 服务不能正常访问K8s,提示信息如下

原因:istio-ingressgateway 认证信息过期

解决方案:重启 istio-ingressgateway 即可

k delete po istio-ingressgateway-6d787bdcd9-ql8rj -n istio-system --force --grace-period=0

你可能感兴趣的:(Kubernetes集群证书更新)