暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

超稳攻略!Rancher 2.3手动轮换证书,保护集群安全!

Rancher 2020-10-30
476

11月14日(周六),2020年首场线下沙龙来咯!Rancher应用上云最佳实践、安信证券的DevOps转型之路还有凡泰极客CTO分享小程序+容器的落地实践,等你来听!


点击【阅读原文】或扫描下方二维码,即可免费报名!



前  言


Rancher 2.3正式发布已经一年,第一批使用Rancher 2.3的用户可能会遇到Rancher Server证书过期,但是没有自动轮换的情况。这会导致Rancher Server无法启动,并且日志出现报错:



请注意:

  1. Rancher Server无法启动不会影响下游集群,下游集群依然可以通过kubeconfig去操作。

  2. 以上情况只会在docker run启动或使用小于k3s v1.19用作local集群的Rancher上才会发生。


重现问题


为了让大家更好的理解这个问题,下面将以手动修改系统时间的形式来重现这个问题。


当前时间:2020年10月30日 星期五 10时37分59秒 CST


1、启动Rancher v2.3.1,并且添加下游集群,操作步骤可以参考官网:

  • https://docs.rancher.cn/docs/rancher2/installation/other-installation-methods/single-node-docker/_index/ 

  • https://docs.rancher.cn/docs/rancher2/cluster-provisioning/_index


2、启动Rancher 之后,从浏览器上查看到的过期时间:2021年10月30日 星期六 中国标准时间 10:29:35



3、查看Rancher Server容器内的K3s证书过期时间为 Oct 30 02:28:49 2021 GMT


    root@rancher1:~# docker exec -it rancher_server_id bash
    root@25c228f6a4c8:/var/lib/rancher# for i in `ls var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
    /var/lib/rancher/k3s/server/tls/client-admin.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/client-auth-proxy.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/client-ca.crt
    notAfter=Oct 28 02:28:49 2030 GMT
    /var/lib/rancher/k3s/server/tls/client-controller.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/client-kube-proxy.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/client-scheduler.crt
    notAfter=Oct 30 02:28:49 2021 GMT
    /var/lib/rancher/k3s/server/tls/request-header-ca.crt
    notAfter=Oct 28 02:28:49 2030 GMT
    /var/lib/rancher/k3s/server/tls/server-ca.crt
    notAfter=Oct 28 02:28:49 2030 GMT
    /var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt
    notAfter=Oct 30 02:28:49 2021 GMT


    4、将服务器时间调整为证书过期后5天的日期,比如:20211105


      root@rancher1:~# timedatectl set-ntp no
      root@rancher1:~# date -s 20211105
      Fri Nov 5 00:00:00 CST 2021
      root@rancher1:~# date
      Fri Nov 5 00:00:00 CST 2021


      此时,Rancher UI 已经无法访问:

      并且Rancher 容器由于内置的K3s证书过期而不断重启。


      手动轮换证书


      以上现象是因为Rancher Server内置的K3s证书过期,导致K3s无法启动,从而导致Rancher Server容器无法启动。


      为了可以继续操作Rancher Server容器,需要将系统时间调整到K3s证书过期之前。


        root@rancher1:~# date -s 20211025
        Mon Oct 25 00:00:00 CST 2021


        如果启动Rancher时未加--restart=unless-stopped参数,需要手动启动Rancher Server。


        接下来我们就可以进入到容器内手动删除K3s证书,然后重启Rancher,重启成功后将重新生成K3s证书。


          root@rancher1:~# docker exec -it rancher_server_id bash
          root@25c228f6a4c8:/var/lib/rancher# rm -rf var/lib/rancher/k3s/server/tls/*.crt
          root@25c228f6a4c8:/var/lib/rancher# exit
          exit
          root@rancher1:~# docker restart rancher_server_id


          Rancher Server如果出现以下日志,那么需要再重启一次Rancher Server:


            2021/10/24 16:01:00 [INFO] Waiting for server to become available: Get https://localhost:6443/version?timeout=30s: x509: certificate signed by unknown authority


            验  证


            1、将服务器时间再次调整为证书过期后5天的日期,比如:20211105


              root@rancher1:~# date -s 20211105
              Fri Nov 5 00:00:00 CST 2021


              证书更新之后,我们需要确认K3s证书是否更新成功,还需要检查下游集群是否会有影响。


              2、确认K3s证书已经更新


                root@rancher1:~# docker exec -it rancher_server_id bash
                root@25c228f6a4c8:/var/lib/rancher# for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
                /var/lib/rancher/k3s/server/tls/client-admin.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/client-auth-proxy.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/client-ca.crt
                notAfter=Oct 22 16:00:54 2031 GMT
                /var/lib/rancher/k3s/server/tls/client-controller.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/client-kube-proxy.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/client-scheduler.crt
                notAfter=Oct 24 16:00:54 2022 GMT
                /var/lib/rancher/k3s/server/tls/request-header-ca.crt
                notAfter=Oct 22 16:00:54 2031 GMT
                /var/lib/rancher/k3s/server/tls/server-ca.crt
                notAfter=Oct 22 16:00:54 2031 GMT
                /var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt
                notAfter=Oct 24 16:00:54 2022 GMT


                K3s证书过期时间已经从Oct 30 02:28:49 2021 GMT更新到了Oct 24 16:00:54 2022 GMT


                3、确认浏览器证书已经更新


                浏览器上的证书过期已经从2021年10月30日 星期六 中国标准时间 10:29:35更新到了2022年10月25日 星期二 中国标准时间 00:01:34



                4、确认下游集群不受影响


                • 集群状态为Active



                • 检查集群 Pod 的运行状况 



                后  记


                从Rancher 2.3开始,Rancher Server容器中内置了K3s作为local集群来支撑Rancher Server运行。


                而K3s内部自动签发的证书有效期是1年,正常情况下如果证书已过期或剩余的时间少于90天,则在重新启动K3s时将轮换证书。参考官方文档:

                https://docs.rancher.cn/docs/k3s/advanced/_index


                实际上由于K3s的bug导致在证书已过期或剩余的时间少于90天时重启Rancher,没有将K3s证书轮换,所以才会出现上述问题。


                不过无需担心,在后续的K3s v1.19版本中已经解决了这一问题,请参考:

                https://github.com/rancher/k3s/commit/a2471a1f8a2aa26902f8e3b29624dc9c809024d2


                推荐阅读

                11月14日 深圳丨“企业云原生的探索与落地”技术沙龙

                14款备受好评的开源监控工具

                Kubernetes服务类型浅析:从概念到实践

                About Rancher Labs


                Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。


                目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。

                点击【阅读原文】,报名线下活动,掌握应用上云的最佳实践!

                文章转载自Rancher,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论