dnsutils用于排查 DNS 解析相关问题

dnsutils 是一个包含多种 DNS 诊断和查询工具的软件包(或容器镜像),主要用于排查 DNS 解析相关的问题,在网络调试,尤其是 Kubernetes 等容器化环境中非常常用。

核心功能与包含的工具

dnsutils 集成了一系列经典的 DNS 工具,核心功能是帮助用户查询、验证和诊断域名解析过程,常用工具包括:

  • **nslookup**:用于查询域名对应的 IP 地址(正向解析)或 IP 对应的域名(反向解析),支持指定 DNS 服务器进行查询。
  • **dig**:功能更强大的 DNS 查询工具,能显示详细的解析过程(包括查询类型、TTL、权威服务器等),支持多种 DNS 记录类型(A、AAAA、CNAME、MX、TXT 等)。
  • **host**:简化的 DNS 查询工具,可快速查询域名对应的 IP 或反向解析,输出结果更简洁。
  • **nsupdate**:用于动态更新 DNS 记录(需 DNS 服务器支持动态更新功能)。

适用场景

  • 排查域名解析失败:当应用无法访问某个域名时,用 dignslookup 检查是否能正常解析,定位是 DNS 服务器问题还是域名本身的问题。
  • 验证 DNS 配置:确认域名的 DNS 记录(如 MX 记录是否正确指向邮件服务器,TXT 记录是否包含预期的验证信息等)。
  • Kubernetes 内部 DNS 调试:在 K8s 集群中,Pod 之间的通信依赖 CoreDNS 解析服务名,dnsutils 容器可部署到集群内,直接测试 Pod 内的 DNS 解析是否正常(例如检查 service-name.namespace.svc.cluster.local 能否解析)。

在 Kubernetes 中使用 dnsutils

由于 dnsutils 本身是轻量工具,通常以容器镜像的形式在 K8s 中使用,步骤如下:

1. 部署 dnsutils 容器到 K8s 集群

1
2
3
4
# 在 default 命名空间创建一个 dnsutils Pod(运行 sleep 保持容器存活)
kubectl run dnsutils --image=tutum/dnsutils --restart=Never -- sleep infinity # 进入休眠状态

kubectl run nettools --image=ghcr.io/chainguard/netutils --restart=Never -it -- bash
  • 镜像说明:常用的 dnsutils 镜像有 tutum/dnsutilsk8s.gcr.io/e2e-test-images/dnsutils:1.3 等,均可直接使用。

2. 进入容器执行 DNS 诊断命令

1
2
# 进入 dnsutils Pod 的终端
kubectl exec -it dnsutils -- bash

进入后即可使用工具:

1
2
3
4
5
6
7
8
# 用 nslookup 查询域名(例如查询百度)
nslookup www.baidu.com

# 用 dig 查询更详细的解析过程(指定 DNS 服务器,如 K8s 的 CoreDNS 服务地址 10.96.0.10)
dig www.baidu.com @10.96.0.10

# 用 host 反向解析 IP(例如解析 114.114.114.114)
host 114.114.114.114

3. 清理资源

诊断完成后,可删除 Pod 释放资源:

1
kubectl delete pod dnsutils

优势

  • 轻量便捷:工具集体积小,容器镜像通常只有几十 MB,部署快速,不占用过多资源。
  • 功能专一:专注于 DNS 解析诊断,工具简单直接,适合快速定位问题。
  • 跨环境兼容:不仅可在 K8s 中使用,也能在普通 Linux 系统中安装(通过 apt-get install dnsutils 等命令),通用性强。