Rancher UI控制台‘CN = dynamic’证书更新准确流程及Docker部署场景下证书替换失败问题求助
解决Docker单节点Rancher的Dynamic证书问题
我之前也遇到过类似的Docker单节点Rancher证书相关问题,结合实际操作经验,给你整理了针对性的解决方案:
一、正确替换自定义CA签名证书(解决重启后仍显示dynamic证书的问题)
你之前按官方文档操作没生效,大概率是漏掉了关键启动参数--no-cacerts,这个参数会强制Rancher使用你挂载的自定义证书,而不是内部生成的dynamic证书。完整步骤如下:
- 先停止并删除现有Rancher容器:
docker stop rancher docker rm rancher - 准备好你的证书文件,确保包含三个核心文件:
tls.crt:服务器证书(需包含完整证书链,从你的域名证书到根CA证书)tls.key:证书对应的私钥(权限需设为600,避免权限过高报错)ca.crt:签名该证书的CA根证书(如果是公网可信CA签名,此文件可省略,但建议保留)
- 创建证书挂载目录并复制文件:
mkdir -p /opt/rancher/certs cp tls.crt tls.key ca.crt /opt/rancher/certs/ chmod 600 /opt/rancher/certs/tls.key - 重新启动Rancher容器,务必加上
--no-cacerts参数:
启动完成后,刷新浏览器就能看到你的自定义证书生效了。docker run -d --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher/certs:/etc/rancher/ssl \ rancher/rancher:latest \ --no-cacerts
二、修复修改serving-cert导致的集群失联问题
直接修改local集群的serving-cert secret会破坏Rancher与K3s集群的通信信任链,按以下步骤恢复:
- 进入Rancher容器内部(容器自带配置好的kubectl,无需额外配置):
docker exec -it rancher sh - 删除被修改的
serving-certsecret,让Rancher重新生成:kubectl delete secret serving-cert -n cattle-system - 重启Rancher的集群代理组件,触发证书重建:
kubectl delete pods -n cattle-system -l app=cattle-cluster-agent kubectl delete pods -n cattle-system -l app=cattle-node-agent - 退出容器后重启Rancher容器:
等待几分钟后,Rancher UI就能重新连接到local集群了。exit docker restart rancher
三、更新CN=Dynamic证书的正确流程
如果不想使用自定义证书,只是想更新Rancher自动生成的dynamic证书(延长有效期),可以通过删除旧证书触发重新生成:
- 进入Rancher容器:
docker exec -it rancher sh - 删除dynamic证书相关的secret:
kubectl delete secret dynamiclistener-ca -n cattle-system kubectl delete secret serving-cert -n cattle-system - 重启Rancher核心组件和代理:
kubectl delete pods -n cattle-system -l app=rancher kubectl delete pods -n cattle-system -l app=cattle-cluster-agent kubectl delete pods -n cattle-system -l app=cattle-node-agent - 退出容器并重启Rancher:
重启完成后,Rancher会重新生成有效期为一年(部分新版本为3年)的dynamic证书,浏览器就能识别到新的证书信息了。exit docker restart rancher
内容的提问来源于stack exchange,提问作者asmoljo




