k8s证书续签10年

1
2
3
4
5
6
7
8
# 查看K8s有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

# 检查证书何时过期
kubeadm certs check-expiration

# 注: 更新证书只需要更新master节点,node节点不需要!!!
# 参考文档:https://www.strives.cn/archives/145/

1 续签证书一年

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. #查看证书有效期
kubeadm certs check-expiration

2. 更新证书前备份
# 备份kubernetes配置所有目录
cp -rp /etc/kubernetes /opt/kubernetes.bak20240629
# 备份原有证书
cp -rp /etc/kubernetes/pki/ /opt/pki.bak20240629

3. #续签证书
kubeadm certs renew all

4. #重启kubectl
systemctl restart kubelet.service

5. 更新admin配置
# couldn't get current server API group list: the server has asked for the client to provide credentials
cp -rp $HOME/.kube/config /opt/config.bak20240629
cp /etc/kubernetes/admin.conf $HOME/.kube/config

2 续签证书10年

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
2.1、查看当前证书时间
kubeadm certs check-expiration

2.2、下载K8S源码
git clone https://github.com/kubernetes/kubernetes.git

2.3、查看K8s版本
# kubectl version

2.4、切换版本修改源码
cd kubernetes
git checkout v1.27.2
git branch #查看当前版本分支
git branch -r #查看远程版本分支

vim cmd/kubeadm/app/constants/constants.go,找到CertificateValidity,修改如下
...
CertificateValidity = time.Hour * 24 * 365 * 10
...
vim staging/src/k8s.io/client-go/util/cert/cert.go
...
const duration365d = time.Hour * 24 * 365 * 10
...
vim hack/lib/version.sh #为了打包后kubeadm的版本不是脏版本(-dirty),脏版本的kubeadm不能升级
...
if git_status=$("${git[@]}" status --porcelain 2>/dev/null) && [[ -z ${git_status} ]]; then
KUBE_GIT_TREE_STATE="clean"
else
#KUBE_GIT_TREE_STATE="dirty"
KUBE_GIT_TREE_STATE="clean"
fi
...

2.5、安装编译软件
yum -y install gcc automake autoconf libtool make

安装go编译环境,这里就直接使用yum安装
查看go是否安装过
# go env
查看yum的Golang
# yum info golang
安装golang
yum install -y golang
再次查看go环境变量
# go env

2.6、编译
make WHAT=cmd/kubeadm
编译完会在当前目录生成二进制文件
# ll _output/bin #kubeadm

2.7、备份文件
将之前kubeadm 和K8s集群组件证书全部备份一下
1. cp /usr/bin/kubeadm /opt/yaml/kubeadm-init/kubeadm-old
2. cp -rp /etc/kubernetes/pki /opt/yaml/kubeadm-init/pki-old

2.8、替换二进制文件和重新生成证书
替换当前二进制文件
cp /opt/yaml/kubeadm-init/kubeadm-10y /usr/bin/kubeadm
重新生成证书文件
cd /etc/kubernetes/pki
kubeadm certs renew all

2.9、查看是否生效
# kubeadm certs check-expiration
重启kubelet,再次检查一下
systemctl restart kubelet.service

3.0、检查集群是否生效
# kubectl get node

3.1、让其整个集群master生效
将当前新编译好的kubeadm文件复制到其他节点上,然后再替换之前一定要备份好文件,然后重新生成证书,其他操作步骤如上述。
上传kubeadm-10y 到其它节点:/opt/kubeadm-10y
cp /usr/bin/kubeadm /opt/kubeadm-old
chmod 755 /opt/kubeadm-10y
cp /opt/kubeadm-10y /usr/bin/kubeadm

3 KubeClientCertificateExpiration

1
2
kubectl delete po -n kube-system kube-controller-manager-master2 
kubectl delete po -n kube-system kube-scheduler-master2