k8s集群证书过期解决

news/2024/11/29 1:38:38/

一、k8s集群证书过期解决

问题现象

K8S集群证书过期后,会导无法创建Pod,通过kubectl get nodes也无法获取信息,甚至dashboard也无法访问。

执行命令发现报错:

Unable to connect to the server: x509: certificate has expired or is not yet valid

查看K8S的日志:

Part of the existing bootstrap client certificate is expired: 2023-08-29 02:29:04 +0000 UT
这是说明k8s使用的证书过期了,k8s自带证书是一年的有效期。所以我们解决问题的办法就是更换证书。

二、确认K8S证书过期时间

2.1 查看k8s某一证书过期时间:
[root@k8s-master-47 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep NotNot Before: Aug 29 03:32:16 2021 GMTNot After : Aug 26 03:32:16 2023 GMT
2.2 其它证书同理,K8s各个证书过期时间如下:
/etc/kubernetes/pki/apiserver.crt           #1年有效期
/etc/kubernetes/pki/front-proxy-ca.crt        #10年有效期
/etc/kubernetes/pki/ca.crt              #10年有效期
/etc/kubernetes/pki/apiserver-etcd-client.crt    #1年有效期
/etc/kubernetes/pki/front-proxy-client.crt      #1年有效期
/etc/kubernetes/pki/etcd/server.crt         #1年有效期
/etc/kubernetes/pki/etcd/ca.crt           #10年有效期
/etc/kubernetes/pki/etcd/peer.crt          #1年有效期
/etc/kubernetes/pki/etcd/healthcheck-client.crt  #1年有效期
/etc/kubernetes/pki/apiserver-kubelet-client.crt  #1年有效期
2.3 或使用统一命令查看
[root@k8s-master-47 ~]# kubeadm alpha certs check-expiration

三、使用延长证书过期的方法解决K8S证书过期问题

K8S在过期之前,使用kubeadm alpha phase里的certs和kubeconfig命令,同时配合kubelet证书自动轮换机制来解决这个问题(具体操作可以百度搜索),这里介绍证书已经过期的解决方法,以下延长证书过期的方法适合kubernetes1.14、1.15、1.16、1.17、1.18版本。操作步骤如下:

3.1 下载update-kubeadm-cert.sh

giuhub地址:

  • https://github.com/yuyicai/update-kube-cert

脚本地址:

  • https://github.com/yuyicai/update-kube-cert/blob/master/update-kubeadm-cert.sh

如果你用containerd 作为 CRI runtime

  • 需要下载update-kubeadm-cert-crictl.sh 这个脚本
3.2 把update-kubeadm-cert.sh文件上传到k8s任一master节点任意位置
3.3 在任一master节点执行如下命令
1)脚本添加可执行权限并执行
chmod +x update-kubeadm-cert.sh
./update-kubeadm-cert.sh all
2)验证
[root@k8s-master-47 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text  | grep NotNot Before: Aug 29 03:32:16 2023 GMTNot After : Aug 26 03:32:16 2033 GMT[root@k8s-master-47 ~]# kubeadm alpha certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Aug 26, 2033 03:32 UTC   9y                                      no      
apiserver                  Aug 26, 2033 03:32 UTC   9y              ca                      no      
apiserver-etcd-client      Aug 26, 2033 03:32 UTC   9y              etcd-ca                 no      
apiserver-kubelet-client   Aug 26, 2033 03:32 UTC   9y              ca                      no      
controller-manager.conf    Aug 26, 2033 03:32 UTC   9y                                      no      
etcd-healthcheck-client    Aug 26, 2033 03:32 UTC   9y              etcd-ca                 no      
etcd-peer                  Aug 26, 2033 03:32 UTC   9y              etcd-ca                 no      
etcd-server                Aug 26, 2033 03:32 UTC   9y              etcd-ca                 no      
front-proxy-client         Aug 26, 2033 03:32 UTC   9y              front-proxy-ca          no      
scheduler.conf             Aug 26, 2033 03:32 UTC   9y                                      no      CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Aug 24, 2031 11:28 UTC   7y              no      
etcd-ca                 Aug 24, 2031 11:28 UTC   7y              no      
front-proxy-ca          Aug 24, 2031 11:28 UTC   7y              no      
[root@k8s-master-47 ~]# 
3.4 更新证书失败后回滚

The script will back up the /etc/kubernetes directory into /etc/kubernetes.old-$(date +%Y%m%d) (for example: kubernetes.old-20200325)

If the the script is failed to be executed, use the backup directory to overide the /etc/kubernetes directory.

[root@k8s-master-47 ~]# ls /etc/kubernetes.old-20230829
3.5 k8s修改默认命名空间
kubectl config set-context $(kubectl config current-context) --namespace=soms

四、参考:

  • http://www.taodudu.cc/news/show-3680378.html?action=onClick
  • https://github.com/yuyicai/update-kube-cert

http://www.ppmy.cn/news/1078706.html

相关文章

【C++】线程安全问题

原子类型非线程安全 #include <iostream> #include <thread>int main() {int num 0;int count 100000;std::thread thread1([&](){for(int i 0; i < count; i){num;}});std::thread thread2([&](){for(int i 0; i < count; i){num;}});std::thr…

spring高级源码50讲-9-19(springAOP)

文章目录 AOP9) AOP 实现之 ajc 编译器收获&#x1f4a1; 10) AOP 实现之 agent 类加载收获&#x1f4a1; 11) AOP 实现之 proxy演示1 - jdk 动态代理收获&#x1f4a1;演示2 - cglib 代理收获&#x1f4a1; 12) jdk 动态代理进阶演示1 - 模拟 jdk 动态代理收获&#x1f4a1;演…

