我试图在两个不同的网络上运行 docker swarm。
- 第一个网络是 10.10.100.x/24
- 第二个网络是 10.10.150.x/24
两个网络可以互相看到。它们之间没有防火墙规则来阻止任何流量。具体来说,我测试了 7946 TCP 和 UDP 以及 4789 UDP。我可以确认,我可以在两个端口和两个协议上从第一个网络连接到第二个网络。而且从第二个网络到第一个网络也没有任何问题。
Docker swarm 启动并运行,使用的引擎是20.10.11
我可以看到所有节点都有status=Ready和availability=Active。
入口网络是默认的:
我也可以看到那里列出的所有同行。
但是,当我使用 port 将任何服务部署到任何节点时-p 20000:80
,我只能从部署它的网络中看到该节点。
- 如果服务登陆第一个网络,它只能通过来自第一个网络的节点访问,而不是来自第二个网络。
- 如果服务登陆第二个网络,它只能通过来自第二个网络的节点访问,而不是来自第一个网络。
任何想法如何解决这个问题?
谢谢
更新1:
尝试使用附加参数运行 swarm docker swarm init --default-addr-pool 172.100.0.0/16
。结果保持不变。
更新 2:基于@BMitch 的建议
我用 验证sudo tcpdump -nn -s0 -v port 4789 or 7946
,端口 7946 有效(UDP 和 TCP)。我还使用前面的tcpdump
命令和nc -z -v -u 10.10.150.200 4789
(从第一个网络运行)验证了端口 4789 也可以正常工作。