使用以下方法在群组上部署服务时
docker service create --replicas 1 --publish published=80,target=80 tutum/hello-world
我只能从运行容器的节点的ip访问该服务。如果我将服务扩展为在两个节点上运行,我可以从两个ips访问该服务,但它永远不会从另一个节点上的容器运行。 (由tutum/hello-world
图片确认。)
documentation表明负载均衡应该在它说:
时起作用三个任务将在最多三个节点上运行。您不需要知道哪些节点正在运行任务;连接到10个节点中的任何一个上的端口8080将连接到三个nginx任务之一。
swarm是使用swarm init
和swarm 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机器有关。
问题已经解决了,但是,我会留下问题留待将来参考。
答案 0 :(得分:3)
确保7946/tcp
,7946/udp
和4789/udp
在docker 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服务可能也需要重新加载。