2026-10-21 21:49:06
在 Kubernetes 集群中调试 DNS 请求流需要理解 DNS 组件和流程,并借助合适的工具进行深入分析。以下是具体方法和工具介绍:
理解 DNS 组件和请求流安装 Cilium:启用第 7 层 (L7) 代理支持。
创建网络策略:允许 mypod 和 CoreDNS 的 DNS 流量。
验证设置:确保流量路径开放。
部署 Hubble CLI:应用过滤器关注 DNS 协议流量,查看请求、响应和元数据。
运行 DNS Gadget:使用 kubectl gadget 命令追踪特定命名空间和 Pod 的 DNS 查询。
分析输出:查看 DNS 查询和响应事件,包括源(如 mypod Pod)、目标(如 kube-dns 服务)、查询信息和响应代码。
调整过滤器:按 Pod 名称或命名空间过滤,观察不同范围的 DNS 活动。
扩展跟踪范围:删除 Pod 过滤器,查看节点级别处理情况,包括网络命名空间 ID 和 IP 转译。
初始输出:
调整过滤器后输出:
扩展跟踪范围后输出:
禁用 CoreDNS 缓存:编辑 Corefile,删除或注释掉 cache 行,重启 CoreDNS Pod。
部署测试 Pod:发送 DNS 请求至 example.com 和 unknown.example.com。
运行 Inspektor Gadget:过滤观察上游服务器响应,关注 kube-system 命名空间和 CoreDNS Pod。
解读结果:example.com 成功响应表示正常运行,unknown.example.com 的 name error 响应表示预期错误行为。
创建故障:使用 erratic 插件修改 CoreDNS 配置,丢弃对 example.com 的请求。
生成 DNS 请求:使用测试 Pod 查询 example.com,用 Inspektor Gadget 监控。
分析输出:跟踪显示请求在 CoreDNS 处结束,未转发至上游服务器,确认故障位置。
Kubernetes 中的 DNS 调试需结合内部流程理解和工具使用。CoreDNS 日志插件、Hubble 和 Inspektor Gadget 提供了不同层次的可见性,帮助定位问题。通过实际场景练习,可进一步提升调试技能。