当我使用 swarm 部署服务时:
docker service create --replicas 1 --publish published=80,target=80 tutum/hello-world
我只能从运行容器的节点的 ip 访问服务。如果我扩展服务以在两个节点上运行,我可以从两个 ip 访问该服务,但它永远不会从另一个节点上的容器运行。 (由 tutum/hello-world
图像确认)。
documentation建议负载平衡在它说时应该起作用:
Three tasks will run on up to three nodes. You don’t need to know which nodes are running the tasks; connecting to port 8080 on any of the 10 nodes will connect you to one of the three nginx tasks.
群是使用 swarm init
和 swarm join
创建的。
使用 docker network ls
在两个节点上找到入口群网络:
NETWORK ID NAME DRIVER SCOPE
cv6hk9wce8bf ingress overlay swarm
编辑:
管理节点运行 linux,工作节点运行 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: 我尝试向 swarm 添加一个 linux worker,它像宣传的那样工作,所以问题似乎与 OSX 机器有关。
问题已为我解决,但是,我会将问题保留以备将来引用。
最佳答案
确保 7946/tcp
、7946/udp
和 4789/udp
已打开并可供集群中的所有节点使用 docker swarm init
.
不知道为什么,但如果它们在创建 swarm 之前没有打开,它们将无法正确地进行负载平衡。
关于Docker群模式路由网格不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360577/