k8s集群更新证书

1 前言

通过kubeadm部署k8s集群时,除ca证书有效期为10年外,其他证书的有效期仅为1年。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# kubeadm certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Mar 29, 2025 03:05 UTC 228d ca no
apiserver Mar 29, 2025 03:05 UTC 228d ca no
apiserver-etcd-client Mar 29, 2025 03:05 UTC 228d etcd-ca no
apiserver-kubelet-client Mar 29, 2025 03:05 UTC 228d ca no
controller-manager.conf Mar 29, 2025 03:05 UTC 228d ca no
etcd-healthcheck-client Mar 29, 2025 03:05 UTC 228d etcd-ca no
etcd-peer Mar 29, 2025 03:05 UTC 228d etcd-ca no
etcd-server Mar 29, 2025 03:05 UTC 228d etcd-ca no
front-proxy-client Mar 29, 2025 03:05 UTC 228d front-proxy-ca no
scheduler.conf Mar 29, 2025 03:05 UTC 228d ca no

CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Mar 27, 2034 03:05 UTC 9y no
etcd-ca Mar 27, 2034 03:05 UTC 9y no
front-proxy-ca Mar 27, 2034 03:05 UTC 9y no

当证书到期后,我们需要手动更新证书,官方也提供了文档

由于官方文档不是按照步骤给出,容易出现各种问题,为此,本文记录一下证书更新的步骤。

2 查看证书过期时间

所有master节点都要操作

1
kubeadm certs check-expiration

3 备份/etc/kubernetes

所有master节点都要操作

1
cp -ar /etc/kubernetes /etc/kubernetes.old

4 更新证书

所有master节点都要操作

1
kubeadm certs renew all

5 更新config文件

在需要执行kubectl命令的master节点操作,本文中只在master1节点执行

1
2
mv config config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

6 重启控制平面Pod

所有master节点都要操作

目前动态证书重载还不被所有组件和证书支持,因此需要重启控制平面Pod(kube-apiserver,kube-controller,kube-scheduler,etcd)。目前有两种重启方案,为防止误操作,推荐方案2。

方案1:

由于控制平面Pod为静态Pod,因此官方给出的方案是将其清单文件从目录/etc/kubernetes/manifests/中移除并等待20秒,此时清单目录中没有yamls文件,kubelet会终止相关Pod。而后再将清单文件放回去,kubectl可以完成Pod的重建,而证书也可以重新加载。

1
2
root@master1:~# ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml

方案2:

直接在所有控制平面节点找到四个容器,重启。

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

7 参考文档

  1. https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
  2. https://blog.csdn.net/a772304419/article/details/134254031
  3. https://www.cnblogs.com/zoujiaojiao/p/15161862.html

k8s集群更新证书
https://ikuma.top/2024/08/12/k8s集群更新证书/
作者
Kuma
发布于
2024年8月12日
许可协议