Networking
來自 Docker 容器內的流量路由不正確 - 來自 Docker 主機的流量正確路由
我看到一個奇怪的問題,來自位於歐洲西部 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 毫秒。所以這不是太破舊。