我看到一个奇怪的问题,来自位于欧洲西部 Google Cloud 中的 VM 上的 Docker 容器内的流量,发往位于亚马逊 Cloudfront 的英国公司,错误地一路路由到美国到达云端在加利福尼亚,导致各种不必要的延迟和缓慢。
$ ping destination.host.co.uk
PING d3csmaahmfmvav.cloudfront.net (54.192.146.219) 56(84) bytes of data.
64 bytes from server-54-192-146-219.sfo4.r.cloudfront.net (54.192.146.219): icmp_seq=1 ttl=49 time=161 ms
但是,源自主机 VM 的流量会正确路由到欧洲 Cloudfront 位置:
$ ping destination.host.co.uk
PING d3csmaafmvavjz.cloudfront.net (54.230.12.31) 56(84) bytes of data.
64 bytes from server-54-230-12-31.ams1.r.cloudfront.net (54.230.12.31): icmp_req=1 ttl=54 time=10.5 ms
我在 Docker 容器的网络配置中找不到任何可以表明为什么当主机本身将流量发送到我们期望的地方时容器会将流量发送到地球另一端的任何内容。
对于我的生活,我无法弄清楚为什么会这样,希望有人可以帮助指出我所缺少的。
谢谢!
啊哈!我已经弄清楚出了什么问题。这些容器使用 Google 的公共 DNS 服务器(8.8.8.8 和 8.8.4.4),VM 主机在其各自的 resolv.conf 文件中使用内部 Google DNS 服务器。我(以及设置这些容器的人)犯了一个错误,即相信 google 自己的 DNS 服务器知道位于 google 自己的云中的地狱的东西实际上在哪里。我们多么愚蠢!
当我更改容器上的 resolv.conf 以将该内部 DNS 服务器放在顶部时,突然...它不再将流量路由到该死星球的另一端,因此 ping 时间从 160 毫秒下降到 10 毫秒。所以这不是太破旧。