【问题标题】:Docker swarm mode routing mesh not workingDocker swarm 模式路由网格不起作用
【发布时间】: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 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: 我尝试向 swarm 添加一个 linux worker,它像宣传的那样工作,所以问题似乎与 OSX 机器有关。

问题已为我解决,但是,我将保留该问题以供将来参考。

【问题讨论】:

  • 什么操作系统?你能发布modinfo ip_vsmodinfo ip_vs_rr的输出吗?
  • @johnharris85 Manager 节点是 linux,worker 节点是 OSX。工作节点上不存在 modinfo 命令。 linux 节点上的输出现在在问题详细信息中。
  • 节点之间有防火墙吗?
  • @johnharris85 不,两个节点上的防火墙都被禁用,并且节点通过 LAN 连接。
  • 您的 docker 守护进程日志中是否有任何与 ip_vs、iptables、ingress 相关的错误消息?

标签: docker docker-swarm


【解决方案1】:

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

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 服务可能也需要重新加载。

【讨论】:

    【解决方案2】:

    确保7946/tcp7946/udp4789/udpdocker swarm init 之前对集群中的所有节点都是开放的并且可用。

    不知道为什么,但是如果在创建集群之前它们没有打开,它们将无法正确进行负载平衡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多