k8s修改证书有效期,适用于k8s1.17以上版本

之前我们做过k8s证书续期的笔记,但是1.19以上版本就有些不一样了,所以重新记录一篇,感兴趣的可以查看我之前的笔记:https://sulao.cn/post/846.html

k8s大体上续订证书基本还是一致的,也是下载k8s对应版本源码,然后编译kubeadm,使用新的kubeadm进行证书续期

此方式使用范围是1.17-1.23版本。

我们首先下载golang,编译的时候需要使用到

wget https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz
tar -zxvf go1.21.5.linux-amd64.tar.gz -C /usr/local/

添加环境变量使其生效

echo "export PATH=$PATH:/usr/local/go/bin" >>/etc/profile
source /etc/profile

验证golang环境变量和版本

go version
go version go1.21.5 linux/amd64

接着我们查看k8s版本和到期时间

kubectl get node -o wide 
kubeadm certs check-expiration #注意1.19之前的版本是kubeadm alpha certs check-expiration,到1.21版本以后这个命令测底废弃

微信截图_20231213195052.png

我们使用的k8s版本是1.23.0,证书到期时间是2024年,接下来我们延长到2033年,也就是10年。

下载对应的k8s源码

wget https://github.com/kubernetes/kubernetes/archive/refs/heads/release-1.23.zip
unzip release-1.23.zip
cd kubernetes-release-1.23

修改有效期主要修改两个文件constants.go和cert.go

修改constants.go文件

vi cmd/kubeadm/app/constants/constants.go

找到关键字CertificateValidity,大概在49行

CertificateValidity = time.Hour * 24 * 365#修改为CertificateValidity = time.Hour * 24 * 365 * 10

这样就加了10年,接着我们修改cert.go文件

vi staging/src/k8s.io/client-go/util/cert/cert.go

找到关键字NotAfter:,大概在66行

NotAfter:              now.Add(duration365d * 10).UTC(),

默认就是10年,我们本来只需要10年,这里不需要修改

这两个改好了,我们就可以编译源码了,编译前还需要安装依赖包

yum install gcc make rsync jq -y
#如果是ubuntu命令是
sudo apt install build-essential rsync jq -y

接着我们就可以开始编译了

# 编译 kubeadm, 这里主要编译 kubeadm 即可
make all WHAT=cmd/kubeadm GOFLAGS=-v
# 编译 kubelet
make all WHAT=cmd/kubelet GOFLAGS=-v
# 编译 kubectl
make all WHAT=cmd/kubectl GOFLAGS=-v

编译完成以后文件均在kubernetes-release-1.23/_output/bin/目录下,实际我们只需要kubeadm文件即可进行证书续期

替换原来的kuadm文件

mv /usr/bin/kubeadm  /usr/bin/kubeadm_bak
mv kubernetes-release-1.23/_output/bin/kubeadm /usr/bin/kubeadm
chmod +x /usr/bin/kubeadm

然后执行kubeadm version命令如果能够正确反馈版本信息,说明就已经OK了。

kubeadm version

微信截图_20231213200409.png

接着我们续订所有证书,续订前先备份下当前的所有证书

cd /etc/kubernetes/
cp -r pki pki_bak
kubeadm certs renew all

然后我们再使用命令查询证书状态

微信截图_20231213195221.png

需要重启下对应的组件

kubectl get pod -A -o wide | egrep -iE "kube-apiserver|kube-controller-manager|kube-scheduler|etcd-" | awk '{print $2}' | xargs kubectl delete pod -n kube-system

如果证书已经到期不能使用kubelet命令,直接去节点操作以下命令

docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler' | awk '{print $1}' | xargs docker restart


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/943.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。