nslookup

nslookup 的核心作用是 进行 DNS 查询和诊断,主要用于验证域名解析是否正常工作。在 Kubernetes 环境中,它特别用于检查集群内的服务发现机制。以下是详细解析:


核心作用

  1. 域名解析
    将服务名称(如 nginx-service-cka)解析为对应的 ClusterIP 或 Pod IP。

    # 示例:解析 Kubernetes 服务
    nslookup nginx-service-cka
    
  2. DNS 记录查询
    显示完整的 DNS 记录信息,包括:

    • 服务的 ClusterIP
    • 完整的 FQDN(如 nginx-service-cka.default.svc.cluster.local
    • 负责解析的 KubeDNS/CoreDNS 服务器地址
  3. 故障诊断
    验证集群 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 未运行
    • 网络插件故障
    • 错误的 ndots DNS 配置

3. 跨命名空间解析

# 查询其他命名空间的服务
nslookup other-service.other-namespace

dig/host 的对比

工具 特点 Kubernetes 适用场景
nslookup 交互式/非交互式,基础查询 快速验证服务 DNS 记录
dig 更详细的 DNS 信息输出 深度调试 DNS 配置问题
host 简洁的单行输出 脚本中快速检查解析结果

典型问题排查流程

  1. 检查 DNS Pod 状态

    kubectl get pods -n kube-system -l k8s-app=kube-dns
    
  2. 验证基础解析

    # 查询 Kubernetes 默认服务
    nslookup kubernetes.default
    
  3. 检查 Service 是否存在

    kubectl get svc nginx-service-cka
    
  4. 查看 CoreDNS 日志

    kubectl logs -n kube-system <coredns-pod-name>
    

注意事项

  1. 镜像版本
    CKA 考试中必须使用 busybox:1.28(新版 busybox 的 nslookup 行为可能不同)。

  2. 命名空间隔离
    DNS 查询默认只能解析同一命名空间的服务,跨命名空间需使用全限定域名:

    nslookup other-service.other-namespace.svc.cluster.local
    
  3. 超时问题
    如果解析超时,可能是网络插件(如 Calico/Flannel)或 NetworkPolicy 配置问题。


总结

在 Kubernetes 中,nslookup 是验证服务发现是否正常工作的基础工具,通过它可以直接确认:

  • 服务是否有有效的 DNS 记录
  • CoreDNS/KubeDNS 是否正常运行
  • 网络层是否允许 DNS 查询
posted on 2025-05-23 19:06  Leo-Yide  阅读(89)  评论(0)    收藏  举报