【发布时间】:2018-06-29 20:15:51
【问题描述】:
当我在 swarm 上部署服务时,使用:
docker service create --replicas 1 --publish published=80,target=80 tutum/hello-world
我只能从运行容器的节点的 ip 访问服务。如果我将服务扩展为在两个节点上运行,我可以从两个 ip 访问该服务,但它永远不会从另一个节点上的容器运行。 (由tutum/hello-world 图像确认)。
documentation 建议负载平衡应该在它说:
三个任务将在最多三个节点上运行。您不需要知道哪些节点正在运行任务;连接到 10 个节点中的任何一个上的端口 8080 都会将您连接到三个 nginx 任务之一。
群是使用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: 我尝试向 swarm 添加一个 linux worker,它像宣传的那样工作,所以问题似乎与 OSX 机器有关。
问题已为我解决,但是,我将保留该问题以供将来参考。
【问题讨论】:
-
什么操作系统?你能发布
modinfo ip_vs和modinfo ip_vs_rr的输出吗? -
@johnharris85 Manager 节点是 linux,worker 节点是 OSX。工作节点上不存在 modinfo 命令。 linux 节点上的输出现在在问题详细信息中。
-
节点之间有防火墙吗?
-
@johnharris85 不,两个节点上的防火墙都被禁用,并且节点通过 LAN 连接。
-
您的 docker 守护进程日志中是否有任何与 ip_vs、iptables、ingress 相关的错误消息?
标签: docker docker-swarm