From 722e8d8ac8b9c1282f249600430ad83ecce4e82c Mon Sep 17 00:00:00 2001 From: chenqi49 <479148871@qq.com> Date: Wed, 2 Sep 2026 17:26:51 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat(domaintest):=20=E5=9F=9F=E5=90=8D?= =?UTF-8?q?=E8=BF=9E=E9=80=9A=E6=80=A7=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6?= =?UTF-8?q?=20+=20wlcb/gy-001=20=E5=8F=AF=E8=BE=BE=E6=80=A7=E6=8A=A5?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ascend_ci_domains.json: ascend CI 白名单 96 条 - test-domains.sh / test-domains-x20.sh / x20-remote.sh: 单次与 ×20 轮压测脚本(经 squid 代理, 采集域名解析 IP + 连通成功率) - REPORT.md / REPORT-x20.md: wlcb(.49) vs gy-001(.37) 域名+IP+可达性报告, 含结构性不可达/间歇性域名/关键修正 --- domaintest/.gitignore | 6 ++ domaintest/REPORT-x20.md | 158 ++++++++++++++++++++++++++++++ domaintest/REPORT.md | 140 ++++++++++++++++++++++++++ domaintest/ascend_ci_domains.json | 98 ++++++++++++++++++ domaintest/test-domains-x20.sh | 52 ++++++++++ domaintest/test-domains.sh | 91 +++++++++++++++++ domaintest/x20-remote.sh | 22 +++++ 7 files changed, 567 insertions(+) create mode 100644 domaintest/.gitignore create mode 100644 domaintest/REPORT-x20.md create mode 100644 domaintest/REPORT.md create mode 100644 domaintest/ascend_ci_domains.json create mode 100644 domaintest/test-domains-x20.sh create mode 100644 domaintest/test-domains.sh create mode 100644 domaintest/x20-remote.sh diff --git a/domaintest/.gitignore b/domaintest/.gitignore new file mode 100644 index 0000000..8763efc --- /dev/null +++ b/domaintest/.gitignore @@ -0,0 +1,6 @@ +results-gy001.tsv +results-wlcb.tsv +results-x20-gy001-new.tsv +results-x20-gy001.tsv +results-x20-wlcb-new.tsv +results-x20-wlcb.tsv \ No newline at end of file diff --git a/domaintest/REPORT-x20.md b/domaintest/REPORT-x20.md new file mode 100644 index 0000000..57de9eb --- /dev/null +++ b/domaintest/REPORT-x20.md @@ -0,0 +1,158 @@ +# 域名连通性 ×20 轮压测报告 (wlcb vs gy-001) + +> 生成时间: 2026-09-02 15:31:00 | 每个域名 **20 轮**「DNS解析 + 经squid代理 curl」, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 96 条) + +## 测试方法 + +- 在 **wlcb**(squid `192.168.1.49`) / **gy-001**(squid `172.16.0.37`) 的 squid pod 内, 每个域名连续 20 轮: `getent hosts` 解析 → `curl -sk --proxy http://127.0.0.1:3128 --max-time 6 https://<域名>/`。 +- 每轮记录解析到的首个 IP; 20 轮 IP 序列可反映 DNS 轮询/多IP。 +- 判定: curl exit 0 = 成功; 28=TIMEOUT / 6=DNSFAIL / 7=CONNFAIL。 +- 成功率为 **20 轮内成功次数**: **稳定**(20/20) / **间歇**(1-19) / **全失败**(0/20)。 +- ⚠️ 单次测试的"可达/不可达"结论不可靠, 必须以多轮为准(见"关键修正")。 + +## 汇总 + +| 集群 | 稳定(20/20) | 间歇(1-19) | 全失败(0/20) | 实测数 | +|---|---|---|---|---| +| wlcb (.49) | 82 | 8 | 2 | 92 | +| gy-001 (.37) | 79 | 10 | 3 | 92 | + +## 结构性全失败 (0/20, 两集群) + +| 域名 | wlcb | gy-001 | 解析IP | 说明 | +|---|---|---|---|---| +| mirrors.ustc.edu.cn | 0/20 | 0/20 | 2001:da8:d800:95::110 | IPv6-only解析, 无IPv6出口 | +| 123.60.114.225 | 0/20 | 0/20 | 123.60.114.225 | 裸IP/源站不可达 | + +## 间歇性域名 (1-19/20, 任一集群) + +| 域名 | wlcb | gy-001 | wlcb 解析IP(去重) | gy001 解析IP(去重) | +|---|---|---|---|---| +| files.pythonhosted.org | 4/20 | 15/20 | 151.101.192.223,151.101.0.223 | 151.101.192.223,151.101.0.223 | +| pytorch-package.obs.cn-north-4.myhuaweicloud.com | 11/20 | 20/20 | 100.125.76.5,100.125.83.133 | 121.36.121.226 | +| mirrors.aliyun.com | 15/20 | 20/20 | 222.138.197.52,124.95.170.12 | 218.61.162.63 | +| op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 17/20 | 16/20 | 116.162.187.35 | 36.158.239.37 | +| www.sqlite.org | 19/20 | 20/20 | 2600:3c02::f03c:95ff:fe07:695 | 2600:3c02::f03c:95ff:fe07:695 | +| archive.ubuntu.com | 19/20 | 20/20 | 91.189.92.22 | 185.125.190.83 | +| pypi.org | 19/20 | 19/20 | 2a04:4e42::223,2a04:4e42:600::223 | 2a04:4e42:400::223,2a04:4e42:600::223 | +| github-cloud.s3.amazonaws.com | 19/20 | 18/20 | 54.231.168.17,16.15.212.164 | 16.15.212.164,16.15.229.22 | +| pkg-containers.githubusercontent.com | 20/20 | 19/20 | 2606:50c0:8000::154 | 2606:50c0:8001::154 | +| release-assets.githubusercontent.com | 20/20 | 19/20 | 185.199.110.133 | 185.199.111.133 | +| github-releases.githubusercontent.com | 20/20 | 18/20 | 2606:50c0:8002::154 | 2606:50c0:8002::154 | +| data.pyg.org | 20/20 | 19/20 | 18.66.112.104 | 3.165.39.106 | +| github-registry-files.githubusercontent.com | 20/20 | 19/20 | 185.199.108.154 | 185.199.110.154 | +| goproxy.cn | 20/20 | 13/20 | 211.154.247.40 | 36.110.220.113,36.110.220.110 | + +## 新增域名 (2026-09-02) + +| 域名 | wlcb | gy-001 | wlcb IP | +|---|---|---|---| +| repo.mindspore.cn | 20/20 | 20/20 | 124.70.125.215 | +| repo.oepkgs.net | 20/20 | 20/20 | 121.36.99.241 | +| repo.openeuler.org | 20/20 | 20/20 | 49.0.229.41 | +| ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | + +## 关键修正 (vs 单次测试结论) + +1. **`goproxy.cn` 不是结构性阻断**: gy-001 实测 **13/20**(65%), 属间歇性 —— 之前单次测试恰好撞上坏时刻。 +2. **`pytorch-package.obs` 的华为私网 IP `100.125.x.x` 在 wlcb 部分可达(11/20, 55%)**: 不是完全不可路由; wlcb 集群网络能连到私网 OBS 端点但链路极不稳, 这正是 op-plugin 全挂与 `NONE_NONE/503` 间歇的根源。 +3. **`github.com` 在 gy-001 曾 0/20**: 固定解析到 `20.205.243.166`(Azure 亚太), 存在间歇性下行窗口。 +4. **`files.pythonhosted.org`**: wlcb 仅 **4/20**(Fastly `151.101.x.x` 对 wlcb 链路很差), gy-001 15/20。pip 在 wlcb 会频繁超时。 +5. **`mirrors.ustc.edu.cn` / `123.60.114.225`**: 唯一真正结构性不可达(两集群 0/20)。 + +## 全量明细 (92 条) + +| # | 域名 | wlcb成功率 | gy001成功率 | wlcb IP(去重) | 分类 | +|---|---|---|---|---|---| +| 1 | devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 116.205.76.80 | 稳定 | +| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 114.116.231.65 | 稳定 | +| 3 | download.pytorch.org | 20/20 | 20/20 | 99.84.152.27 | 稳定 | +| 4 | download-r2.pytorch.org | 20/20 | 20/20 | 2606:4700::6812:934 | 稳定 | +| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 11/20 | 20/20 | 100.125.76.5,100.125.83.133 | 间歇 | +| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | +| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | +| 8 | www.sqlite.org | 19/20 | 20/20 | 2600:3c02::f03c:95ff:fe07:695 | 间歇 | +| 9 | sum.golang.google.cn | 20/20 | 20/20 | 114.250.67.43 | 稳定 | +| 10 | data.pyg.org | 20/20 | 19/20 | 18.66.112.104 | 间歇 | +| 11 | obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 114.115.192.27 | 稳定 | +| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 121.36.121.197 | 稳定 | +| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.4 | 稳定 | +| 14 | obs.cn-north-9.myhuaweicloud.com | 20/20 | 20/20 | 100.125.32.30 | 稳定 | +| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 36.156.217.76 | 稳定 | +| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 121.36.235.173 | 稳定 | +| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 17/20 | 16/20 | 116.162.187.35 | 间歇 | +| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 20/20 | 20/20 | 122.9.127.212 | 稳定 | +| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 139.9.224.18 | 稳定 | +| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 20/20 | 20/20 | 2409:2001:100:2::6 | 稳定 | +| 21 | lfs-cdn.openeuler.openatom.cn | 20/20 | 20/20 | 61.135.210.33 | 稳定 | +| 22 | artlfs.openeuler.openatom.cn | 20/20 | 20/20 | 121.36.2.159 | 稳定 | +| 23 | openeuler.openatom.cn | 20/20 | 20/20 | 49.0.231.109 | 稳定 | +| 24 | ru-repo.openeuler.org | 20/20 | 20/20 | 159.138.205.237 | 稳定 | +| 25 | fr-repo.openeuler.org | 20/20 | 20/20 | 49.0.229.174 | 稳定 | +| 26 | www.modelscope.cn | 20/20 | 20/20 | 39.99.133.195 | 稳定 | +| 27 | cdn-lfs-cn-1.modelscope.cn | 20/20 | 20/20 | 221.204.22.20 | 稳定 | +| 28 | gh-proxy.test.osinfra.cn | 20/20 | 20/20 | 202.170.93.254 | 稳定 | +| 29 | apig.openlibing.com | 20/20 | 20/20 | 139.9.154.34 | 稳定 | +| 30 | get.helm.sh | 20/20 | 20/20 | 150.171.110.135 | 稳定 | +| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 122.9.172.3 | 稳定 | +| 32 | archive.ubuntu.com | 19/20 | 20/20 | 91.189.92.22 | 间歇 | +| 33 | security.ubuntu.com | 20/20 | 20/20 | 91.189.91.82,91.189.92.22 | 稳定 | +| 34 | gitee.com | 20/20 | 20/20 | 180.76.199.13 | 稳定 | +| 35 | ports.ubuntu.com | 20/20 | 20/20 | 91.189.92.19 | 稳定 | +| 36 | api.github.com | 20/20 | 20/20 | 20.205.243.168 | 稳定 | +| 37 | broker.actions.githubusercontent.com | 20/20 | 20/20 | 20.85.130.105 | 稳定 | +| 38 | pipelines.actions.githubusercontent.com | 20/20 | 20/20 | 2620:1ec:21::16 | 稳定 | +| 39 | pipelinesghubeus4.actions.githubusercontent.com | 20/20 | 20/20 | 20.232.252.48 | 稳定 | +| 40 | results-receiver.actions.githubusercontent.com | 20/20 | 20/20 | 140.82.112.21,140.82.114.22 | 稳定 | +| 41 | github.com | 20/20 | 0/20 | 20.205.243.166 | 间歇 | +| 42 | codeload.github.com | 20/20 | 20/20 | 20.205.243.165 | 稳定 | +| 43 | objects.githubusercontent.com | 20/20 | 20/20 | 185.199.109.133 | 稳定 | +| 44 | objects-origin.githubusercontent.com | 20/20 | 20/20 | 140.82.113.21,140.82.112.21 | 稳定 | +| 45 | github-releases.githubusercontent.com | 20/20 | 18/20 | 2606:50c0:8002::154 | 间歇 | +| 46 | github-registry-files.githubusercontent.com | 20/20 | 19/20 | 185.199.108.154 | 间歇 | +| 47 | pkg-containers.githubusercontent.com | 20/20 | 19/20 | 2606:50c0:8000::154 | 间歇 | +| 48 | ghcr.io | 20/20 | 20/20 | 20.205.243.164 | 稳定 | +| 49 | github-cloud.githubusercontent.com | 20/20 | 20/20 | 185.199.110.154 | 稳定 | +| 50 | github-cloud.s3.amazonaws.com | 19/20 | 18/20 | 54.231.168.17,16.15.212.164 | 间歇 | +| 51 | dependabot-actions.githubapp.com | 20/20 | 20/20 | 140.82.112.22,140.82.113.21 | 稳定 | +| 52 | release-assets.githubusercontent.com | 20/20 | 19/20 | 185.199.110.133 | 间歇 | +| 53 | api.snapcraft.io | 20/20 | 20/20 | 185.125.188.59 | 稳定 | +| 54 | pipelinesghubeus1.actions.githubusercontent.com | 20/20 | 20/20 | 20.242.179.206 | 稳定 | +| 55 | pipelinesghubeus2.actions.githubusercontent.com | 20/20 | 20/20 | 20.242.161.191 | 稳定 | +| 56 | pipelinesghubeus3.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.36.236 | 稳定 | +| 57 | pipelinesghubeus5.actions.githubusercontent.com | 20/20 | 20/20 | 20.253.95.3 | 稳定 | +| 58 | pipelinesghubeus6.actions.githubusercontent.com | 20/20 | 20/20 | 20.253.126.26 | 稳定 | +| 59 | pipelinesghubeus7.actions.githubusercontent.com | 20/20 | 20/20 | 20.246.184.240 | 稳定 | +| 60 | pipelinesghubeus8.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.39.220 | 稳定 | +| 61 | pipelinesghubeus9.actions.githubusercontent.com | 20/20 | 20/20 | 40.88.239.133 | 稳定 | +| 62 | pipelinesghubeus10.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.38.122 | 稳定 | +| 63 | pipelinesghubeus11.actions.githubusercontent.com | 20/20 | 20/20 | 20.237.33.78 | 稳定 | +| 64 | pipelinesghubeus12.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.39.57 | 稳定 | +| 65 | download.openmmlab.com | 20/20 | 20/20 | 218.24.90.14 | 稳定 | +| 66 | rsproxy.cn | 20/20 | 20/20 | 110.249.198.6 | 稳定 | +| 67 | goproxy.cn | 20/20 | 13/20 | 211.154.247.40 | 间歇 | +| 68 | repo.anaconda.com | 20/20 | 20/20 | 2606:4700::6810:bf9e | 稳定 | +| 69 | repo.mindspore.cn | 20/20 | 20/20 | 124.70.125.215 | 稳定 | +| 70 | repo.oepkgs.net | 20/20 | 20/20 | 121.36.99.241 | 稳定 | +| 71 | repo.openeuler.org | 20/20 | 20/20 | 49.0.229.41 | 稳定 | +| 72 | mirrors.ustc.edu.cn | 0/20 | 0/20 | 2001:da8:d800:95::110 | 全失败 | +| 73 | lfs-cdn.gitcode.com | 20/20 | 20/20 | 121.22.232.155 | 稳定 | +| 74 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.12 | 稳定 | +| 75 | gitcode.com | 20/20 | 20/20 | 116.205.2.91 | 稳定 | +| 76 | atomgit.com | 20/20 | 20/20 | 116.205.2.91 | 稳定 | +| 77 | mirrors.huaweicloud.com | 20/20 | 20/20 | 120.46.2.67 | 稳定 | +| 78 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | +| 79 | mirrors.aliyun.com | 15/20 | 20/20 | 222.138.197.52,124.95.170.12 | 间歇 | +| 80 | mirrors.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 2402:f000:1:400::2 | 稳定 | +| 81 | repo.huaweicloud.com | 20/20 | 20/20 | 61.135.210.42 | 稳定 | +| 82 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | +| 83 | files.pythonhosted.org | 4/20 | 15/20 | 151.101.192.223,151.101.0.223 | 间歇 | +| 84 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | +| 85 | pypi.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 2402:f000:1:400::2 | 稳定 | +| 86 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.82 | 稳定 | +| 87 | pypi.org | 19/20 | 19/20 | 2a04:4e42::223,2a04:4e42:600::223 | 间歇 | +| 88 | build-env.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | +| 89 | ppa.launchpad.net | 20/20 | 20/20 | 2620:2d:4000:1009::15f | 稳定 | +| 90 | obs-community.obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 114.115.192.27 | 稳定 | +| 91 | ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | +| 92 | 123.60.114.225 | 0/20 | 0/20 | 123.60.114.225 | 全失败 | diff --git a/domaintest/REPORT.md b/domaintest/REPORT.md new file mode 100644 index 0000000..51a3d2c --- /dev/null +++ b/domaintest/REPORT.md @@ -0,0 +1,140 @@ +# 域名可达性对比报告 (wlcb vs gy-001) + +> 第 2 轮测试时间: 2026-09-02 14:23:04 | 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (gitcode.com/zhangdiago/ci-infra @ z00833806/WhiteList) + +## 测试方法 + +- 分别在 **wlcb**(squid `192.168.1.49`) 与 **gy-001**(squid `172.16.0.37`) 集群的 squid pod 内, 经本地代理 `127.0.0.1:3128` 对每个域名执行 `curl -sk --proxy http://127.0.0.1:3128 --max-time 6 https://<域名>/`。 +- 走 squid 代理 = 与 CI build 容器**完全相同的出网路径**; `-k` 忽略证书(只看连通性); 判定: `0=可达(显示HTTP码)` / `28=TIMEOUT` / `6=DNSFAIL` / `7=CONNFAIL`。 +- IP 为 **wlcb 集群 DNS** 解析结果(`getent hosts`); 通配符条目(`*.`)无法直接测, 单列。 +- 上游连通为**瞬时快照**且**双向波动**(见"两轮对比"), 结论以多轮为准。 + +## 汇总 (第 2 轮) + +| 集群 | 可达 | TIMEOUT | DNS失败 | 连接拒绝 | 实测数 | +|---|---|---|---|---|---| +| wlcb (.49) | 86 | 2 | 0 | 0 | 88 | +| gy-001 (.37) | 83 | 5 | 0 | 0 | 88 | + +## 两轮对比 (变化项) + +| 域名 | 第1轮 wlcb/gy001 | 第2轮 wlcb/gy001 | 说明 | +|---|---|---|---| +| pytorch-package.obs.cn-north-4.myhuaweicloud.com | TIMEOUT / 200 | 200 / 200 | **wlcb 恢复** ✅ 今天 op-plugin 故障的 OBS 源, wlcb 现已可达 | +| files.pythonhosted.org | TIMEOUT / 200 | 200 / TIMEOUT | 反向波动: wlcb 恢复, gy001 转超时 | +| github-releases.githubusercontent.com | 403 / TIMEOUT | 403 / 403 | gy001 恢复(上轮超时) | + +## 两集群差异 (第 2 轮) + +| 域名 | wlcb(.49) | gy-001(.37) | +|---|---|---| +| github-cloud.githubusercontent.com | 403 | TIMEOUT | +| goproxy.cn | 200 | TIMEOUT | +| files.pythonhosted.org | 200 | TIMEOUT | + +## 根因分析 (DNS/路由层面) + +| 域名 | 现象 | 根因 | +|---|---|---| +| `pytorch-package.obs.cn-north-4.myhuaweicloud.com` | 第1轮 wlcb TIMEOUT / 第2轮恢复 | **wlcb DNS 曾解析出华为私网 IP `100.125.x.x`**(公网不可路由)导致挂起; gy-001 仅返回公网 `121.36.121.x`。已恢复但**随时可能再波动**。 | +| `mirrors.ustc.edu.cn` | 两轮、两集群都 TIMEOUT | 两集群 DNS 均只解析到 **IPv6** `2001:da8:d800:95::110`, 集群无 IPv6 出口 → **结构性不可达**。 | +| `goproxy.cn` | 两轮 gy001 都 TIMEOUT | 解析正常(腾讯云公网 IP), gy-001 egress 到该网段被路由/防火墙阻断 → **结构性阻断**。 | +| `123.60.114.225` | 两轮、两集群都 TIMEOUT | 白名单裸 IP, 443 未开放或不可达 → **结构性不可达**。 | +| `files.pythonhosted.org` / `github-cloud...` / `github-releases...` | 两集群**轮流**超时 | 解析正常, 属各集群 egress 的**间歇性波动**(Fastly/微软/华为云 CDN 链路不稳)。 | + +## 全量明细 (第 2 轮, 92 条) + +| # | 域名 | IP (wlcb DNS) | wlcb(.49) | gy-001(.37) | 备注 | +|---|---|---|---|---|---| +| 1 | devcloud.cn-north-4.huaweicloud.com | 116.205.76.80 | 200 | 200 | | +| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 114.116.231.65 | 404 | 404 | | +| 3 | download.pytorch.org | 65.8.76.30,65.8.76.80,13.33.151.127,65.8.76.66,99.84.152.27 | 403 | 403 | | +| 4 | download-r2.pytorch.org | 2606:4700::6812:934,2606:4700::6812:834 | 404 | 404 | | +| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 100.125.83.133,100.125.76.5,100.125.83.5,121.36.121.227,121.36.121.226 | 200 | 200 | | +| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 122.9.24.7,122.9.24.4 | 403 | 403 | | +| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 122.9.24.7,122.9.24.4 | 200 | 200 | | +| 8 | www.sqlite.org | 2600:3c02::f03c:95ff:fe07:695 | 200 | 200 | | +| 9 | sum.golang.google.cn | 114.250.65.43,114.250.67.43,120.253.253.107,114.250.70.43,114.250.64.43 | 200 | 200 | | +| 10 | data.pyg.org | 3.165.39.92,3.165.39.39,3.165.39.106,3.165.39.19,18.66.112.104 | 200 | 200 | | +| 11 | obs.cn-north-1.myhuaweicloud.com | 114.115.192.98,114.115.192.27,114.115.192.163 | 403 | 403 | | +| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 121.36.121.197 | 403 | 403 | | +| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 123.60.240.4 | 403 | 403 | | +| 14 | obs.cn-north-9.myhuaweicloud.com | 100.125.32.30,100.125.32.62 | 403 | 403 | | +| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 153.99.246.122,120.72.57.218,140.206.236.180,36.156.217.76,36.150.19.220 | 403 | 403 | | +| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 121.36.235.173 | 403 | 403 | | +| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 157.255.136.19,121.14.196.132,116.162.187.35,36.158.239.37,116.162.11.130 | 403 | 403 | | +| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 122.9.127.212,122.9.127.211 | 403 | 403 | | +| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 139.9.224.18 | 403 | 403 | | +| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 2409:2001:100:2::6 | 403 | 403 | | +| 21 | lfs-cdn.openeuler.openatom.cn | 61.135.210.39,61.135.210.33,61.135.210.30,61.135.210.35,61.135.210.37 | 403 | 403 | | +| 22 | artlfs.openeuler.openatom.cn | 121.36.2.159 | 200 | 200 | | +| 23 | openeuler.openatom.cn | 49.0.231.109 | 302 | 302 | | +| 24 | ru-repo.openeuler.org | 159.138.205.237 | 200 | 200 | | +| 25 | fr-repo.openeuler.org | 49.0.229.174 | 301 | 301 | | +| 26 | www.modelscope.cn | 47.92.141.220,39.99.133.195 | 302 | 302 | | +| 27 | cdn-lfs-cn-1.modelscope.cn | 221.204.22.21,119.249.48.42,221.204.22.24,221.204.22.23,119.249.48.40 | 403 | 403 | | +| 28 | gh-proxy.test.osinfra.cn | 202.170.93.254 | 200 | 200 | | +| 29 | apig.openlibing.com | 139.9.154.34 | 404 | 404 | | +| 30 | get.helm.sh | 150.171.110.133 | 404 | 404 | | +| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 122.9.172.2,122.9.172.3 | 403 | 403 | | +| 32 | archive.ubuntu.com | 91.189.92.24,91.189.91.82,91.189.92.22,185.125.190.81,91.189.91.81 | 200 | 200 | | +| 33 | security.ubuntu.com | 91.189.91.83,91.189.91.82,185.125.190.82,91.189.92.23,91.189.91.81 | 301 | 301 | | +| 34 | gitee.com | 180.76.199.13 | 200 | 200 | | +| 35 | ports.ubuntu.com | 91.189.92.20,91.189.91.103,91.189.91.104,91.189.92.19,91.189.91.102 | 200 | 200 | | +| 36 | api.github.com | 20.205.243.168 | 200 | 200 | | +| 37 | broker.actions.githubusercontent.com | 20.85.130.105 | 404 | 404 | | +| 38 | pipelines.actions.githubusercontent.com | 2620:1ec:21::16 | 404 | 404 | | +| 39 | *.blob.core.windows.net | 通配符 | — | — | 白名单通配条目(*.) | +| 40 | pipelinesghubeus4.actions.githubusercontent.com | 20.232.252.48 | 404 | 404 | | +| 41 | results-receiver.actions.githubusercontent.com | 140.82.112.22,140.82.112.21,140.82.113.21,140.82.113.22,140.82.114.22 | 404 | 404 | | +| 42 | github.com | 20.205.243.166 | 200 | 200 | | +| 43 | *.actions.githubusercontent.com | 通配符 | — | — | 白名单通配条目(*.) | +| 44 | codeload.github.com | 20.205.243.165 | 301 | 301 | | +| 45 | objects.githubusercontent.com | 185.199.109.133,185.199.108.133,185.199.110.133,185.199.111.133 | 404 | 404 | | +| 46 | objects-origin.githubusercontent.com | 140.82.114.22,140.82.112.21,140.82.112.22,140.82.113.21,140.82.113.22 | 405 | 405 | | +| 47 | github-releases.githubusercontent.com | 2606:50c0:8003::154,2606:50c0:8000::154,2606:50c0:8001::154,2606:50c0:8002::154 | 403 | 403 | | +| 48 | github-registry-files.githubusercontent.com | 185.199.108.154,185.199.109.154,185.199.111.154,185.199.110.154 | 403 | 403 | | +| 49 | *.pkg.github.com | 通配符 | — | — | 白名单通配条目(*.) | +| 50 | pkg-containers.githubusercontent.com | 2606:50c0:8003::154,2606:50c0:8000::154,2606:50c0:8001::154,2606:50c0:8002::154 | 400 | 400 | | +| 51 | ghcr.io | 20.205.243.164 | 301 | 301 | | +| 52 | github-cloud.githubusercontent.com | 185.199.108.154,185.199.109.154,185.199.110.154,185.199.111.154 | 403 | TIMEOUT | | +| 53 | github-cloud.s3.amazonaws.com | 16.182.105.33,52.217.117.217,54.231.193.113,52.217.73.204,16.15.252.6 | 403 | 403 | | +| 54 | dependabot-actions.githubapp.com | 140.82.113.21,140.82.112.21,140.82.112.22,140.82.114.21,140.82.114.22 | 404 | 404 | | +| 55 | release-assets.githubusercontent.com | 185.199.109.133,185.199.110.133,185.199.108.133,185.199.111.133 | 404 | 404 | | +| 56 | api.snapcraft.io | 185.125.188.60,185.125.188.54,185.125.188.57,185.125.188.55,185.125.188.58 | 200 | 200 | | +| 57 | *.core.windows.net | 通配符 | — | — | 白名单通配条目(*.) | +| 58 | pipelinesghubeus1.actions.githubusercontent.com | 20.242.179.206 | 404 | 404 | | +| 59 | pipelinesghubeus2.actions.githubusercontent.com | 20.242.161.191 | 404 | 404 | | +| 60 | pipelinesghubeus3.actions.githubusercontent.com | 20.102.36.236 | 404 | 404 | | +| 61 | pipelinesghubeus5.actions.githubusercontent.com | 20.253.95.3 | 404 | 404 | | +| 62 | pipelinesghubeus6.actions.githubusercontent.com | 20.253.126.26 | 404 | 404 | | +| 63 | pipelinesghubeus7.actions.githubusercontent.com | 20.246.184.240 | 404 | 404 | | +| 64 | pipelinesghubeus8.actions.githubusercontent.com | 20.102.39.220 | 404 | 404 | | +| 65 | pipelinesghubeus9.actions.githubusercontent.com | 40.88.239.133 | 404 | 404 | | +| 66 | pipelinesghubeus10.actions.githubusercontent.com | 20.102.38.122 | 404 | 404 | | +| 67 | pipelinesghubeus11.actions.githubusercontent.com | 20.237.33.78 | 404 | 404 | | +| 68 | pipelinesghubeus12.actions.githubusercontent.com | 20.102.39.57 | 404 | 404 | | +| 69 | download.openmmlab.com | 124.95.157.82,36.163.116.58,124.95.157.86,124.95.157.84,124.95.157.83 | 403 | 403 | | +| 70 | rsproxy.cn | 101.126.58.175,101.126.58.176,122.14.229.103,101.126.58.177,110.249.198.6 | 200 | 200 | | +| 71 | goproxy.cn | 211.154.247.40,36.156.9.206,36.110.220.112,36.156.9.207,36.110.220.110,36.110.220.113,36.110.220.114,36.110.220.111,211.154.244.168 | 200 | TIMEOUT | | +| 72 | repo.anaconda.com | 2606:4700::6810:bf9e,2606:4700::6810:20f1 | 200 | 200 | | +| 73 | mirrors.ustc.edu.cn | 2001:da8:d800:95::110 | TIMEOUT | TIMEOUT | | +| 74 | lfs-cdn.gitcode.com | 121.22.232.157,121.22.232.156,121.22.232.155,121.22.232.153,223.68.255.156 | 403 | 403 | | +| 75 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 123.60.240.12,123.60.240.13 | 403 | 403 | | +| 76 | gitcode.com | 116.205.2.91 | 200 | 200 | | +| 77 | atomgit.com | 116.205.2.91 | 200 | 200 | | +| 78 | mirrors.huaweicloud.com | 120.46.2.67,1.92.76.132,123.249.118.101,124.70.61.162,120.46.63.139 | 200 | 200 | | +| 79 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 122.9.24.7,122.9.24.4 | 403 | 403 | | +| 80 | mirrors.aliyun.com | 27.221.122.13,218.61.62.112,218.24.82.120,116.196.142.20,218.61.162.30 | 301 | 301 | | +| 81 | mirrors.tuna.tsinghua.edu.cn | 2402:f000:1:400::2 | 200 | 200 | | +| 82 | repo.huaweicloud.com | 61.135.210.34,61.135.210.41,61.135.210.30,61.135.210.44,61.135.210.43 | 301 | 301 | | +| 83 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 122.9.24.7,122.9.24.4 | 200 | 200 | | +| 84 | files.pythonhosted.org | 151.101.192.223,151.101.128.223,112.121.185.26,151.101.0.223,151.101.64.223 | 200 | TIMEOUT | | +| 85 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 122.9.24.7,122.9.24.4 | 200 | 200 | | +| 86 | pypi.tuna.tsinghua.edu.cn | 2402:f000:1:400::2 | 302 | 302 | | +| 87 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 123.60.240.83 | 403 | 403 | | +| 88 | pypi.org | 2a04:4e42:400::223,2a04:4e42::223,2a04:4e42:600::223,2a04:4e42:200::223 | 200 | 200 | | +| 89 | build-env.obs.cn-north-4.myhuaweicloud.com | 122.9.24.4,122.9.24.7 | 403 | 403 | | +| 90 | ppa.launchpad.net | 2620:2d:4000:1009::1ed,2620:2d:4000:1009::12c,2620:2d:4000:1009::15f | 302 | 302 | | +| 91 | obs-community.obs.cn-north-1.myhuaweicloud.com | 114.115.192.27,114.115.192.98,114.115.192.163 | 403 | 403 | | +| 92 | 123.60.114.225 | 123.60.114.225 | TIMEOUT | TIMEOUT | | diff --git a/domaintest/ascend_ci_domains.json b/domaintest/ascend_ci_domains.json new file mode 100644 index 0000000..34e249c --- /dev/null +++ b/domaintest/ascend_ci_domains.json @@ -0,0 +1,98 @@ +[ + "devcloud.cn-north-4.huaweicloud.com", + "devrepo.devcloud.cn-north-4.huaweicloud.com", + "download.pytorch.org", + "download-r2.pytorch.org", + "pytorch-package.obs.cn-north-4.myhuaweicloud.com", + "pta-pr.obs.cn-north-4.myhuaweicloud.com", + "mindstudio-pr.obs.cn-north-4.myhuaweicloud.com", + "www.sqlite.org", + "sum.golang.google.cn", + "data.pyg.org", + "obs.cn-north-1.myhuaweicloud.com", + "op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com", + "op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com", + "obs.cn-north-9.myhuaweicloud.com", + "op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com", + "op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com", + "op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com", + "op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com", + "op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com", + "obs.dualstack.cn-east-4.myhuaweicloud.com", + "lfs-cdn.openeuler.openatom.cn", + "artlfs.openeuler.openatom.cn", + "openeuler.openatom.cn", + "ru-repo.openeuler.org", + "fr-repo.openeuler.org", + "www.modelscope.cn", + "cdn-lfs-cn-1.modelscope.cn", + "gh-proxy.test.osinfra.cn", + "apig.openlibing.com", + "get.helm.sh", + "openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com", + "archive.ubuntu.com", + "security.ubuntu.com", + "gitee.com", + "ports.ubuntu.com", + "api.github.com", + "broker.actions.githubusercontent.com", + "pipelines.actions.githubusercontent.com", + "*.blob.core.windows.net", + "pipelinesghubeus4.actions.githubusercontent.com", + "results-receiver.actions.githubusercontent.com", + "github.com", + "*.actions.githubusercontent.com", + "codeload.github.com", + "objects.githubusercontent.com", + "objects-origin.githubusercontent.com", + "github-releases.githubusercontent.com", + "github-registry-files.githubusercontent.com", + "*.pkg.github.com", + "pkg-containers.githubusercontent.com", + "ghcr.io", + "github-cloud.githubusercontent.com", + "github-cloud.s3.amazonaws.com", + "dependabot-actions.githubapp.com", + "release-assets.githubusercontent.com", + "api.snapcraft.io", + "*.core.windows.net", + "pipelinesghubeus1.actions.githubusercontent.com", + "pipelinesghubeus2.actions.githubusercontent.com", + "pipelinesghubeus3.actions.githubusercontent.com", + "pipelinesghubeus5.actions.githubusercontent.com", + "pipelinesghubeus6.actions.githubusercontent.com", + "pipelinesghubeus7.actions.githubusercontent.com", + "pipelinesghubeus8.actions.githubusercontent.com", + "pipelinesghubeus9.actions.githubusercontent.com", + "pipelinesghubeus10.actions.githubusercontent.com", + "pipelinesghubeus11.actions.githubusercontent.com", + "pipelinesghubeus12.actions.githubusercontent.com", + "download.openmmlab.com", + "rsproxy.cn", + "goproxy.cn", + "repo.anaconda.com", + "repo.mindspore.cn", + "repo.oepkgs.net", + "repo.openeuler.org", + "https://mirrors.ustc.edu.cn", + "lfs-cdn.gitcode.com", + "cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com", + "gitcode.com", + "atomgit.com", + "mirrors.huaweicloud.com", + "mindcluster.obs.cn-north-4.myhuaweicloud.com", + "mirrors.aliyun.com", + "mirrors.tuna.tsinghua.edu.cn", + "repo.huaweicloud.com", + "mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com", + "files.pythonhosted.org", + "mindx-package.obs.cn-north-4.myhuaweicloud.com", + "pypi.tuna.tsinghua.edu.cn", + "mindie-pr.obs.cn-north-4.myhuaweicloud.com", + "pypi.org", + "build-env.obs.cn-north-4.myhuaweicloud.com", + "ppa.launchpad.net", + "obs-community.obs.cn-north-1.myhuaweicloud.com", + "ascend-cann-open.obs.cn-north-4.myhuaweicloud.com", + "123.60.114.225" +] \ No newline at end of file diff --git a/domaintest/test-domains-x20.sh b/domaintest/test-domains-x20.sh new file mode 100644 index 0000000..f353bfa --- /dev/null +++ b/domaintest/test-domains-x20.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# 对白名单每个域名做 N 轮「DNS 解析 + 经 squid 连通」测试, 采集每轮解析 IP 与连通结果 +# 用法: bash test-domains-x20.sh +# 输出: results-x20-.tsv 每行: 域名|成功数|超时数|DNS失败|连接拒绝|逐轮IP(逗号分隔,N个) +set -u +cd "$(dirname "$0")" + +ROUNDS="${ROUNDS:-20}" +KUBECTL_OPTS="${KUBECTL_OPTS:-}" + +# 从白名单 json 提取实域名(跳过 *. 通配), 拼成空格分隔串(域名无空格/glob 字符, 直接分词安全) +ARGS=$(python3 - <<'PY' +import json +doms = [x.replace("https://","").strip() for x in json.load(open("ascend_ci_domains.json")) if not x.startswith("*")] +print(" ".join(d for d in doms)) +PY +) + +# 在指定集群的 squid pod 内执行 N 轮测试 +run_cluster() { + local kube="$1" pod="$2" out="$3" + echo ">>> [$kube] $pod 开始 ${ROUNDS} 轮 × $(echo "$ARGS" | wc -w) 域名" + kubectl --kubeconfig "$kube" exec -i -n squid "$pod" -c squid -- sh -s -- "$ARGS" "$ROUNDS" <<'REMOTE' > "$out" +set -u +ARGS="$1"; R="$2" +for d in $ARGS; do + ok=0; to=0; dn=0; cn=0; ips="" + i=1 + while [ "$i" -le "$R" ]; do + ip=$(getent hosts "$d" | awk '{print $1}' | head -1) + [ -n "$ip" ] && ips="$ips,$ip" + code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3128 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) + ec=$? + if [ "$ec" -eq 0 ]; then ok=$((ok+1)); else + case "$ec" in + 28) to=$((to+1));; 6) dn=$((dn+1));; 7) cn=$((cn+1));; *) to=$((to+1));; + esac + fi + i=$((i+1)) + done + ips=${ips#,} + echo "$d|$ok|$to|$dn|$cn|$ips" +done +REMOTE + echo ">>> [$kube] 完成: $out" +} + +# 两个集群并行 +run_cluster "$HOME/.kube/wlcb-001.yaml" squid-cache-0 results-x20-wlcb.tsv & +run_cluster "$HOME/.kube/gy-001.yaml" squid-cache-0 results-x20-gy001.tsv & +wait +echo "全部完成" diff --git a/domaintest/test-domains.sh b/domaintest/test-domains.sh new file mode 100644 index 0000000..a19bd13 --- /dev/null +++ b/domaintest/test-domains.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# 域名可达性对比测试: wlcb(.49) vs gy-001(.37) +# 方法: 在各自集群的 squid pod 内, 经本地 squid 代理(127.0.0.1:3128)逐个测试 +# ascend_ci_domains.json 白名单里的域名 (curl -sk 忽略证书, 只看连通性) +# 输出: domaintest/results-wlcb.tsv / results-gy001.tsv + 终端对比表 +set -u + +DIR="$(cd "$(dirname "$0")" && pwd)" +LIST="$DIR/ascend_ci_domains.json" +OUT_W="$DIR/results-wlcb.tsv" +OUT_G="$DIR/results-gy001.tsv" + +# 生成 pod 内执行的脚本: for d in <字面量域名列表>; do curl ...; done +gen_script() { + local doms + doms=$(python3 - "$LIST" <<'PY' +import json, sys +doms = [x.replace("https://", "").strip() for x in json.load(open(sys.argv[1]))] +# 跳过通配符条目(*.), 其余按单引号包好 +print(" ".join("'%s'" % d for d in doms if not d.startswith("*"))) +PY +) + cat </dev/null) + ec=\$? + echo "\$label|\$d|\$ec|\$r" +done +EOF +} + +# 跑一个集群: 参数 = kubeconfig, pod, ns, 标签, 输出文件 +run_cluster() { + local kc="$1" pod="$2" ns="$3" label="$4" out="$5" + echo "[$label] 测试中 ($(python3 -c "import json,sys;print(len([x for x in json.load(open('$LIST')) if not x.startswith('*')]))") 个域名, 经 $pod ..." + gen_script | kubectl --kubeconfig "$kc" exec -i -n "$ns" "$pod" -- sh -s -- "$label" > "$out" 2>/dev/null + echo "[$label] 完成 -> $(wc -l < "$out") 条" +} + +# 归类: 0=可达(code) / 28=超时 / 6=DNS / 7=连接拒绝 / 其他=ERR +classify() { + local ec="$1" code="$2" + if [ "$ec" = "0" ]; then echo "$code"; + elif [ "$ec" = "28" ]; then echo "TIMEOUT"; + elif [ "$ec" = "6" ]; then echo "DNSFAIL"; + elif [ "$ec" = "7" ]; then echo "CONNFAIL"; + else echo "ERR$ec"; fi +} + +run_cluster ~/.kube/wlcb-001.yaml squid-cache-0 squid wlcb "$OUT_W" +run_cluster ~/.kube/gy-001.yaml squid-cache-0 squid gy001 "$OUT_G" + +# 对比表 +python3 - "$OUT_W" "$OUT_G" <<'PY' +import sys +def load(p): + m = {} + for line in open(p): + parts = line.rstrip("\n").split("|") + if len(parts) < 4: continue + lab, dom, ec, rest = parts[0], parts[1], parts[2], parts[3] + code, tm = (rest.split("|") + ["", ""])[:2] + m[dom] = (lab, ec, code, tm) + return m + +w = load(sys.argv[1]); g = load(sys.argv[2]) +def cls(m, d): + if d not in m: return "N/A" + lab, ec, code, tm = m[d] + if ec == "0": return code + return {"28":"TIMEOUT","6":"DNSFAIL","7":"CONNFAIL"}.get(ec, "ERR"+ec) + +doms = sorted(set(w) | set(g)) +print(f"{'DOMAIN':<55} {'wlcb(.49)':<10} {'gy001(.37)':<10}") +print("-"*78) +for d in doms: + print(f"{d:<55} {cls(w,d):<10} {cls(g,d):<10}") +# 汇总 +def summary(m): + ok = sum(1 for d in m if m[d][1] == "0") + to = sum(1 for d in m if m[d][1] == "28") + dns = sum(1 for d in m if m[d][1] == "6") + cn = sum(1 for d in m if m[d][1] == "7") + return ok, to, dns, cn +wo, wt, wd, wc = summary(w) +go, gt, gd, gc = summary(g) +print("-"*78) +print(f"wlcb : 可达{wo} 超时{wt} DNS失败{wd} 连接拒绝{wc}") +print(f"gy001: 可达{go} 超时{gt} DNS失败{gd} 连接拒绝{gc}") +PY diff --git a/domaintest/x20-remote.sh b/domaintest/x20-remote.sh new file mode 100644 index 0000000..dd80406 --- /dev/null +++ b/domaintest/x20-remote.sh @@ -0,0 +1,22 @@ +# 远程循环体: 在 squid pod 内运行 (由 kubectl exec sh -s -- ARGS ROUNDS < 本文件 调用) +# ARGS=$1: 空格分隔域名; R=$2: 轮数 +set -u +ARGS="$1"; R="$2" +for d in $ARGS; do + ok=0; to=0; dn=0; cn=0; ips="" + i=1 + while [ "$i" -le "$R" ]; do + ip=$(getent hosts "$d" | awk '{print $1}' | head -1) + [ -n "$ip" ] && ips="$ips,$ip" + code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3128 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) + ec=$? + if [ "$ec" -eq 0 ]; then ok=$((ok+1)); else + case "$ec" in + 28) to=$((to+1));; 6) dn=$((dn+1));; 7) cn=$((cn+1));; *) to=$((to+1));; + esac + fi + i=$((i+1)) + done + ips=${ips#,} + echo "$d|$ok|$to|$dn|$cn|$ips" +done From 1980de649cde300995e6c3e19d98c20f19bc1f3f Mon Sep 17 00:00:00 2001 From: chenqi49 <479148871@qq.com> Date: Thu, 3 Sep 2026 15:51:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat(domaintest):=20=E6=96=B0=E5=A2=9E=20pr?= =?UTF-8?q?oxy=20vs=20=E7=9B=B4=E8=BF=9E=20=C3=9720=20=E8=BD=AE=E5=AF=B9?= =?UTF-8?q?=E6=AF=94=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4 组合(wlcb/gy-001 × 经squid proxy/直连)每域20轮, 92域全量。 核心: proxy 路径独有劣化(goproxy.cn gy-001 8/20、pytorch-package.obs wlcb 10/20 等), 根因= squid 单IP固定/keep-alive半开复用/超时口径错配; github.com gy-001 两路径0/20 为出口层间歇黑洞, 与 squid 无关。 --- domaintest/REPORT-proxy-vs-direct.md | 173 +++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 domaintest/REPORT-proxy-vs-direct.md diff --git a/domaintest/REPORT-proxy-vs-direct.md b/domaintest/REPORT-proxy-vs-direct.md new file mode 100644 index 0000000..a608515 --- /dev/null +++ b/domaintest/REPORT-proxy-vs-direct.md @@ -0,0 +1,173 @@ +# 域名连通性 Proxy vs 直连 对比报告 (wlcb vs gy-001) + +> 生成时间: 2026-09-03 15:48:00 | 每个域名 **20 轮 × 2 模式**(经 squid proxy / 直连), 两集群并行, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 92 条实域名) + +## 测试方法 + +- 4 组合: **wlcb**(squid `192.168.1.49`) / **gy-001**(squid `172.16.0.37`) × **经 proxy** `curl -sk --proxy http://127.0.0.1:3128` / **直连** `curl -sk`。 +- 均在各自 squid pod 内执行(`kubectl exec`), 每域每模式连续 20 轮, `--max-time 6`。 +- **关键前提**: proxy 与直连跑在**同一个 pod / 同一节点 / 同一出口 NAT**, 因此外部可达性差异**只可能来自 squid 处理逻辑**(DNS 缓存、连接复用、超时), 而不是出口不同。 +- 判定: curl exit 0 = 成功; 28=TIMEOUT / 6=DNSFAIL / 7=CONNFAIL。成功率 = 20 轮成功数。 +- 分类: **稳定**(proxy=直连=20/20) / **proxy劣化**(proxy<直连) / **直连劣化**(直连 Date: Thu, 3 Sep 2026 15:59:46 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix(domaintest):=20=E4=BF=AE=E6=AD=A3=20pro?= =?UTF-8?q?xy-vs-direct=20=E6=8A=A5=E5=91=8A=E6=A0=B9=E5=9B=A0=E5=88=86?= =?UTF-8?q?=E6=9E=90=E4=B8=8E=E4=BF=AE=E5=A4=8D=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对照 Squid 7.7 官方文档核实(线上实测 7.7.1): - 根因1改写: squid 有顺序 failover(坏 IP 判死后换下一个), 并非"单IP固定"; 差距在 connect_timeout 2m 判死过慢, 赶不上 curl 6s 预算(合并原1+3为主因) - 次因: positive_dns_ttl(默认6h上限)内坏 IP 被重复首选 - pconn 半开复用降级为存疑: 空闲由 pconn_timeout(默认1min)管而非 read_timeout, NAT idle 回收 <60s 才成立, 需 A/B 验证 - 修复建议勘误: connect_retries 不支持 acl 且管同连接重开(默认不重试); balance_on_multiple_ip 已在 Squid5+ 移除; connect_timeout 建议 3~5s 而非 15s; 新增 forward_max_tries 说明 --- domaintest/REPORT-proxy-vs-direct.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/domaintest/REPORT-proxy-vs-direct.md b/domaintest/REPORT-proxy-vs-direct.md index a608515..3c46872 100644 --- a/domaintest/REPORT-proxy-vs-direct.md +++ b/domaintest/REPORT-proxy-vs-direct.md @@ -56,22 +56,24 @@ **取证事实**(两集群 squid pod 内实测): - `resolv.conf` 相同(集群 DNS `169.254.20.10` + `10.247.3.10`), proxy 与直连**用的是同一 DNS 源** → 排除"DNS 服务器不同"。 - 问题域名均为**多 IP 大池**: `goproxy.cn` 解析出 **13 个 IP**(36.110.220.x / 112.84.130.x / 211.154.x / 36.249.80.x / 45.250.40.239); `files.pythonhosted.org` 5 个 IP(151.101.x.x + 国内节点 112.121.185.26); `pytorch-package.obs` 混合 私网 100.125.x.x + 公网 121.36.121.x。 -- squid.conf 仅 `read_timeout 30 minutes` + `connect_timeout 2 minutes`, **无 `dns_v4_first` / `pconn_timeout` / `connect_retries`**。 +- squid 版本 **7.7.1**(pod 内 `squid --version` 实测); squid.conf 仅 `read_timeout 30 minutes` + `connect_timeout 2 minutes`, **无 `dns_v4_first` / `pconn_timeout` 显式配置**。 -据此归纳 4 条根因: +据此归纳根因(按证据强度排序, 已对照 Squid v7.7 官方文档核实): -1. **squid 单 IP 固定, 无 per-request 多 IP 故障转移**: squid 每次连接按 DNS 缓存结果固定用一个 IP, 一旦该 IP 在出口侧不通/慢, 后续所有请求都撞同一个坏 IP; 直连 curl 每轮重新解析且可换 IP 重试, 命中好 IP 概率高。这解释了 `goproxy.cn`(gy-001 13 IP 池) proxy 8/20 vs 直连 18/20 的 10 次差。 -2. **上游 keep-alive 半开连接复用**: squid 默认长时间保留空闲上游连接(`read_timeout 30m`), 经 NAT/状态防火墙的空闲连接被回收后, 复用即半开, 首个请求卡到超时; 直连每次全新 TCP 无此问题。这解释了多 IP CDN(pythonhosted/pypi/github cdn 子域)proxy 系统性低 1~6 次。 -3. **squid 超时口径与 curl 6s 预算错配**: squid `connect_timeout 2m`, 意为它会为一次失败连接耗到 2 分钟(含按坏 IP→好 IP 的顺序尝试); 而 curl `--max-time 6` 6 秒就放弃。只要 squid 在 6 秒内没把首个字节送回来, 就计失败——即使 squid 之后能成功。跨区域慢链路(wlcb→cn-north-4 OBS)尤其吃亏。 -4. **`github.com`(gy-001) 两路径 0/20 = 出口层黑洞, 与 squid 无关**: 固定解析到单一 IP `20.205.243.166`(Azure 亚太)。同一 IP 在 wlcb(.49) 本轮 20/20 全通、gy-001(.37) 两路径 0/20 → **节点 .37 到该 IP 的路由当前断流**, 属间歇性(3 轮测试时曾 3/3, x20 报告也曾 0/20)。squid 绕不开, 只能靠 M3 cache_peer 稳定出口或 gh-proxy 回退。 +1. **主因: `connect_timeout 2m` 导致坏 IP 判死过慢, 顺序 failover 赶不上客户端 6s 预算**。squid 的解析器按首选顺序使用多 IP, 且**只在当前 IP 失败后才轮到下一个**(官方 `balance_on_multiple_ip` 文档语义: "use these IP in order and only rotates to the next listed when the most preferred fails"; 该指令 v5 起已移除, 此行为成为默认)。但"判死"要等 `connect_timeout`(本环境 2 分钟)——SYN 黑洞型坏 IP 下, squid 在客户端 `--max-time 6` 内根本走不完"判死→换 IP→建连→TLS→首字节"。而 curl 直连走 Happy Eyeballs, ~200ms 级即切换下一地址。合并解释了全部 proxy 劣化现象: `goproxy.cn`(gy-001, 13 IP 池) 8/20 vs 18/20、`pytorch-package.obs`(wlcb, 混私网/公网 IP) 10/20 vs 20/20、以及 pythonhosted/pypi/github cdn 子域的系统性低 1~6 次。跨区域慢链路(wlcb→cn-north-4 OBS)下延迟叠加, 更是必然超预算。 +2. **次因: DNS 首选排序在 TTL 内保持, 坏 IP 被重复首选**。squid 缓存解析结果(有效 TTL = 记录 TTL 与 `positive_dns_ttl` 上限[默认 6h]取小), TTL 内对同一域名始终先试同一个坏首选 IP, 换 IP 的机会被推迟; curl 每轮重新解析, 命中好 IP 概率自然更高。 +3. **存疑(未证实): pconn 空闲半开连接复用**。空闲 server 侧 keep-alive 由 `pconn_timeout` 管(默认 1 minute; `read_timeout` 管的是活动连接 read 间隔, 30m 与空闲复用无关)。复用半开连接的窗口 ≤60s, 只有 NAT/状态防火墙对 established TCP 的 idle 回收 <60s 才成立——多数设备 ≥5min。要坐实需 A/B: 关闭 server pconn(`server_pconn_for_domain`/`pconn_timeout 0`) 对比成功率。 +4. **无关 squid: `github.com`(gy-001) 两路径 0/20 = 出口层黑洞**。固定解析到单一 IP `20.205.243.166`(Azure 亚太)。同一 IP 在 wlcb(.49) 本轮 20/20 全通、gy-001(.37) 两路径 0/20 → **节点 .37 到该 IP 的路由当前断流**, 属间歇性(3 轮测试时曾 3/3, x20 报告也曾 0/20)。squid 绕不开, 只能靠 M3 cache_peer 稳定出口或 gh-proxy 回退。 + +> 注: 初版报告曾把根因 1 表述为"单 IP 固定、无故障转移", 经查证有误——squid 有顺序 failover, 差距在**判死速度**(受 connect_timeout 拖累)而非"不会换 IP"。 ## 结论与修复方向 -- **squid 侧(可调, 收益最大)**: - - `dns_v4_first on` — 避免 IPv6 挂起(部分 CDN 解析到 IPv6 先试)。 - - 缩短 `pconn_timeout`(如 30s)/ 调小 `read_timeout`, 减少半开连接复用。 - - 对多 IP CDN 配 `connect_retries`(acl) 或 `balance_on_multiple_ip`, 让 squid 单请求可换 IP。 - - 调小 `connect_timeout`(如 15s) 匹配客户端预算, 避免坏 IP 顺序试连拖垮首个字节时间。 +- **squid 侧(按收益排序)**: + - **调小 `connect_timeout`(建议 3~5s)** — 让顺序 failover 能在客户端 6s 预算内完成 1~2 次 IP 切换。正常建连 <1s, 该值只影响坏 IP 判死速度, 3~5s 是安全下限。(收益最大, 直击主因) + - `dns_v4_first on` — 避免 IPv6 优先挂起(pypi/pythonhosted 解析出 IPv6 且集群无 v6 出口时, 默认行为会先耗一个地址预算)。 + - `forward_max_tries`(默认 10, 一般无需动) — 控制"换 IP 重试"的高层上限; ⚠️ `connect_retries` 不是本场景的解: 它管"同一 TCP 连接重开次数"(默认不重试)且不支持按 acl, `balance_on_multiple_ip` 在 Squid 5+ 已移除(7.7.1 不可用), 初版建议有误。 + - `pconn_timeout`(默认 1min): 是否调小存疑(见根因 3), 建议先 A/B 验证半开复用是否真实发生, 再决定。 - **跨区域 OBS(wlcb→pytorch-package.obs)**: 直连 20/20 而 proxy 10/20, 建议对该域配 cache_peer/固定私网 IP 路由, 让 squid 走与直连相同的稳定路径。 - **github.com 黑洞(.37)**: 属出口路由问题, squid 无法根治; 维持 main2main 的 gh-proxy/git-cdn 回退 + M3 cache_peer 稳定出口。 From 56f0fde83337cb7af9fc498c40b21025fc485ed5 Mon Sep 17 00:00:00 2001 From: chenqi49 <479148871@qq.com> Date: Thu, 3 Sep 2026 20:51:55 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(domaintest):=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=AB=AF=E5=8F=A3=203128=E2=86=923129=20(squ?= =?UTF-8?q?id=20=E8=80=8C=E9=9D=9E=20nginx)=20=E5=B9=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=E5=9F=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因: pod 内 127.0.0.1:3128 是 registry-proxy(rpardini nginx), squid 监听 3129 (http_port 3129 ssl-bump); CI 客户端经 Service 3128 被 DNAT 到 3129。 旧版所有 x20/proxy-vs-direct 报告测的是 nginx 出口, 结论无效。 - 脚本: x20-remote.sh / test-domains.sh / test-domains-x20.sh 代理端口改为 3129, x20-remote.sh 增加端口说明注释。 - REPORT-x20.md: 重写为修正版, 新增三集群(gy-001/wlcb-001/gy-002)真实基线: 92 域 0 个全挂, 9 个间歇(全为 CDN 多 IP 偶发抖动); 旧的 "mirrors.ustc/ 123.60.114.225/data.pyg.org/github.com 黑洞" 结论推翻。 - REPORT-proxy-vs-direct.md: 顶部加作废声明, 标注其 3128 分析不适用 squid 路径。 --- domaintest/REPORT-proxy-vs-direct.md | 6 +- domaintest/REPORT-x20.md | 273 +++++++++++++-------------- domaintest/test-domains-x20.sh | 2 +- domaintest/test-domains.sh | 2 +- domaintest/x20-remote.sh | 5 +- 5 files changed, 144 insertions(+), 144 deletions(-) diff --git a/domaintest/REPORT-proxy-vs-direct.md b/domaintest/REPORT-proxy-vs-direct.md index 3c46872..88abe7e 100644 --- a/domaintest/REPORT-proxy-vs-direct.md +++ b/domaintest/REPORT-proxy-vs-direct.md @@ -1,8 +1,10 @@ # 域名连通性 Proxy vs 直连 对比报告 (wlcb vs gy-001) -> 生成时间: 2026-09-03 15:48:00 | 每个域名 **20 轮 × 2 模式**(经 squid proxy / 直连), 两集群并行, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 92 条实域名) +> ⚠️ **作废声明 (2026-09-03)**: 本报告的 `--proxy http://127.0.0.1:3128` 在 squid pod 内命中的是 **registry-proxy (rpardini nginx)**, 不是 squid —— squid 实际监听 `3129` (`http_port 3129 ssl-bump`)。因此本报告全部"proxy 劣化"分析测的是 **nginx 出口**, 结论**不适用于生产 squid 路径**。真实 squid 路径基线见 [REPORT-x20.md](REPORT-x20.md) 修正版: 三集群 92 域 0 个全挂, 仅 CDN 多 IP 偶发抖动。本报告保留仅供方法学复盘, **请勿引用其中结论**。 -## 测试方法 +> 生成时间: 2026-09-03 15:48:00 | 每个域名 **20 轮 × 2 模式**(经 proxy / 直连), 两集群并行, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 92 条实域名) + +## 测试方法 (已失效, 见上方作废声明) - 4 组合: **wlcb**(squid `192.168.1.49`) / **gy-001**(squid `172.16.0.37`) × **经 proxy** `curl -sk --proxy http://127.0.0.1:3128` / **直连** `curl -sk`。 - 均在各自 squid pod 内执行(`kubectl exec`), 每域每模式连续 20 轮, `--max-time 6`。 diff --git a/domaintest/REPORT-x20.md b/domaintest/REPORT-x20.md index 57de9eb..3e32e2c 100644 --- a/domaintest/REPORT-x20.md +++ b/domaintest/REPORT-x20.md @@ -1,158 +1,153 @@ -# 域名连通性 ×20 轮压测报告 (wlcb vs gy-001) +# 域名连通性 ×20 轮压测报告 (gy-001 / wlcb-001 / gy-002) -> 生成时间: 2026-09-02 15:31:00 | 每个域名 **20 轮**「DNS解析 + 经squid代理 curl」, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 96 条) +> 修正版生成时间: 2026-09-03 | 每个域名 **20 轮**「DNS解析 + 经 squid 代理 curl」, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 92 条, 跳过 `*.` 通配) + +## ⚠️ 测试方法修正说明 (重要) + +**旧版报告的代理端口用错了, 本报告为修正后的真实数据。** + +| 版本 | 代理端口 | 实际命中的组件 | 结论有效性 | +|---|---|---|---| +| **旧版 (作废)** | `127.0.0.1:3128` | 同 pod 的 **registry-proxy (rpardini nginx)**, 不是 squid | ❌ 无效 (测的是 nginx 出口) | +| **本版 (修正)** | `127.0.0.1:3129` | **squid** (`http_port 3129 ssl-bump`) | ✅ 真实 CI 路径 | + +架构依据: Service `squid-cache:3128` → `targetPort 3129` → squid; 而 pod 内 `127.0.0.1:3128` 是 registry-proxy (也是 squid `cache_peer` 的上游, 见 squid.conf `cache_peer 127.0.0.1 parent 3128 name=registryproxy`)。CI 客户端经 Service 3128 会被 DNAT 到 3129, 与 pod 内直连 3129 **等价**。 + +**旧版结论被推翻**: 旧报告里的 `mirrors.ustc.edu.cn / 123.60.114.225 / data.pyg.org / github.com` 等"黑洞/0-20"其实是 **nginx 出口能力弱** 的假象, 换到 squid 真实路径后几乎全部可达(见下)。脚本已同步修正: [x20-remote.sh](x20-remote.sh) / [test-domains.sh](test-domains.sh) / [test-domains-x20.sh](test-domains-x20.sh)。 ## 测试方法 -- 在 **wlcb**(squid `192.168.1.49`) / **gy-001**(squid `172.16.0.37`) 的 squid pod 内, 每个域名连续 20 轮: `getent hosts` 解析 → `curl -sk --proxy http://127.0.0.1:3128 --max-time 6 https://<域名>/`。 -- 每轮记录解析到的首个 IP; 20 轮 IP 序列可反映 DNS 轮询/多IP。 -- 判定: curl exit 0 = 成功; 28=TIMEOUT / 6=DNSFAIL / 7=CONNFAIL。 +- 在 **gy-001**(squid `172.16.0.37`) / **wlcb-001**(squid `192.168.1.49`) / **gy-002** 的 `squid-cache-0` pod 内, 每个域名连续 20 轮: `getent hosts` 解析 → `curl -sk --proxy http://127.0.0.1:3129 --max-time 6 https://<域名>/`。 +- 每轮记录解析到的首个 IP; 20 轮 IP 序列可反映 DNS 轮询/多 IP。 +- 判定: curl exit 0 = 成功; 28=TIMEOUT / 6=DNSFAIL / 7=CONNFAIL。本轮三集群均无 DNSFAIL/CONNFAIL, 失败全部是超时。 - 成功率为 **20 轮内成功次数**: **稳定**(20/20) / **间歇**(1-19) / **全失败**(0/20)。 -- ⚠️ 单次测试的"可达/不可达"结论不可靠, 必须以多轮为准(见"关键修正")。 ## 汇总 | 集群 | 稳定(20/20) | 间歇(1-19) | 全失败(0/20) | 实测数 | |---|---|---|---|---| -| wlcb (.49) | 82 | 8 | 2 | 92 | -| gy-001 (.37) | 79 | 10 | 3 | 92 | - -## 结构性全失败 (0/20, 两集群) +| gy-001 (.37) | 86 | 6 | **0** | 92 | +| wlcb-001 (.49) | 89 | 3 | **0** | 92 | +| gy-002 | 88 | 4 | **0** | 92 | -| 域名 | wlcb | gy-001 | 解析IP | 说明 | -|---|---|---|---|---| -| mirrors.ustc.edu.cn | 0/20 | 0/20 | 2001:da8:d800:95::110 | IPv6-only解析, 无IPv6出口 | -| 123.60.114.225 | 0/20 | 0/20 | 123.60.114.225 | 裸IP/源站不可达 | +> **三集群均无完全不可达域名** (修正前旧版 gy-001/wlcb 各有 2~4 个 0/20, 均为 nginx 路径假象)。 -## 间歇性域名 (1-19/20, 任一集群) +## 间歇性域名 (任一集群 < 20/20, 共 9 个) -| 域名 | wlcb | gy-001 | wlcb 解析IP(去重) | gy001 解析IP(去重) | +| 域名 | gy-001 | wlcb-001 | gy-002 | 说明 | |---|---|---|---|---| -| files.pythonhosted.org | 4/20 | 15/20 | 151.101.192.223,151.101.0.223 | 151.101.192.223,151.101.0.223 | -| pytorch-package.obs.cn-north-4.myhuaweicloud.com | 11/20 | 20/20 | 100.125.76.5,100.125.83.133 | 121.36.121.226 | -| mirrors.aliyun.com | 15/20 | 20/20 | 222.138.197.52,124.95.170.12 | 218.61.162.63 | -| op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 17/20 | 16/20 | 116.162.187.35 | 36.158.239.37 | -| www.sqlite.org | 19/20 | 20/20 | 2600:3c02::f03c:95ff:fe07:695 | 2600:3c02::f03c:95ff:fe07:695 | -| archive.ubuntu.com | 19/20 | 20/20 | 91.189.92.22 | 185.125.190.83 | -| pypi.org | 19/20 | 19/20 | 2a04:4e42::223,2a04:4e42:600::223 | 2a04:4e42:400::223,2a04:4e42:600::223 | -| github-cloud.s3.amazonaws.com | 19/20 | 18/20 | 54.231.168.17,16.15.212.164 | 16.15.212.164,16.15.229.22 | -| pkg-containers.githubusercontent.com | 20/20 | 19/20 | 2606:50c0:8000::154 | 2606:50c0:8001::154 | -| release-assets.githubusercontent.com | 20/20 | 19/20 | 185.199.110.133 | 185.199.111.133 | -| github-releases.githubusercontent.com | 20/20 | 18/20 | 2606:50c0:8002::154 | 2606:50c0:8002::154 | -| data.pyg.org | 20/20 | 19/20 | 18.66.112.104 | 3.165.39.106 | -| github-registry-files.githubusercontent.com | 20/20 | 19/20 | 185.199.108.154 | 185.199.110.154 | -| goproxy.cn | 20/20 | 13/20 | 211.154.247.40 | 36.110.220.113,36.110.220.110 | - -## 新增域名 (2026-09-02) - -| 域名 | wlcb | gy-001 | wlcb IP | -|---|---|---|---| -| repo.mindspore.cn | 20/20 | 20/20 | 124.70.125.215 | -| repo.oepkgs.net | 20/20 | 20/20 | 121.36.99.241 | -| repo.openeuler.org | 20/20 | 20/20 | 49.0.229.41 | -| ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | +| data.pyg.org | 16/20 | 10/20 | 20/20 | CloudFront 多 IP (`13.225.x.x` 慢 / `18.66.x.x` 快), wlcb 最差 | +| github.com | 19/20 | 20/20 | 18/20 | 固定 `20.205.243.166`, 各集群偶发 1~2 次超时 | +| github-registry-files.githubusercontent.com | 19/20 | 20/20 | 20/20 | 偶发 1 次 | +| github-cloud.githubusercontent.com | 19/20 | 20/20 | 20/20 | 偶发 1 次 | +| release-assets.githubusercontent.com | 19/20 | 20/20 | 17/20 | gy-002 3 次超时 | +| results-receiver.actions.githubusercontent.com | 20/20 | 19/20 | 20/20 | 偶发 1 次 | +| files.pythonhosted.org | 19/20 | 20/20 | 20/20 | gy-001 偶发 1 次 (旧版 gy-001 仅 4~14/20) | +| pypi.org | 20/20 | 20/20 | 19/20 | gy-002 偶发 1 次 | +| 123.60.114.225 | 20/20 | 19/20 | 19/20 | 裸 IP 源站, 偶发超时 (旧版三集群 0/20) | -## 关键修正 (vs 单次测试结论) +## 修正后关键结论 (对比旧版) -1. **`goproxy.cn` 不是结构性阻断**: gy-001 实测 **13/20**(65%), 属间歇性 —— 之前单次测试恰好撞上坏时刻。 -2. **`pytorch-package.obs` 的华为私网 IP `100.125.x.x` 在 wlcb 部分可达(11/20, 55%)**: 不是完全不可路由; wlcb 集群网络能连到私网 OBS 端点但链路极不稳, 这正是 op-plugin 全挂与 `NONE_NONE/503` 间歇的根源。 -3. **`github.com` 在 gy-001 曾 0/20**: 固定解析到 `20.205.243.166`(Azure 亚太), 存在间歇性下行窗口。 -4. **`files.pythonhosted.org`**: wlcb 仅 **4/20**(Fastly `151.101.x.x` 对 wlcb 链路很差), gy-001 15/20。pip 在 wlcb 会频繁超时。 -5. **`mirrors.ustc.edu.cn` / `123.60.114.225`**: 唯一真正结构性不可达(两集群 0/20)。 +1. **`goproxy.cn` 三集群全部 20/20** (旧版 gy-001 仅 8~11/20)。旧版劣化实为 squid 路径 `connect_timeout 5s` 顺序 failover 与 curl 6s 预算错配 —— 但那是 nginx 路径测不出来的; 真实 squid 路径下 goproxy 完全稳定。 +2. **`mirrors.ustc.edu.cn` / `123.60.114.225` 不再是黑洞**: 修正后 wlcb/gy-002 各有 1 次偶发超时, gy-001 全通。旧版"结构性不可达"结论作废 (nginx 出口无法到达, 与 squid 无关)。 +3. **`github.com` 主域整体健康**: gy-001 19/20、wlcb 20/20、gy-002 18/20, 仅偶发 1~2 次超时。旧版 gy-001 曾 0/20 属 nginx 路径 + 间歇窗口叠加, 不代表 squid 出口阻断。 +4. **`pytorch-package.obs.cn-north-4` 三集群 20/20** (旧版 wlcb 仅 11/20): squid 路径下跨区域 OBS 稳定。 +5. **`data.pyg.org` 是唯一仍有实质抖动** 的域名: wlcb 10/20、gy-001 16/20, 与 squid 无关, 属 CloudFront 部分边缘节点 (wlcb 出口 `13.225.134.125` 慢) 问题。 +6. **结论**: 生产 squid (3129) 出口对 ascend CI 白名单 92 域全部可达, 无结构性阻断; 剩余间歇均为 CDN 多 IP 轮询 + 出口偶发抖动的正常噪声量级。 -## 全量明细 (92 条) +## 全量明细 (92 条, 分类按三集群最差) -| # | 域名 | wlcb成功率 | gy001成功率 | wlcb IP(去重) | 分类 | +| # | 域名 | gy-001 | wlcb-001 | gy-002 | 分类 | |---|---|---|---|---|---| -| 1 | devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 116.205.76.80 | 稳定 | -| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 114.116.231.65 | 稳定 | -| 3 | download.pytorch.org | 20/20 | 20/20 | 99.84.152.27 | 稳定 | -| 4 | download-r2.pytorch.org | 20/20 | 20/20 | 2606:4700::6812:934 | 稳定 | -| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 11/20 | 20/20 | 100.125.76.5,100.125.83.133 | 间歇 | -| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | -| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | -| 8 | www.sqlite.org | 19/20 | 20/20 | 2600:3c02::f03c:95ff:fe07:695 | 间歇 | -| 9 | sum.golang.google.cn | 20/20 | 20/20 | 114.250.67.43 | 稳定 | -| 10 | data.pyg.org | 20/20 | 19/20 | 18.66.112.104 | 间歇 | -| 11 | obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 114.115.192.27 | 稳定 | -| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 121.36.121.197 | 稳定 | -| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.4 | 稳定 | -| 14 | obs.cn-north-9.myhuaweicloud.com | 20/20 | 20/20 | 100.125.32.30 | 稳定 | -| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 36.156.217.76 | 稳定 | -| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 121.36.235.173 | 稳定 | -| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 17/20 | 16/20 | 116.162.187.35 | 间歇 | -| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 20/20 | 20/20 | 122.9.127.212 | 稳定 | -| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 139.9.224.18 | 稳定 | -| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 20/20 | 20/20 | 2409:2001:100:2::6 | 稳定 | -| 21 | lfs-cdn.openeuler.openatom.cn | 20/20 | 20/20 | 61.135.210.33 | 稳定 | -| 22 | artlfs.openeuler.openatom.cn | 20/20 | 20/20 | 121.36.2.159 | 稳定 | -| 23 | openeuler.openatom.cn | 20/20 | 20/20 | 49.0.231.109 | 稳定 | -| 24 | ru-repo.openeuler.org | 20/20 | 20/20 | 159.138.205.237 | 稳定 | -| 25 | fr-repo.openeuler.org | 20/20 | 20/20 | 49.0.229.174 | 稳定 | -| 26 | www.modelscope.cn | 20/20 | 20/20 | 39.99.133.195 | 稳定 | -| 27 | cdn-lfs-cn-1.modelscope.cn | 20/20 | 20/20 | 221.204.22.20 | 稳定 | -| 28 | gh-proxy.test.osinfra.cn | 20/20 | 20/20 | 202.170.93.254 | 稳定 | -| 29 | apig.openlibing.com | 20/20 | 20/20 | 139.9.154.34 | 稳定 | -| 30 | get.helm.sh | 20/20 | 20/20 | 150.171.110.135 | 稳定 | -| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 122.9.172.3 | 稳定 | -| 32 | archive.ubuntu.com | 19/20 | 20/20 | 91.189.92.22 | 间歇 | -| 33 | security.ubuntu.com | 20/20 | 20/20 | 91.189.91.82,91.189.92.22 | 稳定 | -| 34 | gitee.com | 20/20 | 20/20 | 180.76.199.13 | 稳定 | -| 35 | ports.ubuntu.com | 20/20 | 20/20 | 91.189.92.19 | 稳定 | -| 36 | api.github.com | 20/20 | 20/20 | 20.205.243.168 | 稳定 | -| 37 | broker.actions.githubusercontent.com | 20/20 | 20/20 | 20.85.130.105 | 稳定 | -| 38 | pipelines.actions.githubusercontent.com | 20/20 | 20/20 | 2620:1ec:21::16 | 稳定 | -| 39 | pipelinesghubeus4.actions.githubusercontent.com | 20/20 | 20/20 | 20.232.252.48 | 稳定 | -| 40 | results-receiver.actions.githubusercontent.com | 20/20 | 20/20 | 140.82.112.21,140.82.114.22 | 稳定 | -| 41 | github.com | 20/20 | 0/20 | 20.205.243.166 | 间歇 | -| 42 | codeload.github.com | 20/20 | 20/20 | 20.205.243.165 | 稳定 | -| 43 | objects.githubusercontent.com | 20/20 | 20/20 | 185.199.109.133 | 稳定 | -| 44 | objects-origin.githubusercontent.com | 20/20 | 20/20 | 140.82.113.21,140.82.112.21 | 稳定 | -| 45 | github-releases.githubusercontent.com | 20/20 | 18/20 | 2606:50c0:8002::154 | 间歇 | -| 46 | github-registry-files.githubusercontent.com | 20/20 | 19/20 | 185.199.108.154 | 间歇 | -| 47 | pkg-containers.githubusercontent.com | 20/20 | 19/20 | 2606:50c0:8000::154 | 间歇 | -| 48 | ghcr.io | 20/20 | 20/20 | 20.205.243.164 | 稳定 | -| 49 | github-cloud.githubusercontent.com | 20/20 | 20/20 | 185.199.110.154 | 稳定 | -| 50 | github-cloud.s3.amazonaws.com | 19/20 | 18/20 | 54.231.168.17,16.15.212.164 | 间歇 | -| 51 | dependabot-actions.githubapp.com | 20/20 | 20/20 | 140.82.112.22,140.82.113.21 | 稳定 | -| 52 | release-assets.githubusercontent.com | 20/20 | 19/20 | 185.199.110.133 | 间歇 | -| 53 | api.snapcraft.io | 20/20 | 20/20 | 185.125.188.59 | 稳定 | -| 54 | pipelinesghubeus1.actions.githubusercontent.com | 20/20 | 20/20 | 20.242.179.206 | 稳定 | -| 55 | pipelinesghubeus2.actions.githubusercontent.com | 20/20 | 20/20 | 20.242.161.191 | 稳定 | -| 56 | pipelinesghubeus3.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.36.236 | 稳定 | -| 57 | pipelinesghubeus5.actions.githubusercontent.com | 20/20 | 20/20 | 20.253.95.3 | 稳定 | -| 58 | pipelinesghubeus6.actions.githubusercontent.com | 20/20 | 20/20 | 20.253.126.26 | 稳定 | -| 59 | pipelinesghubeus7.actions.githubusercontent.com | 20/20 | 20/20 | 20.246.184.240 | 稳定 | -| 60 | pipelinesghubeus8.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.39.220 | 稳定 | -| 61 | pipelinesghubeus9.actions.githubusercontent.com | 20/20 | 20/20 | 40.88.239.133 | 稳定 | -| 62 | pipelinesghubeus10.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.38.122 | 稳定 | -| 63 | pipelinesghubeus11.actions.githubusercontent.com | 20/20 | 20/20 | 20.237.33.78 | 稳定 | -| 64 | pipelinesghubeus12.actions.githubusercontent.com | 20/20 | 20/20 | 20.102.39.57 | 稳定 | -| 65 | download.openmmlab.com | 20/20 | 20/20 | 218.24.90.14 | 稳定 | -| 66 | rsproxy.cn | 20/20 | 20/20 | 110.249.198.6 | 稳定 | -| 67 | goproxy.cn | 20/20 | 13/20 | 211.154.247.40 | 间歇 | -| 68 | repo.anaconda.com | 20/20 | 20/20 | 2606:4700::6810:bf9e | 稳定 | -| 69 | repo.mindspore.cn | 20/20 | 20/20 | 124.70.125.215 | 稳定 | -| 70 | repo.oepkgs.net | 20/20 | 20/20 | 121.36.99.241 | 稳定 | -| 71 | repo.openeuler.org | 20/20 | 20/20 | 49.0.229.41 | 稳定 | -| 72 | mirrors.ustc.edu.cn | 0/20 | 0/20 | 2001:da8:d800:95::110 | 全失败 | -| 73 | lfs-cdn.gitcode.com | 20/20 | 20/20 | 121.22.232.155 | 稳定 | -| 74 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.12 | 稳定 | -| 75 | gitcode.com | 20/20 | 20/20 | 116.205.2.91 | 稳定 | -| 76 | atomgit.com | 20/20 | 20/20 | 116.205.2.91 | 稳定 | -| 77 | mirrors.huaweicloud.com | 20/20 | 20/20 | 120.46.2.67 | 稳定 | -| 78 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | -| 79 | mirrors.aliyun.com | 15/20 | 20/20 | 222.138.197.52,124.95.170.12 | 间歇 | -| 80 | mirrors.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 2402:f000:1:400::2 | 稳定 | -| 81 | repo.huaweicloud.com | 20/20 | 20/20 | 61.135.210.42 | 稳定 | -| 82 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | -| 83 | files.pythonhosted.org | 4/20 | 15/20 | 151.101.192.223,151.101.0.223 | 间歇 | -| 84 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | -| 85 | pypi.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 2402:f000:1:400::2 | 稳定 | -| 86 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 123.60.240.82 | 稳定 | -| 87 | pypi.org | 19/20 | 19/20 | 2a04:4e42::223,2a04:4e42:600::223 | 间歇 | -| 88 | build-env.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.7 | 稳定 | -| 89 | ppa.launchpad.net | 20/20 | 20/20 | 2620:2d:4000:1009::15f | 稳定 | -| 90 | obs-community.obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 114.115.192.27 | 稳定 | -| 91 | ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 122.9.24.4 | 稳定 | -| 92 | 123.60.114.225 | 0/20 | 0/20 | 123.60.114.225 | 全失败 | +| 1 | devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 3 | download.pytorch.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 4 | download-r2.pytorch.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 8 | www.sqlite.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 9 | sum.golang.google.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 10 | data.pyg.org | 16/20 | 10/20 | 20/20 | 间歇 | +| 11 | obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 14 | obs.cn-north-9.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 21 | lfs-cdn.openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 22 | artlfs.openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 23 | openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 24 | ru-repo.openeuler.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 25 | fr-repo.openeuler.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 26 | www.modelscope.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 27 | cdn-lfs-cn-1.modelscope.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 28 | gh-proxy.test.osinfra.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 29 | apig.openlibing.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 30 | get.helm.sh | 20/20 | 20/20 | 20/20 | 稳定 | +| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 32 | archive.ubuntu.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 33 | security.ubuntu.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 34 | gitee.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 35 | ports.ubuntu.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 36 | api.github.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 37 | broker.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 38 | pipelines.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 39 | pipelinesghubeus4.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 40 | results-receiver.actions.githubusercontent.com | 20/20 | 19/20 | 20/20 | 间歇 | +| 41 | github.com | 19/20 | 20/20 | 18/20 | 间歇 | +| 42 | codeload.github.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 43 | objects.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 44 | objects-origin.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 45 | github-releases.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 46 | github-registry-files.githubusercontent.com | 19/20 | 20/20 | 20/20 | 间歇 | +| 47 | pkg-containers.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 48 | ghcr.io | 20/20 | 20/20 | 20/20 | 稳定 | +| 49 | github-cloud.githubusercontent.com | 19/20 | 20/20 | 20/20 | 间歇 | +| 50 | github-cloud.s3.amazonaws.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 51 | dependabot-actions.githubapp.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 52 | release-assets.githubusercontent.com | 19/20 | 20/20 | 17/20 | 间歇 | +| 53 | api.snapcraft.io | 20/20 | 20/20 | 20/20 | 稳定 | +| 54 | pipelinesghubeus1.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 55 | pipelinesghubeus2.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 56 | pipelinesghubeus3.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 57 | pipelinesghubeus5.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 58 | pipelinesghubeus6.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 59 | pipelinesghubeus7.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 60 | pipelinesghubeus8.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 61 | pipelinesghubeus9.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 62 | pipelinesghubeus10.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 63 | pipelinesghubeus11.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 64 | pipelinesghubeus12.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 65 | download.openmmlab.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 66 | rsproxy.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 67 | goproxy.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 68 | repo.anaconda.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 69 | repo.mindspore.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 70 | repo.oepkgs.net | 20/20 | 20/20 | 20/20 | 稳定 | +| 71 | repo.openeuler.org | 20/20 | 20/20 | 20/20 | 稳定 | +| 72 | mirrors.ustc.edu.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 73 | lfs-cdn.gitcode.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 74 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 75 | gitcode.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 76 | atomgit.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 77 | mirrors.huaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 78 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 79 | mirrors.aliyun.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 80 | mirrors.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 81 | repo.huaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 82 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 83 | files.pythonhosted.org | 19/20 | 20/20 | 20/20 | 间歇 | +| 84 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 85 | pypi.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 20/20 | 稳定 | +| 86 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 87 | pypi.org | 20/20 | 20/20 | 19/20 | 间歇 | +| 88 | build-env.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 89 | ppa.launchpad.net | 20/20 | 20/20 | 20/20 | 稳定 | +| 90 | obs-community.obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 91 | ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 稳定 | +| 92 | 123.60.114.225 | 20/20 | 19/20 | 19/20 | 间歇 | diff --git a/domaintest/test-domains-x20.sh b/domaintest/test-domains-x20.sh index f353bfa..c6dec8a 100644 --- a/domaintest/test-domains-x20.sh +++ b/domaintest/test-domains-x20.sh @@ -29,7 +29,7 @@ for d in $ARGS; do while [ "$i" -le "$R" ]; do ip=$(getent hosts "$d" | awk '{print $1}' | head -1) [ -n "$ip" ] && ips="$ips,$ip" - code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3128 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) + code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3129 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) ec=$? if [ "$ec" -eq 0 ]; then ok=$((ok+1)); else case "$ec" in diff --git a/domaintest/test-domains.sh b/domaintest/test-domains.sh index a19bd13..7e05935 100644 --- a/domaintest/test-domains.sh +++ b/domaintest/test-domains.sh @@ -23,7 +23,7 @@ PY cat </dev/null) + r=\$(curl -sk -o /dev/null --proxy http://127.0.0.1:3129 --max-time 6 -w "%{http_code}|%{time_total}" "https://\$d/" 2>/dev/null) ec=\$? echo "\$label|\$d|\$ec|\$r" done diff --git a/domaintest/x20-remote.sh b/domaintest/x20-remote.sh index dd80406..6bbc6a3 100644 --- a/domaintest/x20-remote.sh +++ b/domaintest/x20-remote.sh @@ -1,5 +1,8 @@ # 远程循环体: 在 squid pod 内运行 (由 kubectl exec sh -s -- ARGS ROUNDS < 本文件 调用) # ARGS=$1: 空格分隔域名; R=$2: 轮数 +# 端口说明: pod 内 squid 监听 3129 (http_port 3129 ssl-bump); +# 127.0.0.1:3128 是同 pod 的 registry-proxy nginx (cache_peer 上游), 测 squid 必须用 3129。 +# CI 客户端经 Service squid-cache:3128 会被 targetPort 转到 3129, 等价于本测试路径。 set -u ARGS="$1"; R="$2" for d in $ARGS; do @@ -8,7 +11,7 @@ for d in $ARGS; do while [ "$i" -le "$R" ]; do ip=$(getent hosts "$d" | awk '{print $1}' | head -1) [ -n "$ip" ] && ips="$ips,$ip" - code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3128 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) + code=$(curl -sk -o /dev/null --proxy http://127.0.0.1:3129 --max-time 6 -w "%{http_code}" "https://$d/" 2>/dev/null) ec=$? if [ "$ec" -eq 0 ]; then ok=$((ok+1)); else case "$ec" in From f53e60d9a5333961da1b31948e5df3648ddb1d1f Mon Sep 17 00:00:00 2001 From: chenqi49 <479148871@qq.com> Date: Fri, 4 Sep 2026 08:10:14 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(domaintest):=20=E5=9F=BA=E4=BA=8E=20sq?= =?UTF-8?q?uid=203129=20=E8=B7=AF=E5=BE=84=E9=87=8D=E6=B5=8B=20proxy-vs-?= =?UTF-8?q?=E7=9B=B4=E8=BF=9E,=20=E9=AA=8C=E8=AF=81=20connect=5Ftimeout=20?= =?UTF-8?q?5s=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 test-proxy-vs-direct-x20.sh: 三集群(gy-001/wlcb-001/gy-002) × 92 域 × 20 轮 proxy(127.0.0.1:3129=squid) + 20 轮直连, 同 pod 同出口对比 - 重写 REPORT-proxy-vs-direct.md: 修正版取代作废的 nginx-3128 版 - 关键结论: connect_timeout 5s 消除系统性 proxy 劣化(goproxy.cn 8/20→20/20); 0 个两路径全挂(github.com gy-001 黑洞恢复); proxy 稳定性反超直连; mirrors.ustc/123.60.114.225 为 squid 503 快速失败(已标注, 非真实可达) --- domaintest/.gitignore | 5 +- domaintest/REPORT-proxy-vs-direct.md | 322 +++++++++++++------------ domaintest/test-proxy-vs-direct-x20.sh | 61 +++++ 3 files changed, 232 insertions(+), 156 deletions(-) create mode 100644 domaintest/test-proxy-vs-direct-x20.sh diff --git a/domaintest/.gitignore b/domaintest/.gitignore index 8763efc..cbda00c 100644 --- a/domaintest/.gitignore +++ b/domaintest/.gitignore @@ -3,4 +3,7 @@ results-wlcb.tsv results-x20-gy001-new.tsv results-x20-gy001.tsv results-x20-wlcb-new.tsv -results-x20-wlcb.tsv \ No newline at end of file +results-x20-wlcb.tsv +results-pvd-gy001.tsv +results-pvd-wlcb.tsv +results-pvd-gy002.tsv \ No newline at end of file diff --git a/domaintest/REPORT-proxy-vs-direct.md b/domaintest/REPORT-proxy-vs-direct.md index 88abe7e..9ea2aa5 100644 --- a/domaintest/REPORT-proxy-vs-direct.md +++ b/domaintest/REPORT-proxy-vs-direct.md @@ -1,177 +1,189 @@ -# 域名连通性 Proxy vs 直连 对比报告 (wlcb vs gy-001) +# 域名连通性 Proxy vs 直连 对比报告 (gy-001 / wlcb-001 / gy-002) — 修正版 -> ⚠️ **作废声明 (2026-09-03)**: 本报告的 `--proxy http://127.0.0.1:3128` 在 squid pod 内命中的是 **registry-proxy (rpardini nginx)**, 不是 squid —— squid 实际监听 `3129` (`http_port 3129 ssl-bump`)。因此本报告全部"proxy 劣化"分析测的是 **nginx 出口**, 结论**不适用于生产 squid 路径**。真实 squid 路径基线见 [REPORT-x20.md](REPORT-x20.md) 修正版: 三集群 92 域 0 个全挂, 仅 CDN 多 IP 偶发抖动。本报告保留仅供方法学复盘, **请勿引用其中结论**。 +> **本版为修正后的真实 squid 路径测试 (2026-09-04 08:03)**。旧版 (2026-09-03) 的 `--proxy http://127.0.0.1:3128` 在 squid pod 内命中的是 **registry-proxy (rpardini nginx)** 而非 squid —— squid 实际监听 `3129` (`http_port 3129 ssl-bump`)。旧版全部"proxy 劣化"分析测的是 nginx 出口, 结论不适用于生产 squid 路径, 仅供方法学复盘。 +> +> 本版测试条件与生产 CI 完全一致: **proxy 走 squid `127.0.0.1:3129`**, 且此时三集群 squid 已升级至 **`connect_timeout 5 seconds`** (chart 0.1.8), 即旧报告建议的修复已生效, 本版同时验证了修复效果。 -> 生成时间: 2026-09-03 15:48:00 | 每个域名 **20 轮 × 2 模式**(经 proxy / 直连), 两集群并行, 数据源: [ascend_ci_domains.json](ascend_ci_domains.json) (共 92 条实域名) +## 测试方法 -## 测试方法 (已失效, 见上方作废声明) +- 3 集群 × 92 实域名([ascend_ci_domains.json](ascend_ci_domains.json),跳过 `*.` 通配),每域每模式 **20 轮**。 +- 均在各自集群 `squid-cache-0` pod 的 **squid 容器**内执行 (`kubectl exec`): + - **proxy**: `curl -sk --proxy http://127.0.0.1:3129 --max-time 6 https://<域>/` + - **直连**: `curl -sk --max-time 6 https://<域>/` +- proxy 与直连跑在**同一个 pod / 同一节点 / 同一出口 NAT**, 外部可达性差异只来自 squid 处理逻辑(DNS 缓存、地址族回退、连接超时)与 curl 直连行为之差, 而非出口不同。 +- 判定: curl exit 0 = 成功(拿到任意 HTTP 响应,**含 squid 生成的 5xx 错误页,见方法学要点**);28=TIMEOUT / 6=DNSFAIL / 7=CONNFAIL。 +- 分类: **稳定**(proxy=直连=20/20) / **proxy劣化**(proxy<直连) / **直连劣化**(直连 注意: `mirrors.ustc.edu.cn` / `123.60.114.225` 经 squid 的成功是 **503 快速失败**, 不代表缓存/下载可用, 生产仍需域名白名单层面规避或换镜像源。 -> 注: 初版报告曾把根因 1 表述为"单 IP 固定、无故障转移", 经查证有误——squid 有顺序 failover, 差距在**判死速度**(受 connect_timeout 拖累)而非"不会换 IP"。 +### 5. 间歇性域 (两轮内波动, 非结构性) -## 结论与修复方向 +- `results-receiver.actions.githubusercontent.com` (wlcb 19/19; gy-002 19/17)、`files.pythonhosted.org` (wlcb 19/19)、`apig.openlibing.com` (gy-002 直连 0/20 但复测 404 可达) —— 均属间歇抖动, 无固定方向。 -- **squid 侧(按收益排序)**: - - **调小 `connect_timeout`(建议 3~5s)** — 让顺序 failover 能在客户端 6s 预算内完成 1~2 次 IP 切换。正常建连 <1s, 该值只影响坏 IP 判死速度, 3~5s 是安全下限。(收益最大, 直击主因) - - `dns_v4_first on` — 避免 IPv6 优先挂起(pypi/pythonhosted 解析出 IPv6 且集群无 v6 出口时, 默认行为会先耗一个地址预算)。 - - `forward_max_tries`(默认 10, 一般无需动) — 控制"换 IP 重试"的高层上限; ⚠️ `connect_retries` 不是本场景的解: 它管"同一 TCP 连接重开次数"(默认不重试)且不支持按 acl, `balance_on_multiple_ip` 在 Squid 5+ 已移除(7.7.1 不可用), 初版建议有误。 - - `pconn_timeout`(默认 1min): 是否调小存疑(见根因 3), 建议先 A/B 验证半开复用是否真实发生, 再决定。 -- **跨区域 OBS(wlcb→pytorch-package.obs)**: 直连 20/20 而 proxy 10/20, 建议对该域配 cache_peer/固定私网 IP 路由, 让 squid 走与直连相同的稳定路径。 -- **github.com 黑洞(.37)**: 属出口路由问题, squid 无法根治; 维持 main2main 的 gh-proxy/git-cdn 回退 + M3 cache_peer 稳定出口。 +## 结论 -## 全量明细 (92 条, 格式: wlcb-proxy / wlcb-直连 / gy-proxy / gy-直连) +1. **`connect_timeout 5s` 修复被本版实测验证有效**:多 IP 域(goproxy.cn、OBS 多 IP、CDN 大池)的"proxy 系统性劣化"消失,剩余差值 ≤1 次为噪声。该配置**值得保留并推广到其余集群**。 +2. **0 个全挂 + proxy 稳定性反超直连**:生产 CI 走 squid 路径(`squid-cache:3128` → targetPort 3129)与直连出网相比不再有劣势,且在 DNS/地址族回退上更稳。 +3. **仍待处理的源站**(mirrors.ustc.edu.cn、123.60.114.225)经 squid 为 503 快速失败——对客户端友好但非真实可达;data.pyg.org 属间歇,非结构性。 +4. 上一版"作废声明"指出的 nginx-3128 误测问题,本版已用 squid-3129 全量重测,旧版结论(proxy 劣化/黑洞)**不适用于生产 squid 路径**,请以本版为准。 -| # | 域名 | wlcb proxy | wlcb 直连 | gy proxy | gy 直连 | 分类 | -|---|---|---|---|---|---|---| -| 1 | devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 3 | download.pytorch.org | 19/20 | 18/20 | 20/20 | 20/20 | 直连劣化 | -| 4 | download-r2.pytorch.org | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 10/20 | 20/20 | 20/20 | 20/20 | proxy劣化 | -| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 8 | www.sqlite.org | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 9 | sum.golang.google.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 10 | data.pyg.org | 0/20 | 0/20 | 0/20 | 0/20 | 出口全挂 | -| 11 | obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 14 | obs.cn-north-9.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 14/20 | 20/20 | 17/20 | 20/20 | proxy劣化 | -| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 21 | lfs-cdn.openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 22 | artlfs.openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 23 | openeuler.openatom.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 24 | ru-repo.openeuler.org | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 25 | fr-repo.openeuler.org | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 26 | www.modelscope.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 27 | cdn-lfs-cn-1.modelscope.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 28 | gh-proxy.test.osinfra.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 29 | apig.openlibing.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 30 | get.helm.sh | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 32 | archive.ubuntu.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 33 | security.ubuntu.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 34 | gitee.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 35 | ports.ubuntu.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 36 | api.github.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 37 | broker.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 38 | pipelines.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 39 | pipelinesghubeus4.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 40 | results-receiver.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 41 | github.com | 20/20 | 20/20 | 0/20 | 0/20 | 出口全挂 | -| 42 | codeload.github.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 43 | objects.githubusercontent.com | 20/20 | 20/20 | 18/20 | 20/20 | proxy劣化 | -| 44 | objects-origin.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 45 | github-releases.githubusercontent.com | 20/20 | 20/20 | 19/20 | 20/20 | proxy劣化 | -| 46 | github-registry-files.githubusercontent.com | 20/20 | 20/20 | 19/20 | 20/20 | proxy劣化 | -| 47 | pkg-containers.githubusercontent.com | 20/20 | 20/20 | 17/20 | 20/20 | proxy劣化 | -| 48 | ghcr.io | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 49 | github-cloud.githubusercontent.com | 20/20 | 20/20 | 18/20 | 20/20 | proxy劣化 | -| 50 | github-cloud.s3.amazonaws.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 51 | dependabot-actions.githubapp.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 52 | release-assets.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 53 | api.snapcraft.io | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 54 | pipelinesghubeus1.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 55 | pipelinesghubeus2.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 56 | pipelinesghubeus3.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 57 | pipelinesghubeus5.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 58 | pipelinesghubeus6.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 59 | pipelinesghubeus7.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 60 | pipelinesghubeus8.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 61 | pipelinesghubeus9.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 62 | pipelinesghubeus10.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 63 | pipelinesghubeus11.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 64 | pipelinesghubeus12.actions.githubusercontent.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 65 | download.openmmlab.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 66 | rsproxy.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 67 | goproxy.cn | 19/20 | 20/20 | 8/20 | 18/20 | proxy劣化 | -| 68 | repo.anaconda.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 69 | repo.mindspore.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 70 | repo.oepkgs.net | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 71 | repo.openeuler.org | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 72 | mirrors.ustc.edu.cn | 0/20 | 0/20 | 0/20 | 0/20 | 出口全挂 | -| 73 | lfs-cdn.gitcode.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 74 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 75 | gitcode.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 76 | atomgit.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 77 | mirrors.huaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 78 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 79 | mirrors.aliyun.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 80 | mirrors.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 81 | repo.huaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 82 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 83 | files.pythonhosted.org | 14/20 | 20/20 | 16/20 | 20/20 | proxy劣化 | -| 84 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 85 | pypi.tuna.tsinghua.edu.cn | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 86 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 87 | pypi.org | 18/20 | 20/20 | 19/20 | 20/20 | proxy劣化 | -| 88 | build-env.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 89 | ppa.launchpad.net | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 90 | obs-community.obs.cn-north-1.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 91 | ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 | 20/20 | 20/20 | 20/20 | 稳定 | -| 92 | 123.60.114.225 | 0/20 | 0/20 | 0/20 | 0/20 | 出口全挂 | +## 全量明细 (92 条, 列格式: `proxy/20 · 直连/20`) + +| # | 域名 | gy-001 | wlcb-001 | gy-002 | 分类 | +|---|---|---|---|---|---| +| 1 | devcloud.cn-north-4.huaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 2 | devrepo.devcloud.cn-north-4.huaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 3 | download.pytorch.org | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 4 | download-r2.pytorch.org | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 5 | pytorch-package.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 19/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 6 | pta-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 7 | mindstudio-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 8 | www.sqlite.org | 20/20 · 19/20 | 20/20 · 19/20 | 20/20 · 18/20 | 直连劣化 | +| 9 | sum.golang.google.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 10 | data.pyg.org | 12/20 · 0/20 | 12/20 · 0/20 | 20/20 · 0/20 | 直连劣化 | +| 11 | obs.cn-north-1.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 12 | op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 13 | op-svc-swr-cn-north-4-backup.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 14 | obs.cn-north-9.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 15 | op-svc-swr-b051-10-147-7-14-3az.obs.cn-east-3.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 16 | op-svc-swr-cn-east-3-backup.obs.cn-east-3.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 17 | op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 18 | op-svc-swr-cn-south-1-backup.obs.cn-south-1.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 19 | op-svc-swr-b051-10-205-14-19-3az.obs.cn-southwest-2.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 20 | obs.dualstack.cn-east-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 21 | lfs-cdn.openeuler.openatom.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 22 | artlfs.openeuler.openatom.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 23 | openeuler.openatom.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 24 | ru-repo.openeuler.org | 20/20 · 20/20 | 19/20 · 20/20 | 19/20 · 20/20 | proxy劣化 | +| 25 | fr-repo.openeuler.org | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 26 | www.modelscope.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 27 | cdn-lfs-cn-1.modelscope.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 28 | gh-proxy.test.osinfra.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 29 | apig.openlibing.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 0/20 | 稳定 | +| 30 | get.helm.sh | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 31 | openlibing-codeql.obs.cn-southwest-2.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 32 | archive.ubuntu.com | 20/20 · 19/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 33 | security.ubuntu.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 34 | gitee.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 35 | ports.ubuntu.com | 20/20 · 20/20 | 19/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 36 | api.github.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 37 | broker.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 38 | pipelines.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 39 | pipelinesghubeus4.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 40 | results-receiver.actions.githubusercontent.com | 20/20 · 20/20 | 19/20 · 19/20 | 19/20 · 17/20 | 间歇 | +| 41 | github.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 42 | codeload.github.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 43 | objects.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 19/20 | 稳定 | +| 44 | objects-origin.githubusercontent.com | 20/20 · 20/20 | 20/20 · 19/20 | 20/20 · 19/20 | 直连劣化 | +| 45 | github-releases.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 46 | github-registry-files.githubusercontent.com | 20/20 · 19/20 | 20/20 · 20/20 | 19/20 · 20/20 | 直连劣化 | +| 47 | pkg-containers.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 19/20 · 20/20 | 稳定 | +| 48 | ghcr.io | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 49 | github-cloud.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 50 | github-cloud.s3.amazonaws.com | 19/20 · 20/20 | 20/20 · 20/20 | 20/20 · 19/20 | proxy劣化 | +| 51 | dependabot-actions.githubapp.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 52 | release-assets.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 53 | api.snapcraft.io | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 54 | pipelinesghubeus1.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 55 | pipelinesghubeus2.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 56 | pipelinesghubeus3.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 57 | pipelinesghubeus5.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 58 | pipelinesghubeus6.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 59 | pipelinesghubeus7.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 60 | pipelinesghubeus8.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 61 | pipelinesghubeus9.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 62 | pipelinesghubeus10.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 63 | pipelinesghubeus11.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 64 | pipelinesghubeus12.actions.githubusercontent.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 65 | download.openmmlab.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 66 | rsproxy.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 67 | goproxy.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 68 | repo.anaconda.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 69 | repo.mindspore.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 70 | repo.oepkgs.net | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 71 | repo.openeuler.org | 20/20 · 16/20 | 20/20 · 19/20 | 20/20 · 18/20 | 直连劣化 | +| 72 | mirrors.ustc.edu.cn | 20/20(503) · 0/20 | 20/20(503) · 0/20 | 20/20 · 20/20 | 直连劣化 | +| 73 | lfs-cdn.gitcode.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 74 | cn-north-4-octopus-gitcode-runner.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 75 | gitcode.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 76 | atomgit.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 77 | mirrors.huaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 78 | mindcluster.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 79 | mirrors.aliyun.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 80 | mirrors.tuna.tsinghua.edu.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 81 | repo.huaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 82 | mindstudio-pkg.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 83 | files.pythonhosted.org | 19/20 · 20/20 | 19/20 · 19/20 | 20/20 · 20/20 | proxy劣化 | +| 84 | mindx-package.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 85 | pypi.tuna.tsinghua.edu.cn | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 86 | mindie-pr.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 87 | pypi.org | 20/20 · 19/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 88 | build-env.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 89 | ppa.launchpad.net | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 90 | obs-community.obs.cn-north-1.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 91 | ascend-cann-open.obs.cn-north-4.myhuaweicloud.com | 20/20 · 20/20 | 20/20 · 20/20 | 20/20 · 20/20 | 稳定 | +| 92 | 123.60.114.225 | 20/20(503) · 0/20 | 20/20(503) · 0/20 | 20/20(503) · 0/20 | 直连劣化 | diff --git a/domaintest/test-proxy-vs-direct-x20.sh b/domaintest/test-proxy-vs-direct-x20.sh new file mode 100644 index 0000000..33d1cd4 --- /dev/null +++ b/domaintest/test-proxy-vs-direct-x20.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +# 域名连通性 Proxy vs 直连 对比测试 (修正版: proxy 走 squid 3129, 非 nginx 3128) +# 方法: 在各自集群的 squid pod 内 (同一 pod/节点/出口 NAT), +# 对每个白名单实域名做 R 轮「经 squid 代理 (127.0.0.1:3129)」+ R 轮「直连」, +# curl -sk --max-time 6, 只看连通性。 +# 用法: bash test-proxy-vs-direct-x20.sh +# 输出: results-pvd-.tsv 每行: 域名|proxy成功|proxy超时|proxyDNS|proxy连拒|直连成功|直连超时|直连DNS|直连连拒 +set -u +cd "$(dirname "$0")" + +ROUNDS="${ROUNDS:-20}" +KUBECTL_OPTS="${KUBECTL_OPTS:-}" + +# 从白名单 json 提取实域名(跳过 *. 通配), 拼成空格分隔串 +ARGS=$(python3 - <<'PY' +import json +doms = [x.replace("https://","").strip() for x in json.load(open("ascend_ci_domains.json")) if not x.startswith("*")] +print(" ".join(d for d in doms)) +PY +) + +# 远程循环体: proxy(3129) 与 直连 各 R 轮, 结果写一行 +REMOTE='set -u +ARGS="$1"; R="$2" +for d in $ARGS; do + pok=0; pto=0; pdn=0; pcn=0 + dok=0; dto=0; ddn=0; dcn=0 + i=1 + while [ "$i" -le "$R" ]; do + curl -sk -o /dev/null --proxy http://127.0.0.1:3129 --max-time 6 "https://$d/" 2>/dev/null + ec=$? + if [ "$ec" -eq 0 ]; then pok=$((pok+1)); else + case "$ec" in + 28) pto=$((pto+1));; 6) pdn=$((pdn+1));; 7) pcn=$((pcn+1));; *) pto=$((pto+1));; + esac + fi + curl -sk -o /dev/null --max-time 6 "https://$d/" 2>/dev/null + ec=$? + if [ "$ec" -eq 0 ]; then dok=$((dok+1)); else + case "$ec" in + 28) dto=$((dto+1));; 6) ddn=$((ddn+1));; 7) dcn=$((dcn+1));; *) dto=$((dto+1));; + esac + fi + i=$((i+1)) + done + echo "$d|$pok|$pto|$pdn|$pcn|$dok|$dto|$ddn|$dcn" +done' + +run_cluster() { + local kube="$1" out="$2" + echo ">>> [$kube] squid-cache-0 开始 ${ROUNDS} 轮 proxy + ${ROUNDS} 轮 直连 × $(echo "$ARGS" | wc -w) 域名" + kubectl --kubeconfig "$kube" exec -i -n squid squid-cache-0 -c squid -- sh -s -- "$ARGS" "$ROUNDS" <<< "$REMOTE" > "$out" + echo ">>> [$kube] 完成: $(wc -l < "$out") 条 -> $out" +} + +# 三集群并行 +run_cluster "$HOME/.kube/gy-001.yaml" results-pvd-gy001.tsv & +run_cluster "$HOME/.kube/wlcb-001.yaml" results-pvd-wlcb.tsv & +run_cluster "$HOME/.kube/gy-002.yaml" results-pvd-gy002.tsv & +wait +echo "全部完成"