Docker 集群模式路由网格未按预期工作
Docker swarm mode routing mesh not work as expected
我尝试按照此 document
在 docker 群模型中创建服务
我在集群中创建了两个节点:
然后创建部署服务,我这里用的是jwilder/whoami
而不是文档中的nginx
,
docker service create --name my-web --publish published=8888,target=8000 --replicas 2 jwilder/whoami
看来他们启动成功了:
如文档所述:
When you access port 8080 on any node, Docker routes your request to
an active container.
所以在我看来,我可以从任何节点访问 my-web
服务,但是我发现只有一个节点工作:
怎么回事?
这可能是由于节点之间的端口被阻塞造成的。群网状网络使用 "ingress" 网络将发布的端口连接到服务的 VIP。该入口网络是使用 vxlan 实现的覆盖网络。为此你需要:
- 用于集群管理通信的 TCP 端口 2377
- 用于节点间通信的 TCP 和 UDP 端口 7946
- 覆盖网络流量的 UDP 端口 4789
参考:https://docs.docker.com/network/overlay/
这些端口有可能在多个级别被阻止,包括 iptables、路由器上的防火墙,我什至看到 VMware 使用他们的 NSX 工具也实现了 vxlan 来阻止它。
对于 iptables,我通常使用以下命令:
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp -m udp --dport 4789 -j ACCEPT
iptables -A INPUT -p 50 -j ACCEPT
如果您使用 firewalld 或需要更改网络路由器上的防火墙规则,以上内容将有所不同。
我尝试按照此 document
在 docker 群模型中创建服务我在集群中创建了两个节点:
然后创建部署服务,我这里用的是jwilder/whoami
而不是文档中的nginx
,
docker service create --name my-web --publish published=8888,target=8000 --replicas 2 jwilder/whoami
看来他们启动成功了:
如文档所述:
When you access port 8080 on any node, Docker routes your request to an active container.
所以在我看来,我可以从任何节点访问 my-web
服务,但是我发现只有一个节点工作:
怎么回事?
这可能是由于节点之间的端口被阻塞造成的。群网状网络使用 "ingress" 网络将发布的端口连接到服务的 VIP。该入口网络是使用 vxlan 实现的覆盖网络。为此你需要:
- 用于集群管理通信的 TCP 端口 2377
- 用于节点间通信的 TCP 和 UDP 端口 7946
- 覆盖网络流量的 UDP 端口 4789
参考:https://docs.docker.com/network/overlay/
这些端口有可能在多个级别被阻止,包括 iptables、路由器上的防火墙,我什至看到 VMware 使用他们的 NSX 工具也实现了 vxlan 来阻止它。
对于 iptables,我通常使用以下命令:
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp -m udp --dport 4789 -j ACCEPT
iptables -A INPUT -p 50 -j ACCEPT
如果您使用 firewalld 或需要更改网络路由器上的防火墙规则,以上内容将有所不同。