k8s证书有效期修改

1.首先我们查看当前证书有效期,有几种方式可以查询

第一种方式:

kubeadm alpha certs check-expiration

微信截图_20220531110800.png

第二种方式:

cd /etc/kubernetes/pki
for i in $(ls *.crt); do echo "===== $i ====="; openssl x509 -in $i -text -noout | grep -A 3 'Validity' ; done

微信截图_20220531110830.png

2.证书有效期修改

首先安装golang,下载地址是https://golang.google.cn/dl/,现在最新的版本是go1.18.2

wget https://studygolang.com/dl/golang/go1.18.2.linux-amd64.tar.gz
tar -zxvf go1.18.2.linux-amd64.tar.gz -C /usr/local/

添加环境变量

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

查看安装是否成功

go version
go version go1.18.2 linux/amd64

下载k8s源码,首先查看自己环境的k8s版本

kubectl get node

查看到本地的是v1.18.15这个版本

去github上拉取源码,地址是https://github.com/kubernetes/kubernetes

选好自己的版本然后下载

wget https://github.com/kubernetes/kubernetes/archive/refs/heads/release-1.18.zip
unzip release-1.18.zip #解压

进入K8s源码文件

cd kubernetes-release-1.18

修改有效期主要修改两个文件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年,这里不需要修改

这两个改好了,我们就可以编译源码了。

cd /root/kubernetes-release-1.18

开始编译

make WHAT=cmd/kubeadm GOFLAGS=-v

编译完后查看结果,就可以看到生成的kubeadm二进文件,在_output/bin/目录下

ls -l /root/kubernetes-release-1.18/_output/bin/

微信截图_20220531114056.png

接着我们更换master节点的kubeadm

cp /usr/bin/kubeadm /usr/bin/kubeadm_bak
/root/kubernetes-release-1.18/_output/bin/kubeadm /usr/bin/kubeadm

kubeadn更换以后再把证书更新下

cd /etc/
cp -R kubernetes kubernetes_bak #备份

接着我们需要把kubeadm配置文件重新生成下

kubeadm config view > /etc/kubernetes/kubeadm.yaml

续订所有证书

kubeadm alpha certs renew all --config=/etc/kubernetes/kubeadm.yaml

重生生成所有配置

kubeadm init phase kubeconfig all

接着需要重启kubelet

systemctl restart kubelet

如果证书已经过期无法使用kubelet命令是可以直接重启对应组件的docker容器

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

更新集群管理配置文件

cp /etc/kubernetes/admin.conf ~/.kube/config

更新完毕以后我们再次验证下证书时间

kubeadm alpha certs check-expiration

微信截图_20220531113735.png

我们可以看到已经更新到了2032年5月28日了,这样证书有效期修改就成功了。

针对1.17以下版本的K8s可能会遇到一些问题

kubeadm alpha certs renew命令并不会更新kubelet证书(kubelet.conf 文件里面写的客户端证书),

因为 kubelet 证书是默认开启自动轮回更新的,但是在执行 kubeadm init 的 master 节点的 kubelet.conf 文件里面的证书是以 base64 编码写死的 (类似 controller-manager.conf 里面的证书)

在用 kubeadm 命令更新 master 证书时需要手动将 kubelet.conf 文件的 client-certificate-data 和 client-key-data 改为:

vi /etc/kubernetes/kubelet.conf
client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem


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

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