证书过期导致Rancher无法打开UI的问题


证书过期导致Rancher无法打开UI的问题

安装了单节点Rancher,运行了一整年。不得不说Rancher真的很稳定同时极大解放了部署和运维工作,不需要再在跑脚本,所有操作通过UI点点按钮就搞定。以至于运行了一年都忘了更新证书,导致UI无法正常访问。


通过docker logs命令查看容器日志,发现一直报[info] Waiting on etcd startup: Get https://localhost:2379/health: x509: certificate has expired or is not yet valid的错误,很明显是证书过期了。

我这里的Rancher的版本为v2.1.6

查看官方文档,官方已经给出了解决思路。官方地址

官方关于独立容器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+ 也可能会提示证书错误。如果出现这种情况,可通过以下操作进行处理:

正常升级rancher版本到v2.0.14+ 、v2.1.9+、v2.2.0+;

执行以下命令:

docker exec c -ti <rancher_server_id> mv /var/lib/rancher/management-state/certs/bundle.json /var/lib/rancher/management-state/certs/bundle.json-bak

docker restart <rancher_server_id>

升级

因为我这里的Rancher版本为v2.1.6,所以升级到v2.0.0+,官方升级文档

1. 先决条件
从v2.0.7开始,Rancher引入了system项目,该项目是自动创建的,用于存储Kubernetes需要运行的重要命名空间。在升级到v2.0.7+前,请检查环境中有没有创建system项目,如果有则删除。并检查确认所有系统命名空间未分配到任何项目下,如果有则移到出去,以防止集群网络问题。

2. 升级步骤

注意: 打开Rancher web并记下浏览器左下方显示的版本号(例如:v2.0.0) ,在升级过程中您需要此版本号

(可选)如果您无法找到之前运行rancher server的docker run命令,可通过以下命令找会执行命令。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
     registry.cn-shanghai.aliyuncs.com/rancher/run-config <rancher_container_name>

运行以下命令,停止当前运行Rancher Server的容器

docker stop <RANCHER_CONTAINER_ID>

提示: 您可以输入docker ps命令获取Rancher容器的ID

创建当前Rancher Server容器的数据卷容器,以便在升级Rancher Server中使用,命名为rancher-data容器。

替换<RANCHER_CONTAINER_ID>为上一步中的容器ID。
替换<RANCHER_CONTAINER_TAG>为您当前正在运行的Rancher版本,如上面的先决条件中所述。

docker create --volumes-from <RANCHER_CONTAINER_ID> \
--name rancher-data rancher/rancher:<RANCHER_CONTAINER_TAG>

# 例子
docker create --volumes-from b750bbbcfd88  \
--name rancher-data rancher/rancher:v2.1.6

创建rancher-data数据卷容器的备份容器

如果升级失败,可以通过此备份还原Rancher Server,容器命名:rancher-data-snapshot-<CURRENT_VERSION>.

替换<RANCHER_CONTAINER_ID>为上一步中的容器ID。
替换<CURRENT_VERSION>为当前安装的Rancher版本的标记。
替换<RANCHER_CONTAINER_TAG>为当前正在运行的Rancher版本,如先决条件中所述 。

docker create --volumes-from <RANCHER_CONTAINER_ID> \
--name rancher-data-snapshot-<CURRENT_VERSION> rancher/rancher:<RANCHER_CONTAINER_TAG>

# 例子
docker create --volumes-from b750bbbcfd88   \
--name rancher-data-snapshot-v2.1.6 rancher/rancher:v2.1.6

拉取Rancher的最新镜像。

docker pull rancher/rancher:stable (或者rancher/rancher:latest)

注意 如果您正在进行离线升级,请在运行docker run命令时将您的私有镜像仓库URL添加到镜像名中

例如: <registry.yourdomain.com:port>/rancher/rancher:stable (或者rancher/rancher:latest)

通过rancher-data数据卷容器启动新的Rancher Server容器。

docker run -d --volumes-from rancher-data --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable (或者rancher/rancher:latest)

注意: 升级过程会需要一定时间,不要在升级过程中终止升级,强制终止可能会导致数据库迁移错误。

升级Rancher Server后,server容器中的数据会保存到rancher-data容器中,以便将来升级。

删除旧版本Rancher Server容器

如果您只是停止以前的Rancher Server容器(并且不删除它),则旧版本容器可能随着主机重启后自动运行,导致容器端口冲突。

登录rancher,通过检查浏览器左下角显示的版本,确认是否升级成功。

注意: 如果升级未成功完成,则可以将Rancher Server及其数据恢复到上一个健康状态。有关更多信息,请查阅单节点恢复

很对同学对例子给出的RANCHER_CONTAINER_ID、RANCHER_CONTAINER_TAG、RANCHER_VERSION不是很清楚,下面表格列出了详细描述和例子

至此集群已经可以访问,接下来需要轮换证书。

轮换证书

默认情况下,Kubernetes集群使用ssl证书来加密通信,Rancher自动为集群生成证书。在Rancher v2.0.14、v2.1.9之前的版本,Rancher创建的集群ssl证书默认有效期为1年(CA证书默认10年),在Rancher v2.0.14、v2.1.9以及更高的版本中,Rancher创建的集群ssl证书默认为10年(CA证书默认10年)。

对于使用Rancher v2.0.14、v2.1.9之前版本安装的Kubernetes集群,证书即将到期,请尽快更新集群证书。

通过UI轮换证书(业务集群)

可用版本: Rancher v2.2.0 +

在Rancher v2.2.0以及更高版本,可通过UI的证书轮换功能对集群证书进行更新,此功能适用于自定义安装的集群。

证书轮换之后,Kubernetes组件将自动重新启动,重启不影响应用Pod,重启时间需要3到5分钟。

  • 证书轮换可用于下列服务:

    • etcd
    • kubelet
    • kube-apiserver
    • kube-proxy
    • kube-scheduler
    • kube-controller-manager
  • 通过UI轮换证书,目前支持:

    • 批量更新所有服务证书(CA证书不变)
    • 更新某个指定服务(CA证书不变)

1. (重要)集群更新

如果Rancher版本是从v2.x.x升级到2.2.x,则需要先做一次集群更新操作。
1.1 进入全局\集群视图;

1.2 选择目标集群右侧的省略号菜单,选择升级;
1.3 点击右侧显示高级选项,检查ETCD备份轮换功能是否开启,建议开启此功能;

1.4 在授权集群访问地址中,检查功能是否已开启,建议开始此功能,下边的域名可以不用填写

1.5 最后点击保存,集群将自动进行更新

2. 轮换证书

2.1 进入全局\集群视图;
2.2 选择对应集群右侧的省略号菜单,选择更新证书有效期;

2.3 选择更新所有服务证书,并点击保存


2.4 集群将自动更新证书
2.5 因为证书改变,相应的token也会变化,在集群证书更新完成后,需要对连接API SERVER的Pod进行重建,以获取新的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

除了可以通过UI轮换证书,官方还提供了通过UI API轮换证书(业务集群)和RKE 证书轮换(local集群和业务集群通用)两种方式,具体可以查看官方轮换证书具体方案

至此已经完成轮换证书,如果出现个别pod无法启动,可以尝试重新安装pod。如果k8s的node节点无法更新状态,可以尝试重启node节点的物理机。一定要注意版本以及做好备份。

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 证书过期导致Rancher无法打开UI的问题


愿你勿忘初心,并从一而终