nslookup
nslookup 的核心作用是 进行 DNS 查询和诊断,主要用于验证域名解析是否正常工作。在 Kubernetes 环境中,它特别用于检查集群内的服务发现机制。以下是详细解析:
核心作用
-
域名解析
将服务名称(如nginx-service-cka)解析为对应的 ClusterIP 或 Pod IP。# 示例:解析 Kubernetes 服务 nslookup nginx-service-cka -
DNS 记录查询
显示完整的 DNS 记录信息,包括:- 服务的 ClusterIP
- 完整的 FQDN(如
nginx-service-cka.default.svc.cluster.local) - 负责解析的 KubeDNS/CoreDNS 服务器地址
-
故障诊断
验证集群 DNS 是否正常工作,常见场景:- 服务无法通过名称访问
- 跨命名空间的服务调用失败
- 自定义 DNS 配置的调试
Kubernetes 中的特殊用途
1. 验证服务发现
# 在 busybox 容器中查询 Service 的 DNS 记录
kubectl run test-nslookup --image=busybox:1.28 --rm -it --restart=Never -- \
nslookup nginx-service-cka
# 预期输出示例
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: nginx-service-cka
Address 1: 10.96.123.456 nginx-service-cka.default.svc.cluster.local
2. 检查 DNS 策略
- 如果
nslookup失败,可能原因:- CoreDNS Pod 未运行
- 网络插件故障
- 错误的
ndotsDNS 配置
3. 跨命名空间解析
# 查询其他命名空间的服务
nslookup other-service.other-namespace
与 dig/host 的对比
| 工具 | 特点 | Kubernetes 适用场景 |
|---|---|---|
nslookup |
交互式/非交互式,基础查询 | 快速验证服务 DNS 记录 |
dig |
更详细的 DNS 信息输出 | 深度调试 DNS 配置问题 |
host |
简洁的单行输出 | 脚本中快速检查解析结果 |
典型问题排查流程
-
检查 DNS Pod 状态
kubectl get pods -n kube-system -l k8s-app=kube-dns -
验证基础解析
# 查询 Kubernetes 默认服务 nslookup kubernetes.default -
检查 Service 是否存在
kubectl get svc nginx-service-cka -
查看 CoreDNS 日志
kubectl logs -n kube-system <coredns-pod-name>
注意事项
-
镜像版本
CKA 考试中必须使用busybox:1.28(新版 busybox 的nslookup行为可能不同)。 -
命名空间隔离
DNS 查询默认只能解析同一命名空间的服务,跨命名空间需使用全限定域名:nslookup other-service.other-namespace.svc.cluster.local -
超时问题
如果解析超时,可能是网络插件(如 Calico/Flannel)或 NetworkPolicy 配置问题。
总结
在 Kubernetes 中,nslookup 是验证服务发现是否正常工作的基础工具,通过它可以直接确认:
- 服务是否有有效的 DNS 记录
- CoreDNS/KubeDNS 是否正常运行
- 网络层是否允许 DNS 查询
浙公网安备 33010602011771号