K8S证书更新

一、背景

公司自建的K8S集群证书过期,导致集群无法提供服务。首先需要确认一下内容:

  • K8s 版本:V1.20

  • 部署方式:kubeadm

  • 部署架构:几个master节点+几个worker几点

二、操作步骤

1、查看证书过期情况

kubeadm certs check-expiration

2、备份/etc/kubernetes/

cp -rp /etc/kubernetes /etc/kubernetes.bak
cp -r /var/lib/etcd /var/lib/etcd-$(date +%Y%m%d).bak
cp -r ~/.kube/config ~/.kube/config.bak

3、生成新的证书

3.1 方法1:(默认选择)

kubeadm certs renew all # 使用该命令不用提前删除过期证书

3.2 方法2:(单个更新)

kubeadm certs renew apiserver 
kubeadm certs renew admin.conf 
kubeadm certs renew apiserver-etcd-client
kubeadm certs renew apiserver-kubelet-client
kubeadm certs renew controller-manager.conf
kubeadm certs renew etcd-healthcheck-client
kubeadm certs renew etcd-peer
kubeadm certs renew etcd-server
kubeadm certs renew front-proxy-client  
kubeadm certs renew scheduler.conf

如果你运行了一个 HA 集群,这个命令需要在所有控制面板节点上执行。
(除了kubelet.conf都会更新生成)

4、验证集群状态

4.1 验证集群证书有效期是否更新(等待5分钟再查看):

echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2>/dev/null | openssl x509 -noout -enddate
如果证书有效期一直未更新,需要重启控制面的服务(详见步骤6)
kubeadm certs check-expiration

4.2 验证集群状态

  • 查询状态

kubectl get nodes
kubectl get pods -A

  • 重启pod验证
    kubectl rollout restart deployment -n

  • 业务验证

如果集群状态正常,服务正常,则下面的操作应该都不用进行下去。

5、生成配置文件(可能不需要)

5.1 方法1:(默认选择)

kubeadm init phase kubeconfig all

5.2 方法2:

// 重新生成 admin 配置文件
kubeadm init phase kubeconfig admin
// 重新生成 kubelet 配置文件
kubeadm init phase kubeconfig kubelet

6、重启服务(可能不需要)

cd /etc/kubernetes/ && mv manifests/* /tmp/

mv /tmp/kube-* /etc/kubernetes/manifests/ && mv /tmp/etcd.yaml /etc/kubernetes/manifests/

7、重启kubelet(可能不需要)

systemctl restart kubelet && systemctl status kubelet

8、更新集群连接配置(视情况而定)

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

9、其他办法将证书时间调整为10年

需要修改kubeadm源代码,待测试赛


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com

×

喜欢就点赞,疼爱就打赏