钢筋水泥中的信仰--爱摸鱼的美工(16)

好久没有更新了&#xff0c;爱摸鱼的美工摸鱼太久可&#xff0c;终于出了一起钢筋水泥中的信仰&#xff0c;希望人们更加坚定个人的信仰。

C++进阶之多态

多态 多态的概念多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写4.虚函数重写的两个例外5.C11 override 和 final6.重载、覆盖(重写)、隐藏(重定义)的对比 抽象类1.概念2.接口继承和实现继承 多态的原理1.虚函数表2.多态的原理3.动态绑定与静态绑定 单继承和多继承关系…

Java 循环语句解析:从小白到循环达人

如果你正在学习编程&#xff0c;那么循环语句是一个绕不开的重要话题。循环语句让我们能够重复执行一段代码&#xff0c;从而实现各种各样的功能。在本篇博客中&#xff0c;我们将围绕 Java 编程语言中的循环语句展开&#xff0c;从最基础的概念出发&#xff0c;一步步引领你从…

信息化发展15

元宇宙 元宇宙是将虚拟世界与现实世界在经济系统、社交系统、身份系统上密切融合&#xff0c;允许每个用户进行内容生产和编辑的新型社会体系的数字生活空间。元宇宙的主要特征包括&#xff1a; 1 &#xff09;沉浸式体验&#xff1a; 元宇宙的发展主要基于人们对互联网体验的…

git 提交错误,回滚到某一个版本

git log 查看版本号 commit 后面跟的就是版本号git reset --hard 版本号 &#xff08;就可以回滚到你要去的版本&#xff09;git push -f &#xff08;因为本地回滚了&#xff0c;所以和远程会差几个版本。所以这时候只有强制推送&#xff0c;覆盖远程才可以&#xff09;

图解 STP

网络环路 现在我们的生活已经离不开网络&#xff0c;如果我家断网&#xff0c;我会抱怨这什么破网络&#xff0c;影响到我刷抖音、打游戏&#xff1b;如果公司断网&#xff0c;那老板估计会骂娘&#xff0c;因为会影响到公司正常运转&#xff0c;直接造成经济损失。网络通信中&…