rancher证书到期处理

小丫2年前技术文章3104

问题描述:

rancher证书到期,需要更新rancher证书

问题处理:

基础环境信息:

rancher版本: rancher:v2.4.3

image.png


官方关于独立容器Rancher Server证书更新的解决方案:

1)证书未过期
证书未过期时,rancher server可以正常运行。升级到Rancher v2.0.14+ 、v2.1.9+、v2.2.0+ 后会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书。所以独立容器运行的Rancher Server,只需在证书过期前把rancher版本升级到支持自动更新ssl证书的版本即可,无需做其他操作。


2)证书已过期
如果证书已过期,那么rancher server无法正常运行。即使升级到Rancher v2.0.14+ 、v2.1.9+、v2.2.0+ 也可能会提示证书错误。如果出现这种情况,可通过以下操作进行处理:


1、查看当前rancher证书签发以及到期时间,可以使用如下命令:

for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -startdate -enddate -noout -in $i; done

2、修改主机时间为证书到期之前(这样可以保证rancher容器正常运行)


3、删除rancher老证书

把racher 存放证书文件的tls下文件,全部清空


4、重启容器

会发现存放的证书文件已经正常重新生成了一份。

此时再次进入容器查看,会发现证书会以当前宿主机时间为准,宿主机当前时间为2022年01月01号,普通证书证书自动重新签发了一张,到期时间为2023年12月31号。这里为什么强调是普通证书呢?其实,仔细和之前的证书到期时间做比对,就会发现根证书并没有更新。

普通证书到期时间如下:

/var/lib/rancher/k3s/server/tls/client-admin.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-ca.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=May 30 14:55:15 2031 GMT

/var/lib/rancher/k3s/server/tls/client-cloud-controller.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-controller.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-k3s-controller.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-kube-proxy.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/client-scheduler.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=Dec 31 16:00:13 2023 GMT

根证书到期时间如下:

/var/lib/rancher/k3s/server/tls/server-ca.crt

notBefore=Jun 1 14:55:15 2021 GMT

notAfter=May 30 14:55:15 2031 GMT

5、此时测试访问rancher服务会发现服务依然还是异常状态,并且容器还在不停的刷证书异常的日志:

E0601 14:02:44.488091 32 reflector.go:153] k8s.io/client-go/informers/factory.go:135: Failed to list *v1.Node: Get https://127.0.0.1:6444/api/v1/nodes?limit=500&resourceVersion=0: x509: certificate has expired or is not yet valid

2021-06-01 14:02:44.490508 I | http: TLS handshake error from 127.0.0.1:38110: remote error: tls: bad certificate

2021-06-01 14:02:44.491995 I | http: TLS handshake error from 127.0.0.1:38134: remote error: tls: bad certificate

2021-06-01 14:02:44.492045 I | http: TLS handshake error from 127.0.0.1:38132: remote error: tls: bad certificate

E0601 14:02:44.493246 32 reflector.go:153] k8s.io/client-go/informers/factory.go:135: Failed to list *v1.MutatingWebhookConfiguration: Get https://127.0.0.1:6444/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations?limit=500&resourceVersion=0: x509: certificate has expired or is not yet valid

E0601 14:02:44.493595 32 reflector.go:153] k8s.io/client-go/informers/factory.go:135: Failed to list *v1.Endpoints: Get https://127.0.0.1:6444/api/v1/endpoints?limit=500&resourceVersion=0: x509: certificate has expired or is not yet valid

进行server容器内,kubectl访问k3s也提示证书无效

image.png

进一步挽救前,先了解k3s api。k3s API本身启用6443端口,k3s内置的kube api-server启动6444端口,相当于在6443端口扩展了额外的k3s API,同时有将面向k8s api的请求转发给6444 kube-api-server端口。目前kube api-server端口的证书已经轮转,但是前面的6443端口的证书没有轮转,导致了server依然无法使用k3s api。挽救方式如下:

进入rancher容器,然后输入以下命令:

kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving


rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json

执行结果如下:

image.png

然后重启rancher容器,k3s-serving证书也会自动轮转,k3s api已经可用,server中不会出现证书过期的提示。

再次进入容器,验证:

image.png

然而,其实我们只解决了k3s api和kube api-server的证书问题,rancher api的证书其实还是过期的:

下面表格中列出了调用链路上的各个证书,Rancher API(tls-rancher secret)的CA证书是10年,这里没有列出:

证书

存放形式

作用

Rancher API证书

kubectl get secret serving-cert -n cattle-system;

Golang runtime 内存中;

浏览器中访问Rancher;

Rancher Agent访问连接Rancher Server

K3S API证书

kubectl get secret k3s-serving -n kube-system

/var/lib/rancher/k3s/server/tls/dynamic-cert.json

访问k3s api时校验

Kube API证书

/var/lib/rancher/k3s/server/tls/ 目录下各种证书

K3s api转发给kube api时校验

由于Rancher API证书在内存和secret中储存,且内存是优先访问。当我们希望Rancher重新生成其API证书,通过删除serving-cert secret后,Rancher API证书依然是持续工作的,此时使用内存中的保留证书。删除serving-cert secre后再重启rancher,才能确保生产新的Rancher API证书。

输入如下命令:

kubectl delete secret serving-cert -n cattle-system


docker restart <xxx>

此时证书重新生成,我们可以拿到一个有效期合理的证书。rancher恢复正常访问


相关文章

Kubernetes日志收集

Kubernetes日志收集

关于容器日志Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内...

hive 报 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

hive 报 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

解决办法:关键需要配置两个配置:mapred-site.xml 和 yarn-site.xml下面配置hadoop classpath。先运行shell命令:hadoop classpath添加一个配...

元数据管理

元数据管理

一、元数据概念元数据是关于数据的数据,主要用于跟踪、分类和分析。元数据大致定义为提供有关其他内容的信息的数据,但不提供有关数据实质的信息,例如图片本身或文本消息的内容。它可以帮助用户理解数据的含义,对...

大数据平台袋鼠云托管运维与自建集群运维对比

对比维度袋鼠云托管运维自建hadoop集群运维成本根据业务需求定制架构,预估业务增涨合理规划,低成本高性价比需自行预估资源,规划架构性能大量集群优化经验,根据业务需求进行点对点优化采用开源社区版本,性...

REPMGR-PG高可用搭建(一)

REPMGR-PG高可用搭建(一)

PG高可用对比数据库复制的术语和定义这些术语和定义应该有助于讨论复制。在与其他Postgres开发人员进行了大量讨论之后,我编译了它们,但是这些定义应该是普遍可用的,并且也应该适用于其他RDBMS。复...

flink获取taskmanager的pstree信息

flink获取taskmanager的pstree信息

使用pstree –p 进程号 的方式能够获取taskmanager的pstree信息,这个地方提供一个收集脚本。内容如下:#!/bin/bashsearchPID() {   l...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。