主题
Rancher 新建托管集群节点注册失败:STRICT_VERIFY 中止 / 私有仓库 HTTP 误用 HTTPS / 节点缺 iptables
问题现象
在 Rancher(v2.14.3)中新建 RKE2 托管集群,按 UI 生成的注册命令在新节点执行 system-agent-install.sh 失败;逐个修复后 provisioning 过程又连续暴露两个问题,共 3 个故障点:
text
# 故障 1:system-agent 安装直接退出
[FATAL] Aborting system-agent installation due to requested strict CA verification
with no CA checksum provided
# 故障 2:RKE2 安装器镜像拉取失败
Pulling image 192.168.122.156:30000/rancher/system-agent-installer-rke2:v1.35.6-rke2r1
error: Get "https://192.168.122.156:30000/v2/": http: server gave HTTP response to HTTPS client
# 故障 3:traefik Pod 反复 FailedCreatePodSandBox
plugin type="portmap" failed (add): failed to open iptables:
exec: "iptables": executable file not found in $PATH环境信息
- Rancher v2.14.3(RKE2 v1.35.6 集群 + ingress-nginx,证书为 cert-manager 自签 CA)
- 下游集群:Rancher provisioning 新建 RKE2(calico,traefik ingress)
- 私有镜像仓库:
192.168.122.156:30000(HTTP) - 节点 OS:Rocky Linux 9.8 精简模板
根因与修复
故障 1:STRICT_VERIFY 中止安装
Rancher agent-tls-mode 默认为 strict,生成的注册脚本内嵌 export STRICT_VERIFY='true',未传 --ca-checksum 即退出。两种证书场景的正确解法:
公共 CA 签发证书:
/cacerts返回空(无内部 CA 可下发),应改用 system-store 模式:bashkubectl patch settings.management.cattle.io agent-tls-mode \ --type merge -p '{"value":"system-store"}' # 注册脚本中剔除严格校验 curl -fL https://<rancher>/system-agent-install.sh \ | sed "s/^export STRICT_VERIFY='true'/export STRICT_VERIFY='false'/" | sudo sh -s - ...自签/私有 CA 证书(
privateCA=true):/cacerts下发根 CA,注册时计算校验和:bashCACHECKSUM=$(curl -sk https://<rancher>/cacerts | sha256sum | awk '{print $1}') curl -fL https://<rancher>/system-agent-install.sh | sudo sh -s - \ --server https://<rancher> --ca-checksum "$CACHECKSUM" --token <TOKEN> \ --etcd --controlplane --worker
注意:
agent-tls-mode从 system-store 改回 strict 会被 webhook 拒绝 (AgentTlsStrictCheck condition ... isn't 'True'),需等下游 agent 全部按新 CA 回连成功。
故障 2:私有 HTTP 仓库被当作 HTTPS 访问
镜像地址被 Rancher 全局 system-default-registry 改写为私有仓库,但集群未声明该仓库为 HTTP,agent 默认走 HTTPS 必然失败。为集群补充 registry mirror(HTTP endpoint):
bash
kubectl patch clusters.provisioning.cattle.io -n fleet-default <集群名> --type merge -p '{
"spec":{"rkeConfig":{"registries":{"mirrors":{
"192.168.122.156:30000":{"endpoint":["http://192.168.122.156:30000"]}
}}}}
}'约 1 分钟后 machine plan 下发,节点 /etc/rancher/agent/registries.yaml 自动更新,rke2-server 即可启动。
故障 3:节点缺少 iptables 二进制
精简 OS 模板未安装 iptables(连 iptables.service 单元都不存在),而 traefik 的 hostPort 依赖宿主机 iptables(CNI portmap 插件):
bash
dnf install -y iptables-nft ipset教训:新节点入网前必须先执行初始化脚本(安装 iptables/ipvsadm、清理防火墙默认 REJECT 规则、内核模块与 sysctl),可规避此类问题。
排障路径
- 节点:
journalctl -u rancher-system-agent(安装与 plan 应用日志) - Rancher 侧:
kubectl get machines.cluster.x-k8s.io -n fleet-default、kubectl get rkecontrolplanes.rke.cattle.io -n fleet-default、machine-plan secret 的failed-checksum注解 - 下游集群:
kubectl get pods -A(用节点本地 kubeconfig)
验证
- machine plan
failed-checksum为空、节点 Ready、全部 Pod Running/Completed; - Rancher 管理对象 Connected / Ready / AgentDeployed;
- 后续节点用修正后的注册命令一次成功。
经验教训
- Rancher 证书方案决定注册命令形态:公共 CA →
agent-tls-mode=system-store;自签 CA →privateCA=true+--ca-checksum。 - 私有 HTTP 镜像仓库必须在集群 Registries 中显式配置
http://endpoint。 - 节点必须先跑初始化脚本再入网,精简模板缺少的不仅是 iptables 服务,还可能是 iptables 二进制本身。