dns-resolution-failed

DNS 解析失败的定位与修复

现象

报 Could not resolve host、Name or service not known、Temporary failure in name resolution。用 IP 能连通,用域名不行。

快速定位

cat /etc/resolv.conf
resolvectl status
dig +short example.com
dig @8.8.8.8 example.com
nslookup example.com
getent hosts example.com
cat /etc/nsswitch.conf
ping -c 1 <ip>

容器内:

cat /etc/resolv.conf
getent hosts kubernetes.default.svc.cluster.local

常见根因

  1. /etc/resolv.conf 里的 DNS 服务器不可达或配置错误。
  2. systemd-resolved、NetworkManager 或容器运行时覆盖了配置。
  3. 搜索域(search domain)导致短域名解析到错误位置。
  4. 防火墙拦截 53 端口,或上游 DNS 限流。
  5. Kubernetes 集群 DNS(CoreDNS)异常,或 NetworkPolicy 拦截。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 如何区分是本机解析器问题还是上游 DNS 问题?
  2. 短域名被解析到错误位置,通常和什么配置有关?
  3. Kubernetes 中 DNS 解析失败要检查哪些组件和策略?
答案
  1. 先 dig example.com,再用 dig @8.8.8.8 example.com 对比。换服务器能解析,说明问题在本地解析器配置。
  2. 与 /etc/resolv.conf 的 search 域和 ndots 有关。必要时使用末尾加点的 FQDN。
  3. 检查 CoreDNS Pod 和 Service 是否正常。再确认 NetworkPolicy 是否拦截了 DNS。