1. Rancher证书更新全流程解析
在Kubernetes集群管理工具中,Rancher作为一款流行的开源平台,其证书管理是运维工作中的关键环节。当Rancher的SSL证书过期或需要更换时,正确的操作流程至关重要。以下是经过生产环境验证的标准操作流程。
1.1 准备工作与环境检查
在执行证书更新前,建议先完成以下准备工作:
-
备份关键数据:
- 备份Rancher的PostgreSQL数据库(如果使用外部数据库)
- 备份
/var/lib/rancher目录 - 记录当前运行的容器ID和状态
-
检查证书状态:
bash复制
openssl s_client -connect your.rancher.domain:443 -servername your.rancher.domain | openssl x509 -noout -dates这会显示当前证书的有效期,确认是否确实需要更新。
-
准备新证书:
- 确保新证书文件(通常包含.crt和.key文件)已准备好
- 验证证书链完整性:
bash复制
openssl verify -CAfile ca_bundle.crt your_domain.crt
1.2 证书更新核心步骤
以下是详细的证书更新流程:
-
进入Rancher Server容器:
bash复制docker exec -ti rancher_server_container_id /bin/bash -
删除旧证书Secret:
bash复制
kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system -
清理动态证书文件:
bash复制rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json -
首次重启容器:
bash复制
docker restart rancher_server_container_id -
验证证书加载:
在容器内执行:bash复制
curl --insecure -sfL https://your.rancher.domain/v3应该返回API响应而非证书错误。
-
最终重启容器:
bash复制
docker restart rancher_server_container_id
2. 关键操作原理解析
2.1 证书管理机制
Rancher使用多层证书体系:
- k3s-serving:K3s集群层面的证书
- serving-cert:Rancher应用层面的证书
- dynamic-cert.json:动态生成的证书缓存文件
删除这些资源会触发Rancher的证书自动生成机制,使用新配置的证书重新创建这些资源。
2.2 为什么需要两次重启
-
第一次重启:
- 清除旧证书的缓存
- 初始化新证书的加载环境
-
中间验证:
- 确保新证书被正确识别
- 检查是否有配置错误
-
第二次重启:
- 应用所有配置变更
- 确保所有组件使用新证书
3. 高级配置与自定义证书
3.1 使用自定义证书
如果需要使用自己的证书而非自动生成的:
-
准备证书文件:
tls.crt:证书链文件tls.key:私钥文件
-
创建Secret:
bash复制
kubectl -n cattle-system create secret tls tls-rancher-ingress \ --cert=tls.crt \ --key=tls.key -
更新Ingress配置:
yaml复制apiVersion: extensions/v1beta1 kind: Ingress metadata: name: rancher namespace: cattle-system spec: tls: - secretName: tls-rancher-ingress ...
3.2 证书轮换策略
对于生产环境,建议:
- 使用cert-manager自动管理证书
- 设置证书有效期监控
- 建立定期轮换流程
4. 故障排查与常见问题
4.1 常见错误与解决方案
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | 证书加载失败 | 检查容器日志,确认证书文件权限 |
| 证书不更新 | 缓存未清除 | 确认dynamic-cert.json已删除 |
| API不可用 | 证书不匹配 | 验证证书CN与域名匹配 |
4.2 日志检查要点
检查Rancher Server日志的关键信息:
bash复制docker logs rancher_server_container_id | grep -i cert
重点关注:
- 证书加载成功/失败消息
- 证书过期警告
- 证书验证错误
5. 生产环境最佳实践
-
维护窗口选择:
- 在低流量时段执行证书更新
- 提前通知相关团队
-
监控验证:
- 更新后检查所有集成系统
- 验证CI/CD流水线连接
-
文档记录:
- 记录证书过期日期
- 更新操作手册
-
自动化方案:
bash复制# 示例监控脚本 expiry_date=$(openssl s_client -connect your.rancher.domain:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2) if [ $(date -d "$expiry_date" +%s) -lt $(date -d "+30 days" +%s) ]; then echo "证书即将过期:$expiry_date" # 触发更新流程 fi
在实际操作中,我发现证书更新后有时需要等待5-10分钟让所有组件完全同步。建议在维护窗口预留足够缓冲时间,并准备回滚方案以防万一。对于大规模生产环境,可以考虑蓝绿部署方式逐步切换证书,确保服务连续性。