证书过期导致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证书更新的解决方案
- 证书未过期
证书未过期时,rancher server可以正常运行。升级到Rancher v2.0.14+ 、v2.1.9+、v2.2.0+ 后会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书。所以独立容器运行的Rancher Server,只需在证书过期前把rancher版本升级到支持自动更新ssl证书的版本即可,无需做其他操作。 - 证书已过期
如果证书已过期,那么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集群和业务集群通用)两种方式,具体可以查看官方轮换证书具体方案
Comments | NOTHING