Docker群模式路由网格无法正常工作

时间:2018-01-20 20:07:07

标签: docker docker-swarm

使用以下方法在群组上部署服务时

docker service create --replicas 1 --publish published=80,target=80 tutum/hello-world

我只能从运行容器的节点的ip访问该服务。如果我将服务扩展为在两个节点上运行,我可以从两个ips访问该服务,但它永远不会从另一个节点上的容器运行。 (由tutum/hello-world图片确认。)

documentation表明负载均衡应该在它说:

时起作用
  

三个任务将在最多三个节点上运行。您不需要知道哪些节点正在运行任务;连接到10个节点中的任何一个上的端口8080将连接到三个nginx任务之一。

swarm是使用swarm initswarm join创建的。

使用docker network ls在两个节点上都可以找到入口群网络:

NETWORK ID          NAME                DRIVER              SCOPE
cv6hk9wce8bf        ingress             overlay             swarm

编辑: Manager节点运行linux,worker节点运行OSX。在管理器节点上运行modinfo ip_vs将返回:

filename:       /lib/modules/4.4.0-109-
generic/kernel/net/netfilter/ipvs/ip_vs.ko
license:        GPL
srcversion:     D856EAE372F4DAF27045C82
depends:        nf_conntrack,libcrc32c
intree:         Y
vermagic:       4.4.0-109-generic SMP mod_unload modversions 
parm:           conn_tab_bits:Set connections' hash size (int)

运行modinfo ip_vs_rr会返回:

filename:       /lib/modules/4.4.0-109-
generic/kernel/net/netfilter/ipvs/ip_vs_rr.ko
license:        GPL
srcversion:     F21F7372F5E2331EF5F4F73
depends:        ip_vs
intree:         Y
vermagic:       4.4.0-109-generic SMP mod_unload modversions 

编辑2: 我尝试将一个linux工作者添加到swarm中,它的工作方式与广告一样,所以问题似乎与OSX机器有关。

问题已经解决了,但是,我会留下问题留待将来参考。

2 个答案:

答案 0 :(得分:3)

确保7946/tcp7946/udp4789/udpdocker swarm init之前打开并可供群集中的所有节点使用。

不确定原因,但如果它们在创建群组之前未打开,则无法正确加载平衡。

答案 1 :(得分:0)

这发生在我身上,是由防火墙问题引起的。所以我打开每个工人和经理的端口。

sudo firewall-cmd --permanent --add-port=2377/tcp
sudo firewall-cmd --permanent --add-port=7946/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload
sudo reboot

如果这不起作用,请重新启动服务器。 Docker服务可能也需要重新加载。