为什么只有将容器放入网络traefik_default时traefik才会起作用?

为什么只有将容器放入网络traefik_default时traefik才会起作用?

我继承了一些 Docker 主机,将其用作公共 HTTPS 入口点的反向代理,以便可以在同一个 HTTPS 入口点下托管多个不同的 web 应用程序。

代理部分由 traefik 作为具有网络traefik_default和的容器托管来实现172.18.0.0/16。另一方面,默认的 Docker 网络是172.17.0.0/16,路由表如下所示:

[...]@[...]:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    0      0        0 ens160
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-9628d8a7c930
192.168.131.0   0.0.0.0         255.255.255.0   U     0      0        0 ens160

[...]@[...]:~$ ip route show
default via 192.168.131.254 dev ens160 proto static
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-9628d8a7c930 proto kernel scope link src 172.18.0.1
192.168.131.0/24 dev ens160 proto kernel scope link src 192.168.131.151

[...]@[...]:~$ traceroute 172.17.0.3
traceroute to 172.17.0.3 (172.17.0.3), 30 hops max, 60 byte packets
 1  172.17.0.3 (172.17.0.3)  0.050 ms  0.005 ms  0.003 ms

[...]@[...]:~$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

我认识到,事情是否按预期工作取决于容器在哪个网络中启动。如果是默认的 Docker 172.17,事情就行不通。Traefik 无法转发请求并遇到 HTTP 状态 499、客户端关闭连接或网关超时等错误。这些似乎都与浏览器无关,而与 traefik 本身有关。

172.17.0.2但是,它正确地记录了路由器、服务等的创建,并告知了有关使用配置的端口设置服务等的信息。没有关于错误网络、端口已被使用或诸如此类的错误。另一方面,当容器刚放入网络中时172.18,一切立即开始工作,并且 traefik 会记录相同的内容,只是 IP 不同。

我的预期是,只要路由和其他东西正确,traefik 就能够到达容器 IP 和端口,无论容器在哪个网络运行都无关紧要。但事实并非如此,我没有看到路由错误。此外,我偶然发现了以下文档,这些文档甚至不再在搜索结果网站上提及:

Traefik 容器必须与要公开的容器连接到同一网络。如果 Docker Compose 文件中未指定任何网络,Docker 将创建一个默认网络,以允许 Traefik 访问同一文件中定义的容器。

在此处输入图片描述

那么,为什么只有将容器放入网络 traefik_default 中时 traefik 才会起作用?

谢谢!

相关内容