logo
0
0
WeChat Login

K8s DNS 解析测试工具

这是一套专为 Kubernetes 集群设计的 DNS 解析测试工具,用于评估和诊断集群内外 DNS 解析功能的可靠性和性能。

🎯 项目特色

  • 多协议支持: 同时支持 UDP 和 TCP 协议的 DNS 查询测试
  • 多场景测试: 覆盖集群内外 DNS 解析的完整场景
  • 智能分析: 自动分析测试结果并提供故障诊断建议
  • 容器化部署: 基于 Debian 12 的轻量级 Docker 镜像
  • 灵活配置: 支持命令行参数和环境变量多种配置方式
  • Unicode支持: 完整支持中文和emoji显示,优化用户体验

📋 测试场景

场景DNS服务器目标域名测试目的
场景1集群内DNS集群内域名测试集群内部DNS服务基本功能
场景2集群内DNS集群外域名测试集群DNS上游转发功能
场景3集群外DNS集群外域名对照组,测试外部DNS可用性

🚀 快速开始

在Kubernetes中使用kubectl运行测试

# 基本测试 - 使用默认配置测试所有场景 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never # 同时测试UDP和TCP协议 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -p both -n 100 -t 3 # 快速测试 - 每个场景20次 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -p both -n 20 -t 2 # 仅测试UDP协议 kubectl run dns-test-udp --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -p udp -n 100 # 仅测试TCP协议 kubectl run dns-test-tcp --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -p tcp -n 100 # 进入Pod内部进行调试 kubectl run dns-debug --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- /bin/bash # 测试Unicode和emoji支持 kubectl run unicode-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- /app/test-unicode.sh

⚙️ 配置参数

命令行参数

参数说明默认值示例
-c集群内DNS服务器10.96.0.10-c 10.96.0.10
-e集群外DNS服务器8.8.8.8-e 114.114.114.114
-i集群内域名kubernetes.default.svc.cluster.local-i my-service.default.svc.cluster.local
-x集群外域名google.com-x baidu.com
-p测试协议both-p udp / -p tcp / -p both
-n每个场景测试次数100-n 200
-t超时时间(秒)2-t 5

环境变量

环境变量对应参数说明
CLUSTER_DNS_SERVER-c集群内DNS服务器地址
EXTERNAL_DNS_SERVER-e集群外DNS服务器地址
INTERNAL_DOMAIN-i集群内域名
EXTERNAL_DOMAIN-x集群外域名
PROTOCOL-p测试协议 (udp/tcp/both)
TOTAL-n每个场景测试次数
TIMEOUT-t超时时间(秒)

📊 测试结果解读

UDP vs TCP 性能对比

  • UDP: 轻量级协议,响应速度快,但可能丢包
  • TCP: 可靠传输协议,建立连接开销较大,但数据完整性更好

成功率阈值建议

  • 优秀: 成功率 ≥ 95%
  • 良好: 成功率 ≥ 90%
  • 需关注: 成功率 < 90%

常见问题诊断

  1. 场景1成功率低: 集群内DNS服务问题,检查CoreDNS配置
  2. 场景2成功率低: 上游DNS转发问题,检查网络策略和防火墙
  3. TCP成功率明显低于UDP: 可能存在TCP连接限制或防火墙策略

🛠️ 依赖要求

Kubernetes运行

  • kubectl - K8s命令行工具
  • 对集群的访问权限

📖 使用示例

基础测试

# 使用默认配置 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never # 快速测试(每个场景20次) kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -n 20 -t 1 # 仅测试UDP协议 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -p udp -n 100

自定义配置

# 测试特定DNS服务器 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -c 10.96.0.10 -e 114.114.114.114 # 测试特定域名 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -i my-app.default.svc.cluster.local -x baidu.com # 高强度测试 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ -- -n 500 -t 5

环境变量配置

# 通过环境变量配置 kubectl run dns-test --image=docker.cnb.cool/hzboiler/k8s-dns-test --rm -it --restart=Never \ --env="CLUSTER_DNS_SERVER=10.96.0.10" \ --env="EXTERNAL_DOMAIN=baidu.com" \ --env="PROTOCOL=both"

🚨 注意事项

  1. 网络访问: 确保测试环境能够访问目标DNS服务器
  2. 防火墙: 检查53端口(UDP/TCP)是否开放
  3. 权限: 某些环境可能需要特殊的网络权限
  4. 资源消耗: 大量测试可能对DNS服务器造成负载

🤝 贡献指南

欢迎提交Issue和Pull Request!

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

About

No description, topics, or website provided.
Language
Shell92.7%
Dockerfile7.3%