一、背景
公司自建的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