Rancher2.3 证书过期问题处理
Posted ZhuOne
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rancher2.3 证书过期问题处理相关的知识,希望对你有一定的参考价值。
rancher单机部署,版本 v2.3.5 出现无法访问且无法重启问题,查看日志报错以下内容:
time="2021-03-29T00:28:18.603256144Z" level=fatal msg="starting tls server: Get https://localhost:6444/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions: x509: certificate has expired or is not yet valid"
证书过期问题导致
两种处理方案:
第一种:
1、先禁用 ntp 时钟同步:timedatectl set-ntp false
2、调整时间到证书过期前:date -s "xxxxx"
3、进入rancher容器,手动删除证书:docker exec -it ${rancher_server_id} bash
mv /var/lib/rancher/k3s/server/tls/*.crt /opt/.
4、重启rancher容器
docker restart ${rancher_server_id}
5、如果rancher启动后报错:certificate signed by unknown authority,需要再重启一次rancher
docker restart ${rancher_server_id}
6、浏览器地址栏查看证书时间已调整后,启动 ntp 服务,timedatectl set-ntp true,,,,ntpdate ntp.xxxx.com
第二种:
1、此问题为rancher 2.3 版本及之前存在,v2.4 后已修复,对 rancher server 进行版本升级即可解决。
Rancher 轮换证书 和 Rancher 自身证书过期处理
概述
本文所述 “证书” 分为 “Rancher 自身证书” 和 “Rancher 启动的 Kubernetes 的证书” 两种。
默认情况下,Kubernetes 集群所需要的证书由 Rancher 生成,如果出现证书过期,或证书泄露等情况,则需要使用新的证书轮换掉有问题的证书。轮换证书后,Kubernetes 组件将自动重新启动。
以下服务支持证书轮换:
- etcd
- kubelet
- kube-apiserver
- kube-proxy
- kube-scheduler
- kube-controller-manager
警告:轮换 Kubernetes 证书可能会导致集群在重新启动组件时暂时不可用。对于生产环境,建议在维护时段内执行此操作。
为 K8s 轮换证书
通过 Rancher 启动的 Kubernetes 集群(RKE 集群)能够通过 UI 轮换自动生成的证书。
在全局视图中,导航到要轮换证书的集群》选择省略号(…)》 轮换证书》选择要轮换的证书。
- 轮换所有服务证书(保持相同的 CA)
- 轮换单个服务,然后从下拉菜单中选择一项服务
最后单击保存。
结果:所选证书将被轮换,相关服务将重新启动以开始使用新证书。
注意: 尽管 RKE CLI 可以为 Kubernetes 集群组件使用自定义证书,但目前 Rancher 不支持在 Rancher UI 中创建 RKE 集群时上传这些证书。
因为证书改变,相应的token也会变化,所以在完成集群证书更新后,需要对连接API SERVER的 Pod 进行重建,以获取新的token,否则会出现服务启动失败的情况(日志会显示 token 错误等类似信息,有的服务可能不会显示,请跟进实际情况处理)。
- cattle-system/cattle-cluster-agent
- cattle-system/cattle-node-agent
- cattle-system/kube-api-auth ingress-nginx/nginx-ingress-controller
- kube-system/canal kube-system/kube-dns
- kube-system/kube-dns-autoscaler
- 其他应用 Pod
独立容器 Rancher 证书过期
正常情况下,Rancher 需要和 K8s 集群交互,K8s 集群中有 agent 需要和 Rancher 通讯,如果 Rancher 自身的证书已经过期,则会出现无法通讯的情况,在 UI 上体现的症状就是 k8s 集群出现错误提示无法被管理。
官方文档说:对于 v2.2.2+ 以后的 Rancher 它会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书。
不巧的是我独立容器运行的 Rancher 并没有自动为我更新证书,所以出现了错误,这里特别说一下证书已经过期后的处理方法。
1、将服务器的时间往后调,调到证书有效期之内。
2、docker exec 进入 rancher 容器,然后执行如下命令。
kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving
kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system
rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json
3、退出 docker 容器命令行,重启 rancher 容器 docker restart <rancher_server_id>
4、执行命令刷新参数 curl --insecure -sfL https://server-url/v3
5、再重启 rancher 容器 docker restart <rancher_server_id>
6、恢复并校准服务器时间。
官方文档: https://docs.rancher.cn/docs/rancher2/trending-topics/certificate-rotation/_index/
(END)
以上是关于Rancher2.3 证书过期问题处理的主要内容,如果未能解决你的问题,请参考以下文章
2018-02-08 HTTPS证书问题、PKIX或者证书过期问题解决方案