[英]Docker-swarm overlay network is not working for containers in different hosts
我们在 docker-swarm 中有一个网络问题。 问题在下面;
我应该在哪里检查,有什么建议吗?
server-1:~$ docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:01:32 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:01:32 2017
OS/Arch: linux/amd64
Experimental: true
ps:我检查了这篇文章,但我有最新版本的 docker / docker-swarm 所以这个问题应该是固定的..
ps-2:类似问题; https://github.com/docker/swarm/issues/2687
“VTEP 端口保留或限制供 VMware 使用,任何虚拟机都不能将此端口用于其他目的或任何其他应用程序。”
但我们可以将 docker swarm data-path-port(使用默认端口号 4789)更改为另一个:
docker swarm init --data-path-port=7789
出于好奇,在您的 VMware 环境中,您是否部署了 NSX? 我可能有答案,但它仅适用于在环境中部署了 NSX 的情况。
如果目标端口与为 VXLAN VTEP通信配置的端口相同,ESXi 显然会丢弃来自虚拟机的出站数据包。
NSX 使用端口4789/udp进行 VXLAN 的 VTEP 通信(默认情况下,从 6.2.3 开始;在此之前,它是8472/udp )。 (如果 VM 在同一台主机上,则流量不会被丢弃,因为虽然它可能是出站流量,但它不会离开主机,也不会到达要丢弃的 VMKernel 中的同一阶段。)
KB2079386中的措辞有点偏离。 它指出:
VXLAN 端口 8472 保留或限制供 VMware 使用,任何虚拟机都不能将此端口用于其他目的或任何其他应用程序。
但是,它应该是:
VTEP 端口保留或限制供 VMware 使用,任何虚拟机都不能将此端口用于其他目的或任何其他应用程序。
如果您使用的是 NSX,您可以尝试更改用于 VXLAN VTEP 的端口,但如果您要完全利用硬件 VTEP,则需要端口4789/udp 。
(我不能完全相信这一点。我在解决类似问题时偶然发现了这篇谈论类似行为的博客文章。)
我要检查 overlay.networking 的第一件事是你的防火墙规则。 您需要在主机之间打开以下内容:
iptables -A INPUT -p 50 -j ACCEPT
)如果这没有帮助,请考虑使用netshoot调试流量停止的位置。
如果您的节点不在同一个 su.net 上(例如,它们都有公共 IP)——那么请确保您使用--advertise-addr
选项指定其他节点在该节点(其他管理器和工人)加入蜂群。
否则 overlay.network 将无法在主机之间正确路由,即使堆栈部署和节点注册等看起来工作正常。
在同一个 GitHub 问题中查看我的案例的详细解释 --> https://github.com/docker/swarm/issues/2687
解决上述问题。
初始化群时使用以下内容
docker swarm init --advertise-addr=YOURIP --listen-addr=0.0.0.0 --data-path-port=7779 --force-new-cluster=true
资源:
Docker:
虚拟机:
谢谢@Izkuru
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.