K3s集群nslookup卡死或返回NXDOMAIN,主因是CoreDNS异常、网络插件干扰DNS流量或节点/etc/resolv.conf配置错误;需检查CoreDNS Pod状态与日志、kube-dns Service存在性及ClusterIP可达性、节点DNS配置是否误写127.0.0.1或10.43.0.10,以及防火墙/CNI是否拦截UDP 53。

K3s 集群中 nslookup 卡死或返回 NXDOMAIN,通常是 CoreDNS 未正常工作、网络插件干扰 DNS 流量,或节点本地 DNS 配置冲突导致。重点排查 CoreDNS 状态、服务端口可达性、kube-dns Service 是否存在,以及节点上 /etc/resolv.conf 是否误将 127.0.0.1 或 10.43.0.10 写死但实际不可达。
检查 CoreDNS Pod 和 Service 是否运行正常
CoreDNS 是 K3s 默认的集群 DNS 服务,必须处于 Running 状态且监听正确端口:
- 运行
kubectl get pods -n kube-system -l k8s-app=kube-dns,确认 Pod 状态为Running,且重启次数为 0;若 CrashLoopBackOff,查看日志:kubectl logs -n kube-system -l k8s-app=kube-dns - 确认 Service 存在且 ClusterIP 正确:
kubectl get svc -n kube-system kube-dns,输出中应有类似10.43.0.10的 ClusterIP(K3s 默认) - 验证 CoreDNS 是否监听 53 端口:
kubectl exec -it -n kube-system,应看到-- netstat -tuln | grep :53 udp *:53和tcp *:53
验证 DNS Service 可达性与解析路径
集群内 Pod 解析依赖 kube-dns Service 的 ClusterIP(如 10.43.0.10),该 IP 必须能被节点和 Pod 访问:
- 在节点上测试:
curl -v --dns-servers 10.43.0.10 http://kubernetes.default.svc.cluster.local:80(需安装 curl;若失败,说明 Service 后端不通或网络插件拦截 UDP 53) - 进入任意 Pod:
kubectl run debug --image=busybox:1.35 --rm -it --restart=Never -- nslookup kubernetes.default,观察是否超时或报server can't find - 若 nslookup 卡住,大概率是 UDP 53 被丢弃(如防火墙、CNI 插件策略、云厂商安全组限制),可临时用 TCP 强制测试:
nslookup -vc kubernetes.default
检查节点本地 resolv.conf 与 DNS 转发配置
K3s 节点的 /etc/resolv.conf 若错误指向本地不可达的 DNS(如 127.0.0.1 或 10.43.0.10),会导致宿主机命令(如 nslookup)失败,但不影响 Pod:
- 查看节点
cat /etc/resolv.conf,避免出现nameserver 127.0.0.1或nameserver 10.43.0.10—— 这些地址只对 Pod 有效,宿主机无法直连 - 推荐设为真实上游 DNS,例如:
nameserver 8.8.8.8或内网 DNS;K3s 不会覆盖此文件,除非使用--resolv-conf参数启动 - 若使用 systemd-resolved,确认
resolvectl status中全局 DNS 正常,且/etc/resolv.conf是软链到/run/systemd/resolve/stub-resolv.conf(此时可能需禁用 stub listener)
排查 CNI 插件与防火墙干扰
部分 CNI(如 Flannel、Calico)或系统防火墙会拦截集群 DNS 流量,尤其 UDP 53:
- 检查节点 iptables/nftables 是否 DROP/REJECT UDP 53:
sudo iptables -S | grep 53;常见问题:firewalld 默认拒绝外部 UDP 53,需放行:sudo firewall-cmd --add-port=53/udp --permanent && sudo firewall-cmd --reload - 若使用 Calico,确认
FelixConfiguration中policySyncPathPrefix未误配,且无 NetworkPolicy 显式拒绝 DNS 流量 - 在节点上抓包验证 DNS 请求是否发出:
sudo tcpdump -i any -n port 53,然后另起终端执行nslookup kubernetes.default,看是否有请求发出及响应返回










