K3s agent 无法信任 server TLS 证书的根本原因是 CA 证书缺失或不被认可,需通过 –server + –Token 自动获取、–ca-cert-file 显式指定或(仅测试)–insecure-skip-tls-verify 解决,并排查网络连通性、token 正确性及证书时效性。
node-taint 等参数,不影响 CA 有效性,但若用 –disable-agent 或手动替换了证书,则需额外同步 CA。
检查 agent 是否正确传入 server CA 证书
agent 加入集群时,有三种常见方式提供 CA 信任:
- 方式一(推荐):使用 –token + –server,让 agent 自动拉取 CA
确保 agent 命令中包含完整 https 地址和有效 token:
k3s agent –server https://192.168.1.100:6443 –token my-secret-token
此时 agent 会通过该地址的 /v1-release 路径自动获取 server 签发的 CA 证书(要求 server 可被 agent 直连且端口开放)。 - 方式二:显式指定 –ca-cert-file
把 server 节点上的 /var/lib/rancher/k3s/server/tls/client-ca.crt 复制到 agent 本地(如 /tmp/ca.crt),再运行:
k3s agent –server https://192.168.1.100:6443 –token my-secret-token –ca-cert-file /tmp/ca.crt - 方式三:跳过验证(仅测试环境)
不推荐生产使用,但可用于快速定位是否为证书问题:
k3s agent –server https://192.168.1.100:6443 –token my-secret-token –insecure-skip-tls-verify
排查网络与证书时效性问题
即使配置正确,以下情况也会触发该错误:
- agent 无法访问 server 的 6443 端口(防火墙、安全组、SElinux 或 k3s server 未监听公网 IP);
- server 启动时用了 –cluster-init 但未等初始化完成就启动 agent;
- server 证书已过期(K3s 内置证书有效期为 10 年,一般不在此列,但若手动替换过证书且过期则会报此错);
- agent 使用了错误的 token(server 端 token 存于 /var/lib/rancher/k3s/server/node-token,不是 /var/lib/rancher/k3s/server/token)。
验证 server 端证书是否可被 agent 正常获取
在 agent 机器上手动测试能否拿到 CA:
curl -k https://192.168.1.100:6443/v1-release
应返回类似 {"type":"rke2","version":"v1.28.11+k3s1"} 的 jsON;
再试带 token 的请求:
curl -k -H “Authorization: Bearer my-secret-token” https://192.168.1.100:6443/v1-release
若返回 401 或连接拒绝,说明 token 错误或 server 未就绪。