运维实战——Rancher生产环境TLS证书平滑更新

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

✅ 示例输出对比如下:

字段原证书新证书
notBeforeMay 13 08:08:45 2025 GMTAug  4 05:36:48 2025 GMT
notAfterAug 11 08:08:44 2025 GMTNov  2 05:36:47 2025 GMT
issuerGoogle Trust ServicesGoogle 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/2082.html

IT运维大爆炸的头像IT运维大爆炸

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部