Busybox版nslookup无法自动添加.cluster.local后缀的解决方法
Kubernetes Pod DNS解析异常排查与解决
问题现象
- 搭载原生
nslookup工具的Pod,解析目标服务域名完全正常:
mark@L-R910LPKW:~$ k -n chip exec deployments/toolbox -- sh -c 'ls -l $(which nslookup) ; nslookup default-redis-redis.system-d-kb-redis.svc' -rwxr-xr-x 1 root root 100600 Feb 13 2024 /usr/bin/nslookup Server: 10.0.0.10 Address: 10.0.0.10#53 Name: default-redis-redis.system-d-kb-redis.svc.cluster.local Address: 10.0.6.5 mark@L-R910LPKW:~$
- 基于Busybox的RedisInsight Pod(镜像
redislabs/redisinsight:2.54.0,通过TrueCharts Helm Chart部署)解析同一域名失败,应用层同时返回getaddrinfo ENOTFOUND错误:
mark@L-R910LPKW:~$ k exec deployments/redis-insights-redisinsight -- sh -c 'ls -l $(which nslookup) ; nslookup default-redis-redis.system-d-kb-redis.svc' lrwxrwxrwx 1 root root 12 Jun 18 14:16 /usr/bin/nslookup -> /bin/busybox Server: 10.0.0.10 Address: 10.0.0.10:53 ** server can't find default-redis-redis.system-d-kb-redis.svc: NXDOMAIN ** server can't find default-redis-redis.system-d-kb-redis.svc: NXDOMAIN command terminated with exit code 1 mark@L-R910LPKW:~$
排查与解决方法
1. 核对Pod的DNS配置
先导出异常Pod的DNS配置,和正常Pod做对比:
# 导出异常Pod的resolv.conf k exec deployments/redis-insights-redisinsight -- cat /etc/resolv.conf # 导出正常Pod的resolv.conf做对比 k -n chip exec deployments/toolbox -- cat /etc/resolv.conf
重点检查:
nameserver是否指向集群DNS服务(如你的环境中的10.0.0.10)search域是否包含system-d-kb-redis.svc.cluster.local、svc.cluster.local等必要搜索规则
若搜索域缺失,需检查Pod的dnsPolicy配置,或调整Helm Chart的对应参数,确保Pod继承集群默认DNS搜索逻辑。
2. 测试完整域名解析
Busybox的nslookup对搜索域的处理逻辑和原生工具存在差异,先测试完整域名验证:
k exec deployments/redis-insights-redisinsight -- nslookup default-redis-redis.system-d-kb-redis.svc.cluster.local
如果完整域名能正常解析,说明是搜索域配置或Busybox工具的短域名解析逻辑问题。此时可临时让应用使用完整域名连接Redis,或调整Pod的DNS搜索域配置。
3. 调整Pod的DNS策略
通过修改Pod的dnsPolicy或添加dnsConfig强制补充搜索域,可在Helm Chart的values.yaml中调整对应配置:
spec: template: spec: dnsPolicy: "ClusterFirst" dnsConfig: searches: - system-d-kb-redis.svc.cluster.local - svc.cluster.local - cluster.local
4. 检查集群DNS服务状态
确认CoreDNS(或集群DNS组件)运行正常:
# 查看DNS Pod状态 k get pods -n kube-system -l k8s-app=kube-dns # 查看DNS日志排查异常 k logs -n kube-system -l k8s-app=kube-dns
排查是否存在DNS服务崩溃、配置错误或日志报错,确保DNS组件能正常处理解析请求。
5. 替换Busybox工具验证(临时测试)
如果怀疑是Busybox工具本身的问题,可在Pod内安装原生DNS工具验证:
# 若镜像基于Debian/Ubuntu k exec deployments/redis-insights-redisinsight -- apt update && apt install -y dnsutils # 若镜像基于Alpine k exec deployments/redis-insights-redisinsight -- apk add bind-tools
安装完成后重新测试解析,确认是否为工具本身导致的问题。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

