如何通过Rancher搭建K8s集群请参考通过Rancher搭建k8s集群,这里继续介绍Rancher如何轮换证书

证书轮换

参考Rancher官网:https://docs.rancher.cn/docs/rancher2/cluster-admin/certificate-rotation/_index/#升级较旧的-rancher-版本后轮换过期的证书

参考Rancher官网:https://docs.rancher.cn/docs/rke/cert-mgmt/_index/

默认情况下,Kubernetes 集群所需要的证书由 Rancher 生成,默认有效期1年,如果出现证书过期,或证书泄露等情况,则需要使用新的证书轮换掉有问题的证书。轮换证书后,Kubernetes 组件将自动重新启动。

1 证书过期无法访问Rancher UI

由于刚安装的k8s集群有效期为1年,不变模拟证书过期场景,这里找了一个本地环境之前安装的k8s集群(Rancher v2.2.4)且已经过期了。

如果集群证书已经过期,那么即使升级到Rancher v2.0.14、v2.1.9以及更高版本也无法轮换证书。rancher 是通过Agent去更新证书,如果证书过期将无法与Agent连接。

在这里插入图片描述

这种情况可以手动进行时钟回拨,因为Agent只与K8S master和Rancher Server通信
如果 Rancher Server 证书未过期,那就只需调整K8S master节点时间

# 关闭时钟同步,否则时间会自动更新
[root@master kubernetes]# timedatectl set-ntp false
[root@master kubernetes]# timedatectl set-time "2020-06-18 11:26:44"
[root@master kubernetes]# 

可以正常访问了

在这里插入图片描述

2 证书轮换

轮换 Kubernetes 证书可能会导致集群在重新启动组件时暂时不可用。对于生产环境,建议在维护时段内执行此操作。

2.1 Rancher v2.2.x 中的证书轮换

Rancher 启动的 Kubernetes 集群(RKE 集群)能够通过 UI 轮换自动生成的证书
在这里插入图片描述

可以选择更新单个服务或者更新所有服务(CA证书不变),这里选择更新所有服务。相关服务将重新启动以开始使用新证书。
在这里插入图片描述

查看证书有效期(已经到2030年了)

[root@master ~]# openssl x509 -in /etc/kubernetes/ssl/kube-apiserver.pem -noout -dates
notBefore=Jul 11 07:53:35 2019 GMT
notAfter=Dec  9 06:42:50 2030 GMT
[root@master ~]# 

重新进行时钟同步

[root@master ~]# timedatectl set-ntp yes
[root@master ~]# timedatectl
      Local time: 三 2020-12-23 12:04:53 CST
  Universal time: 三 2020-12-23 04:04:53 UTC
        RTC time: 三 2020-12-23 04:04:53
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@master ~]# 

2.2 更新Rancher Server 证书

貌似更新成功,可以正常访问了,但是过一会儿又会出现无法访问Rancher UI,查看rancher容器日志,还会发现如下error

[root@master ~]# docker ps |grep rancher/rancher:v2.2.4
a50f79e670c4        rancher/rancher:v2.2.4                                                                                                             "entrypoint.sh"          17 months ago       Up 6 months         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   sleepy_newton
[root@master ~]# docker logs a50f79e670c4
······
[ERROR] ClusterController c-x4x9w [user-controllers-controller] failed with : failed to start user controllers for cluster c-x4x9w: failed to contact server: Get https://192.168.x.X:6443/version?timeout=30s: waiting for cluster agent to connect
······

这里还需要更新Rancher Server 证书

  • 证书未过期

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

  • 证书已过期

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

  • 2.0 或 2.1 版本
docker exec -ti <rancher_server_容器ID> mv /var/lib/rancher/management-state/certs/bundle.json /var/lib/rancher/management-state/certs/bundle.json-bak
  • 2.2 +
docker exec -ti <rancher_server_容器id> mv /var/lib/rancher/management-state/tls/localhost.crt /var/lib/rancher/management-state/tls/localhost.crt-bak
  • 2.3 +
docker exec -ti <rancher_server_id> mv /var/lib/rancher/k3s/server/tls /var/lib/rancher/k3s/server/tlsbak
# 执行两次,第一次用于申请证书,第二次用于加载证书并启动
docker restart <rancher_server_容器id>

3、重启 Rancher Server 容器

docker restart <rancher_server_容器id>

以2.2.4版本为例

[root@master ~]# docker exec -ti a50f79e670c4  mv /var/lib/rancher/management-state/tls/localhost.crt /var/lib/rancher/management-state/tls/localhost.crt-bak
[root@master ~]# docker restart a50f79e670c4
a50f79e670c4
[root@master ~]# 

这下终于可以正常访问Rancher UI了
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