kubeadm证书/etcd证书过期处理

kubeadm证书/etcd证书过期处理

今天突然测试环境的Kubernetes 持续集成/持续发布出了问题了,然后上测试环境服务器排查,发现kubectl指令执行出现问题,

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

然后翻译了一下提示证书已过期,网上查了下资料,说是:kubernetes的apiServer 与kubelet的访问授权证书是一年,官方的解释是:通过这种方式,让用户不断的升级版本。给出的解决方案有以下几种:
去掉证书验证功能(不科学,等于自己去改源码)
重新生成证书,替换旧的。
升级集群,自动更新证书
部署一套新的环境,业务迁移过去。
https://github.com/kubernetes/kubeadm/issues/581

查看证书的有效日期:(这是已经更新的了的。默认有效期为一年)

[root@node01 bin]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
            Not Before: May 18 07:34:20 2018 GMT
            Not After : May 19 04:23:55 2020 GMT

开始替换证书:
一、 备份原来的配置文件及证书

[root@node01 bin]#  cp -rf /etc/kubernetes /etc/kubernetes_bak/
[root@node01 bin]#  cd /etc/kubernetes/
[root@node01 kubernetes]#  rm -f pki/apiserver*
[root@node01 kubernetes]#  rm -f pki/front-proxy-client.*
[root@node01 kubernetes]#  rm -f ./admin.conf
[root@node01 kubernetes]#  rm -f ./kubelet.conf
[root@node01 kubernetes]#  rm -f ./controller-manager.conf
[root@node01 kubernetes]#  rm -f ./scheduler.conf

二、 创建新证书及配置文件。

[root@node01 kubernetes]# cd ~/kubernetes/
[root@node01 kubernetes]# ls
config.yaml  kube-flannel.yml  kubernetes-dashboard.yaml
[root@node01 kubernetes]# pwd
/root/kubernetes
[root@node01 kubernetes]# kubeadm alpha phase certs all --config config.yaml   #生成证书  config.yaml是kubeadm init时候的配置参数
[root@node01 kubernetes]# kubeadm alpha phase certs apiserver-kubelet-client
[root@node01 kubernetes]# kubeadm alpha phase certs front-proxy-client

[root@node01 kubernetes]# kubeadm alpha phase kubeconfig all --config config.yaml # 生成配置文件
[root@node01 kubernetes]# systemctl restart kubelet  # 重启Kubelet、docker
[root@node01 kubernetes]# systemctl restart docker # 只要是重启kubernetes的相关组件

P.S: 如果有多台master 则把证书和配置文件拷贝过去重启kubernetes组件即可。

三、 查看证书日期、测试:

[root@node01 bin]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
            Not Before: May 18 07:34:20 2018 GMT
            Not After : May 19 04:23:55 2020 GMT

[root@node01 ~]# kubectl get node -o wide
NAME      STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
node01    Ready     master    1y        v1.10.2   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64       docker://17.3.2
node02    Ready     <none>    1y        v1.10.2   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64       docker://17.3.2
node03    Ready     <none>    1y        v1.10.2   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64       docker://17.3.2
node05    Ready     <none>    333d      v1.10.2   <none>        CentOS Linux 7 (Core)   3.10.0-862.3.3.el7.x86_64   docker://17.3.2
node06    Ready     <none>    318d      v1.10.2   <none>        CentOS Linux 7 (Core)   3.10.0-514.el7.x86_64       docker://17.3.2

关于ETCD集群的证书过期解决方案:

先备份数据(/var/lib/etcd/)
根据部署时候生成证书的步骤重新生成etcd证书,然后替换。

检查etcd的证书,发现etcd同样也过期了:

[root@node01 ssl]#  openssl x509 -in etcd.pem -noout -text |grep ' Not '
            Not Before: Oct  8 13:49:00 2020 GMT
            Not After : Oct  8 13:49:00 2020 GMT
[root@node01 ssl]# pwd
/etc/etcd/ssl

在替换证书之前先把etcd的数据备份一下

cd /var/lib
tar -zvcf etcd.tar.gz etcd/

创建新的证书

rm -rf /etc/etcd/ssl/*   #删除旧的证书
cd /root/ssl
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

cfssl gencert -ca=ca.pem \
  -ca-key=ca-key.pem \
  -config=ca-config.json \
  -profile=kubernetes-Soulmate etcd-csr.json | cfssljson -bare etcd

cp etcd.pem etcd-key.pem ca.pem /etc/etcd/ssl/
scp -r /etc/etcd/ssl/*.pem node02:/etc/etcd/ssl/
scp -r /etc/etcd/ssl/*.pem node03:/etc/etcd/ssl/

在查看证书时间

[root@node01 ssl]#  openssl x509 -in etcd.pem -noout -text |grep ' Not '
            Not Before: Oct  8 13:49:00 2020 GMT
            Not After : Oct  8 13:49:00 2021 GMT
[root@node01 ssl]# pwd
/etc/etcd/ssl
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101943.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大学四年嵌入式学习心得体会

    大学四年嵌入式学习心得体会我所在学校是普通的本科院校,从大一开始加入嵌入式实验室,一直在实验室呆了三年半,从大一的懵懂无知,天天看着C语言书自己敲代码,到后来学习51单片机,STM32,做过3-4个项目,参加各种比赛,轻轻松松搞定毕业设计。在此写的这篇Chat主要是针对大学学习嵌入式的童鞋的,嵌入式不容易学,牵扯的内容,知识点太多,你是否不知道如何下手呢?是否在迷茫为什么我学的这么吃力呢?下面作为过来人的我为您解…

    2022年6月12日
    28
  • 堆和栈的区别

    堆和栈的区别

    2021年5月10日
    100
  • Python如何将py文件打包成exe[通俗易懂]

    Python如何将py文件打包成exe[通俗易懂]安装pyinstaller打开cmd窗口,输入pipinstallpyinstaller,命令行输出successfully表示成功。生成exe文件一、单个py文件在py文件目录下,打开c

    2022年7月6日
    35
  • python进阶(8)多进程[通俗易懂]

    python进阶(8)多进程[通俗易懂]进程前置知识点进程:一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行

    2022年7月31日
    4
  • 高中四个基本不等式公式_高中数学基本不等式典型题

    高中四个基本不等式公式_高中数学基本不等式典型题高一数学要从掌握好基本知识点开始,并且要及时做好归纳总结。以下是小编为您整理的关于的相关资料,供您阅读。1.不等式性质比较大小方法:1作差比较法2作商比较法不等式的基本性质①对称性:a>bb>a②传递性:a>b,b>ca>c③可加性:a>ba+c>b+c④可积性:a>b,c>0ac&gt…

    2022年9月14日
    1
  • Java回调机制详解[通俗易懂]

    Java回调机制详解[通俗易懂]网上关于Java回调的文章一抓一大把,但是看完总是云里雾里,不知所云,特别是看到抓取别人的代码走两步时,总是现眼。于是自己决定写一篇关于Java机制的文章,以方便大家和自己更深入的学习Java回调机制。

    2022年6月17日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号