博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kubeadm证书/etcd证书过期处理
阅读量:812 次
发布时间:2019-03-24

本文共 3727 字,大约阅读时间需要 12 分钟。

今天突然测试环境的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]# lsconfig.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 wideNAME      STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIMEnode01    Ready     master    1y        v1.10.2   
CentOS Linux 7 (Core) 3.10.0-693.el7.x86_64 docker://17.3.2node02 Ready
1y v1.10.2
CentOS Linux 7 (Core) 3.10.0-693.el7.x86_64 docker://17.3.2node03 Ready
1y v1.10.2
CentOS Linux 7 (Core) 3.10.0-693.el7.x86_64 docker://17.3.2node05 Ready
333d v1.10.2
CentOS Linux 7 (Core) 3.10.0-862.3.3.el7.x86_64 docker://17.3.2node06 Ready
318d v1.10.2
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/libtar -zvcf etcd.tar.gz etcd/

创建新的证书

rm -rf /etc/etcd/ssl/*   #删除旧的证书cd /root/sslcfssl gencert -initca ca-csr.json | cfssljson -bare cacfssl gencert -ca=ca.pem \  -ca-key=ca-key.pem \  -config=ca-config.json \  -profile=kubernetes-Soulmate etcd-csr.json | cfssljson -bare etcdcp 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

转载地址:http://qkgkk.baihongyu.com/

你可能感兴趣的文章