DinD 中 OBS 请求超时:根因是 MTU 黑洞

在容器中调用华为云 OBS 时,请求在 DNS 解析成功后长时间没有响应,最终超时。相同 endpoint 从 Pod 的 host network 访问可以正常返回 403,因此问题集中在容器网络路径,而不是 OBS 服务本身。 先看服务端日志 失败容器的 runtime 日志有一条很重要的时间线: Endpoint=https://obs.cn-north-4.myhuaweicloud.com:443/ internet host address: phoenix-autotest.obs.cn-north-4.myhuaweicloud.com/123.60.240.82, phoenix-autotest.obs.cn-north-4.myhuaweicloud.com/123.60.240.83 这说明 DNS 解析已经完成。之后没有 HTTP 状态码,也没有 OBS 的业务异常。因此,失败点位于 DNS 之后、HTTP 响应之前,更接近 TCP/TLS,而不是 bucket、路径或签名参数。 产品的华为云插件确实直接使用 OBS SDK: this.obsClient = new ObsClient( settings.accessKeyId(), settings.secretAccessKey(), settings.endpoint()); 目录操作会调用 listObjects。在本机使用相同的 OBS 配置和 SDK 3.25.10 重放,接口可以正常返回。因此没有证据表明 AK/SK 或配置错误。 对照不同网络路径 运行服务的 Pod 使用 DinD sidecar: DOCKER_HOST: unix:///var/run/docker/docker.sock Phoenix 容器位于 DinD 的 bridge 网络中。在同一个 Pod 中做只读 HTTPS 探测,结果非常明确: ...

September 2, 2026

一次 MySQL SQL 超时,根因是网卡 MTU 被改成了 8192

客户环境出现 MySQL 执行 SQL 超时:连接可以建立,简单查询大多正常,但应用复用同一个数据库连接执行多次查询后,会逐渐卡住并最终超时。 相同查询直接在 Navicat 中执行却是正常的。一开始容易怀疑慢 SQL、连接池或数据库负载,但数据库侧没有对应的慢查询和异常。检查网络配置后发现,客户将服务器网卡 MTU 从默认的 1500 改成了 8192。 根因 8192 属于巨帧配置。只有服务器、交换机、路由设备和对端链路都支持相同或更大的 MTU 时,巨帧才能正常工作。 这次链路中仍存在 1500 MTU 的设备。较大的 MySQL 响应包无法被路径正确转发,造成部分数据包丢失;TCP 重传后,应用层最终表现为 SQL 执行超时。 这也解释了为什么: Navicat 的单次查询正常 同一数据库连接连续执行多次查询后更容易超时 返回结果较大时更容易触发 数据库本身没有明显异常 处理 将网卡 MTU 恢复为 1500 后,超时现象消失。 巨帧不是单机优化项。调整 MTU 前,应确认网络路径全链路支持,并在变更后覆盖长连接、多次查询和大结果集等实际业务场景。遇到“单次查询正常、复用连接后超时”的问题时,除了查 SQL 和数据库,也应检查 MTU 是否一致。

August 10, 2026

本机使用相同端口启动多个程序

本地开发时,我们经常会遇到这样的需求: 项目 A 使用 3000 端口 项目 B 也使用 3000 端口 希望两个项目同时启动,互不影响 通常的答案是“改端口”。但在本机上,还有一种更整洁的办法:使用不同的 127.x.x.x 地址。 端口不是单独存在的 一个网络服务真正监听的不是“端口”,而是一个地址组合: IP 地址 + 端口 因此,下面两个监听实际上并不冲突: 127.0.0.2:3000 127.0.0.3:3000 它们的端口号相同,但 IP 地址不同。 127.x.x.x 是什么 127.0.0.0/8 整个网段都用于回环地址,也就是:发往这些地址的数据不会经过物理网卡,而是回到本机。 最常见的是: 127.0.0.1 但下面这些地址通常也可以使用: 127.0.0.2 127.0.0.3 127.10.10.10 它们都指向当前电脑,只是可以被操作系统区分为不同的本地地址。 一个可以直接运行的例子 准备两个目录,在两个终端分别运行: python -m http.server 3000 --bind 127.0.0.2 --directory project-a python -m http.server 3000 --bind 127.0.0.3 --directory project-b 现在两个程序都使用了 3000 端口,但访问地址不同: http://127.0.0.2:3000 → project-a http://127.0.0.3:3000 → project-b 这就是本地开发中“多个相同端口”的核心用法。 技巧:用域名代替 IP 直接记 127.0.0.2、127.0.0.3 并不困难,但开发时写域名更直观。 ...

July 16, 2026