1、简介
在生产环境中,Rancher 作为 Kubernetes 的管理平台,其 Web UI 依赖 TLS 证书进行 HTTPS 加密通信。本文将详细介绍如何在不重启集群的情况下平滑替换 Rancher 的 TLS 证书,并确保服务稳定运行。
2、场景说明
目标平台:Rancher 部署在 Kubernetes 集群中。
命名空间:cattle-system
证书来源:手动更新的 *.cn.megaspeed.tech 域名证书。
替换方式:通过更新 Kubernetes Secret,触发 Rancher 自动重新加载证书。
3、 证书准备
你应准备好以下两个文件:
fullchain.cer:新证书(含完整链)
_.cn.megaspeed.tech.key:对应的私钥文件
确认证书有效性(可选):
/opt/cert-manager ❯ openssl x509 -in fullchain.cer -noout-subject-issuer-dates
subject=CN = *.cn.megaspeed.tech
issuer=C = US, O = Google Trust Services, CN = WR1
notBefore=May 1308:08:45 2025 GMT
notAfter=Aug 1108:08:44 2025 GMT
4、备份
kubectl get secret tls-rancher-ingress -n cattle-system -o yaml > backup-tls-secret.yaml
滚动重启 Rancher 后建议等待 1~2 分钟验证 UI 是否正常加载。
5、创建 TLS Secret(带覆盖)
使用 kubectl create secret 命令进行 dry-run 并 apply:
kubectl create secret tls tls-rancher-ingress \
–cert=fullchain.cer \
–key=_.cn.megaspeed.tech.key \
-n cattle-system \
–dry-run=client -o yaml | kubectl apply -f –
这样会以 YAML 形式生成 Secret 并立即应用,确保不会破坏现有资源的元数据(如 labels、annotations 等)。
6、验证 Secret 更新
原证书
/opt/cert-manager-xin ❯ kubectl get secret tls-rancher-ingress -n cattle-system -ojsonpath=”{.data.tls.crt}” | base64 -d | openssl x509 -noout-subject-issuer-dates
subject=CN = *.cn.megaspeed.tech
issuer=C = US, O = Google Trust Services, CN = WR1
notBefore=May 1308:08:45 2025 GMT
notAfter=Aug 1108:08:44 2025 GMT
替换完成后,检查当前已生效的证书内容
/opt/cert-manager-xin ❯ kubectl get secret tls-rancher-ingress -n cattle-system -ojsonpath=”{.data.tls.crt}” | base64 -d | openssl x509 -noout-subject-issuer-dates
subject=CN = *.cn.megaspeed.tech
issuer=C = US, O = Google Trust Services, CN = WR1
notBefore=Aug 405:36:48 2025 GMT
notAfter=Nov 205:36:47 2025 GMT
✅ 示例输出对比如下:
字段 原证书 新证书
notBefore May 13 08:08:45 2025 GMT Aug 4 05:36:48 2025 GMT
notAfter Aug 11 08:08:44 2025 GMT Nov 2 05:36:47 2025 GMT
issuer Google Trust Services Google Trust Services
证书内容成功变更,说明 Secret 替换完成
7、滚动重启
为使证书生效,需重启 Rancher Deployment 服务
kubectl rollout restart deployment rancher -n cattle-system
随后可以通过以下命令观察 Pod 启动状态
/opt/cert-manager-xin ? kubectl get pod -n cattle-system -w
NAME READY STATUS RESTARTS AGE
rancher-54bf5cff98-6z9pd 1/1 Running 0 37d
rancher-54bf5cff98-lcktj 1/1 Running 1 (33d ago) 37d
rancher-587d5cb4d6-2kpqn 0/1 Running 0 4s
rancher-587d5cb4d6-bv42d 0/1 Running 0 4s
rancher-webhook-57f8d47c95-pk975 1/1 Running 1 (36d ago) 37d
system-upgrade-controller-6689f94f8c-7q6bt 1/1 Running 2 (33d ago) 37d
rancher-587d5cb4d6-bv42d 0/1 Running 0 11s
rancher-587d5cb4d6-2kpqn 0/1 Running 0 11s
rancher-587d5cb4d6-2kpqn 1/1 Running 0 11s
rancher-54bf5cff98-6z9pd 1/1 Terminating 0 37d
rancher-587d5cb4d6-r5jrs 0/1 Pending 0 0s
rancher-587d5cb4d6-r5jrs 0/1 Pending 0 0s
rancher-587d5cb4d6-r5jrs 0/1 ContainerCreating 0 0s
rancher-587d5cb4d6-bv42d 1/1 Running 0 11s
rancher-54bf5cff98-lcktj 1/1 Terminating 1 (33d ago) 37d
rancher-587d5cb4d6-r5jrs 0/1 ContainerCreating 0 0s
rancher-54bf5cff98-6z9pd 1/1 Terminating 0 37d
rancher-54bf5cff98-6z9pd 0/1 Error 0 37d
rancher-54bf5cff98-lcktj 1/1 Terminating 1 (33d ago) 37d
rancher-54bf5cff98-lcktj 0/1 Error 1 (33d ago) 37d
rancher-54bf5cff98-6z9pd 0/1 Error 0 37d
rancher-54bf5cff98-6z9pd 0/1 Error 0 37d
rancher-587d5cb4d6-r5jrs 0/1 Running 0 1s
rancher-54bf5cff98-lcktj 0/1 Error 1 (33d ago) 37d
rancher-54bf5cff98-lcktj 0/1 Error 1 (33d ago) 37d
rancher-587d5cb4d6-r5jrs 0/1 Running 0 10s
rancher-587d5cb4d6-r5jrs 1/1 Running 0 10s
观察输出
旧的 Pod(如 rancher-54bf5cff98-*)进入 Terminating 状态
新的 Pod(如 rancher-587d5cb4d6-*)创建并启动成功
确保所有新 Pod 1/1 Running 即表示服务恢复。
8、总结
本次操作完成了 Rancher 的 TLS 证书平滑替换流程,过程包括:
证书文件准备与验证
安全地更新 Kubernetes Secret
检查证书是否正确加载
滚动重启 Rancher 服务以应用新证书
这种方法适用于所有基于 Ingress/Secret 的 TLS 服务证书更新,具有最小化中断的优势。
✨ 只写原创,不接广告,不接广告,不接广告。
在这里,你将看到全新的技术分享、运维经验、以及最新的行业动态。我们坚信,原创内容才是最有价值的资源,所以所有文章都是独立创作,与你们一起成长。
声明:来自IT运维大爆炸,仅代表创作者观点。链接:https://eyangzhen.com/2062.html