k8s多master集群更新证书

我本地环境是三个master的k8s集群

192.168.1.72   master1
192.168.1.73   master2
192.168.1.74   master3

首先第一个master节点更新证书,我们首先需要导出资源清单

kubectl get cm kubeadm-config -n kube-system -o yaml >/etc/kubernetes/kubeadm-cluster.yaml #
# 实际上导出的资源清单还需要进行修改,最好直接使用之前kubeadm config print init-defaults >./default.yaml 生成后修改好的文件进行证书的更新,如果找不到了,可以直接重新生一个根据上面的kubeadm-cluster.yaml文件进行修改

操作前我们还是先备份

#master1,master2,master3上操作均要进行备份
cp -r /etc/kubernetes /etc/kubernetes_bak
cp -r /var/lib/kubelet /var/lib/kubelet_bak
cp -r /var/lib/etcd /var/lib/etcd_bak

接着我们需要进行master1进行证书的更新,按照之前的笔记配置go并编译对应k8s源码生成新的kubeadm文件,具体笔记可以查看:https://sulao.cn/post/943.html

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 certs renew all --config=/etc/kubernetes/kubeadm-cluster.yaml

然后重启apiserver、controller、scheduler、etcd组件

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

上述更新证书以后我们我们已经能够通过命令验证证书已经更新到10年。

kubeadm certs check-expiration

微信截图_20240108194423.png

我们将admin.conf文件文件替换之前/root/.kube/config文件,使用这个新生成的管理配置进行管理。

需要更新kubelet.conf配置文件,更换此文件是为了证书链自动轮换。

kubeadm kubeconfig user --client-name system:node:$(hostname) --org=system:nodes >/etc/kubernetes/kubelet.conf
vim /etc/kubernetes/kubelet.conf
#将user部分改为链接到client证书链文件
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

改为kubelet.conf配置我们还需要重启下kubelet

systemctl restart kubelet

将kubeadm文件和资源清单文件传到其他两个节点更新证书使用

#master2、master3上操作
mv /usr/bin/kubeadm /usr/bin/kubeadm_bak
#master1上操作
scp kubeadm-cluster.yaml root@192.168.1.73:/etc/kubernetes/
scp kubeadm-cluster.yaml root@192.168.1.74:/etc/kubernetes/
scp /usr/bin/kubeadm root@192.168.1.73:/usr/bin/kubeadm
scp /usr/bin/kubeadm root@192.168.1.74:/usr/bin/kubeadm
#master2、master3上操作
kubeadm certs renew all --config=/etc/kubernetes/kubeadm-cluster.yaml

然后重启master2和master3上的apiserver、controller、scheduler、etcd组件

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

master2和master3也需要需要更新kubelet.conf配置文件,并重启两个节点的kubelet

kubeadm alpha kubeconfig user --client-name=system:node:$(hostname) --org=system:nodes >/etc/kubernetes/kubelet.conf
vim /etc/kubernetes/kubelet.conf
#将user部分改为链接到client证书链文件
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
#改好保存后重启该节点kubelet
systemctl restart kubelet

下面是可选操作部分,根据自己需求是否用下面方式

如果不想去修改kubelet.conf配置,可以只用kubeadm init命令重新生成所有配置文件,操作如下

#每个master节点更新完证书以后都这样操作
/etc/kubernetes
rm -rf *.conf
kubeadm init phase kubeconfig all --config=/etc/kubernetes/kubeadm-cluster.yaml

这样就可以直接生成新的admin.conf、controller-manager.conf、kubelet.conf、scheduler.conf四个配置文件,其中注意kubelet文件链接证书还是base64,如果还是base64需要按上述修改链接到/var/lib/kubelet/pki/目录下的证书链。



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

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