ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rancher证书过期X509:certificate has expired or is not ye valid

2020-07-25 21:01:56  阅读:1261  来源: 互联网

标签:lib certificate 证书 X509 ye server var rancher id


目录

有个课题一共10台服务器,运行一年了很稳定,没出过状况,我都以为结题了已经,突然通知说集群崩溃了让我看看。这个集群是用rancher自定义部署的,那叫一个快,半个多小时就弄好了。当时还暗喜了一把。结果处理起来真叫个费事儿,前前后后折腾了我10多个小时,网上搜搜资料,少的可怜,只看到一个帖子还是复制官方的,完全没讲清楚。(还是很感谢啦,至少有个思路。)言归正传,先总结一下经验,再说一下故事的脉络,最后贴具体的处理方案.

经验总结(ps:重要的事儿不复制三遍也要放前边)
1、rancher在2.2.x版本之前的,趁着集群能用赶快升级,并更新证书。老版本不支持这么牛XX的功能。
2、趁着集群能用,赶快备份。备份rancher-server的数据卷,备份etcd。
3、jenkins添加好pod的yaml文件备份。正所谓备份在手,天下我有。操作起来胆子也大,顺畅很多。
4、有问题查看docker-server的日志,还有master上的apiserver日志就好,其他日志别看。
出了问题这种分布式系统都是各报各的错,按照报错去解决的话可能越跑越偏。
5、只有rancher的自定义集群可以执行更新证书操作。导入的集群踏实的用kube的官方方法更新证书。

处理流程

  1. 登陆rancher的UI,服务器拒绝连接
  2. 登陆服务器,查看端口,容器,都正常
  3. 查看rancher_server日志,报错
    X509:certificate has expired or is not ye valid

  1. 检查证书有效期,确实过期了。很纳闷我的rancher版本是V2.2.5 按照官方的说法应该都是10年才对。
    rancher_server_id=2bec2b2068e2
    docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/ca.crt -noout -dates
    10年
    docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/localhost.crt -noout -dates
    1年
    openssl x509 -in /etc/kubernetes/ssl/kube-apiserver.pem -noout -dates
    apiserver服务器 10年

由此可判断是因为UI的ssl证书过期导致的,UI无法打开。另外此时集群也是不能用的,因为rancher的所有api请求和通信都是靠https请求完成的。

  1. 按照官方指导的"证书轮换"解决后,可以打开UI。操作方法往后翻。
  2. 登陆UI,集群不可用

  1. 接着查看rancher-server日志(基本废话,心急可以略过)
    error in remotedialer server [400]: read tcp 172.17.0.2:443->10.10.2.16:57064: i/o timeout

这个故障小,把对应服务器的agent重启一下就可以了。处理完后集群依旧不可用。依然有报错集群用户控制器认证失败

rancherserver宿主机执行kubectl get node报错
error: You must be logged in to the server (Unauthorized) rancher-server
Unable to connect to the server: x509: certificate signed by unknown authority kubectl-node

查看apiserver日志,token失效
Unable to authenticate the request due to an error: [invalid bearer token, Token has been invalidated, Post http://127.0.0.1:6440/v1/authenticate: dial tcp 127.0.0.1:6440: connect: connection refused

  1. 从UI执行更新证书,更新完成后,OK了,当时想着如果不能成就只剩下冒险升级rancher版本了。

  1. 中间有个小插曲,在处理过程中,etcd容器是挂掉的,查看日志,报错etcdserver: request timed out。解决这个故障的时候把 /var/lib/etcd 数据目录备份了一下,然后重启了etcd容器,解决调额。结果在执行步骤8的时候更新完证书,集群可用了之后打开工作负载,是空的是空的是空的。还好想起来这个事儿,把etcd目录恢复后,重新更新证书。

rancher证书轮换(心急直接看这里)

关于证书轮换,仔细看看官方文档
整理一下思路:

  • 2.2.x版本之前的,证书过期的先搞定UI,再备份(物理备份吧,官方备份不适合这种情况了),再升级,再更新证书。(如果集群证书已经过期,那么即使升级到 Rancher v2.0.14、v2.1.9 以及更高版本也无法轮换证书。rancher 是通过 Agent 去更新证书,如果证书过期将无法与 Agent 连接。)
  • 2.2.x版本的可以略过升级,其他同上。
  • 没过期的就不说,抓紧时间点更新证书。

操作:
第一步:

只在rancher-server和apiserver的宿主服务器上执行就好。
# 关闭ntp同步,不然时间会自动更新
timedatectl set-ntp false
# 修改节点时间
timedatectl set-time '2019-01-01 00:00:00'

第二步:
这块儿最好把时间改回现在的时间。localhost.crt这个就是管UI的证书,有效期一次就1年。时间改的太早重新生成的证书还是过期的。

rancher-server上执行
rancher_server_id=xxx

docker exec -ti ${rancher_server_id} mv /var/lib/rancher/management-state/tls/localhost.crt /var/lib/rancher/management-state/tls/localhost.crt-bak
docker exec -ti ${rancher_server_id} mv /var/lib/rancher/management-state/tls/localhost.key /var/lib/rancher/management-state/tls/localhost.key-bak
docker restart ${rancher_server_id}

第三步:
证书更新后,检查证书有效期没有过期的话,此时UI可以打开了

检查证书过期
docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/ca.crt -noout -dates
docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/localhost.crt -noout -dates

第四步:
如果是V2.2.x之前的版本,还需要升级到这个版本,我没操作这个。

第五步:
此时进到UI,集群是不可用状态的,执行:

完成。

检查证书有效期

rancher 证书位置在rancher-server容器内/var/lib/rancher/management-state/tls,可以进入容器检查。也可以在宿主机执行以下命令检查。
rancher-server上执行

rancher_server_id=xxx
docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/ca.crt -noout -dates
docker exec -ti ${rancher_server_id} openssl x509 -in /var/lib/rancher/management-state/tls/localhost.crt -noout -dates

标签:lib,certificate,证书,X509,ye,server,var,rancher,id
来源: https://www.cnblogs.com/zhaobowen/p/13378217.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有