主题
Rancher 证书切换为公共 CA 正式证书(ai-ear.cn)操作手册
- 日期:2026-08-01
- 集群:
sza122020.local(192.168.122.20,RKE2 v1.35.6+rke2r1,3 control-plane 节点 .20/.21/.22) - Rancher:v2.14.3(Helm 安装,namespace
cattle-system,3 副本) - 变更:ingress 证书由 cert-manager 自签证书(
rancher-ai-ear-root-ca签发)切换为公网正式证书(DigiCert 签发的ai-ear.cn)
1. 背景与目标
原证书体系为 cert-manager 自签 CA 链:根 CA(10 年)→ Certificate/cattle-system/tls-rancher-ingress(CN=ai-ear.cn)。自签 CA 不在客户端系统信任库,浏览器访问报 ERR_CERT_AUTHORITY_INVALID,需逐台客户端导入根 CA。
切换目标:使用公网 nginx 站点同款的 DigiCert 正式证书(Encryption Everywhere DV TLS CA - G2 签发,SAN:ai-ear.cn / www.ai-ear.cn),客户端零配置直接信任。
| 项 | 变更前 | 变更后 |
|---|---|---|
| 签发者 | rancher-ai-ear-root-ca(自签) | DigiCert Encryption Everywhere DV TLS CA - G2 |
| 证书来源 | cert-manager 自动签发/续期 | 公网服务器 /etc/pki/nginx/ai-ear.cn.crt + private/ai-ear.cn.key(手工同步) |
| Rancher privateCA | true(挂载 tls-ca,/cacerts 下发根 CA) | false(/cacerts 返回空) |
| agent-tls-mode | system-store | system-store(不变,公共 CA 在系统信任库) |
| 续期方式 | cert-manager 自动 | 手工:证书到期前需重新同步(当前证书 2026-10-15 到期) |
2. 操作步骤
2.1 确认公网证书
bash
ssh root@8.153.84.140 'openssl x509 -in /etc/pki/nginx/ai-ear.cn.crt -noout -subject -issuer -dates'
# subject=CN=ai-ear.cn / issuer=DigiCert ... / notAfter=Oct 15 23:59:59 2026 GMT
# .crt 文件含 2 张证书(服务器证书 + 中间证书,完整链)2.2 下发证书到集群节点并备份原自签证书
bash
# 本地中转(公网服务器 → 本地 → 集群节点)
scp root@8.153.84.140:/etc/pki/nginx/ai-ear.cn.crt \
root@8.153.84.140:/etc/pki/nginx/private/ai-ear.cn.key /tmp/ai-ear-cert/
# 校验证书与私钥匹配(两次 md5 应一致)
openssl x509 -noout -modulus -in /tmp/ai-ear-cert/ai-ear.cn.crt | md5sum
openssl rsa -noout -modulus -in /tmp/ai-ear-cert/ai-ear.cn.key | md5sum
scp /tmp/ai-ear-cert/ai-ear.cn.* root@192.168.122.20:/root/
# 节点上备份原自签证书(回滚用)
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
mkdir -p /root/cert-backup-20260801
kubectl -n cattle-system get secret tls-rancher-ingress -o yaml > /root/cert-backup-20260801/tls-rancher-ingress-selfsigned.yaml
kubectl -n cattle-system get certificate tls-rancher-ingress -o yaml > /root/cert-backup-20260801/certificate-tls-rancher-ingress.yaml
chmod 600 /root/ai-ear.cn.key2.3 解除 cert-manager 托管并替换 secret
bash
# 删除 Certificate(不会级联删除 secret),防止 cert-manager 续期时覆盖手工证书
kubectl -n cattle-system delete certificate tls-rancher-ingress
# 用公网证书重建同名 tls secret(ingress 直接引用该 secret,无需改 ingress)
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=/root/ai-ear.cn.crt --key=/root/ai-ear.cn.key \
--dry-run=client -o yaml | kubectl apply -f -2.4 helm 关闭 privateCA 并清理 tls-ca
bash
# --reuse-values 保留原配置,仅覆盖 privateCA(chart 在节点 /root/rancher-2.14.3.tgz)
helm upgrade rancher /root/rancher-2.14.3.tgz -n cattle-system \
--reuse-values --set privateCA=false
kubectl -n cattle-system rollout status deploy/rancher --timeout=180s
kubectl -n cattle-system delete secret tls-ca # privateCA=false 后不再挂载2.5 注册脚本同步调整
公共 CA 模式下 /cacerts 返回空,--ca-checksum 路线不可用;agent-tls-mode=system-store(已为此值)下 agent 用系统 CA 信任库校验,注册命令需剔除 STRICT_VERIFY:
bash
curl -fL https://ai-ear.cn/system-agent-install.sh \
| sed "s/^export STRICT_VERIFY='true'/export STRICT_VERIFY='false'/" \
| sudo sh -s - --server https://ai-ear.cn --label 'cattle.io/os=linux' \
--token <TOKEN> --etcd --controlplane --worker
worker/rke2/branch/new_cluster_server.sh已按此更新。
3. 验证
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 内网 ingress 证书 | echo | openssl s_client -connect 192.168.122.20:443 -servername ai-ear.cn | DigiCert 证书,Verify return code: 0 |
| 节点直连 | curl https://ai-ear.cn/healthz(无需 --cacert) | HTTP 200 |
| 外网 frp 隧道 | curl https://ai-ear.cn:30443/healthz | HTTP 200,同样出示 DigiCert 证书 |
| Rancher Pod | kubectl -n cattle-system get pods -l app=rancher | 3/3 Running |
| /cacerts | curl -s https://ai-ear.cn/cacerts | wc -c | 0(公共 CA 模式预期) |
4. 注意事项
- 续期为手工操作:证书 2026-10-15 到期。公网站点证书续期后,需把新证书按 2.2~2.3 同步到
tls-rancher-ingresssecret(cert-manager 自动续期已解除)。 - 回滚:
kubectl apply -f /root/cert-backup-20260801/(先恢复 Certificate 再恢复 secret),并helm upgrade --reuse-values --set privateCA=true、重建tls-casecret。 - rancher.ai-ear.cn 不在新证书 SAN 中(仅 ai-ear.cn / www.ai-ear.cn),访问入口统一为
https://ai-ear.cn(内网 443)与https://ai-ear.cn:30443(外网 frp)。 - cert-manager 与根 CA(
cert-manager/rancher-root-ca)保留未删,不影响运行;如彻底不再需要自签体系可另行清理。