我们在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:我检查了this post,但我有最新版本的docker / docker-swarm,所以问题应该解决..
ps-2:类似的问题; https://github.com/docker/swarm/issues/2687
答案 0 :(得分:2)
出于好奇,在您的VMware环境中,您是否部署了NSX?我可能有一个答案,但它只适用于在环境中部署NSX的情况。
如果目标端口与为VXLAN VTEP通信配置的端口相同,则ESXi显然会从VM中删除 OUTBOUND 数据包。
NSX使用端口 4789 / udp 进行VXLAN的VTEP通信(默认情况下,从6.2.3开始;在此之前, 8472 / udp )。 (如果虚拟机位于同一主机上,则流量不会丢弃,因为虽然它可能是 OUTBOUND 流量,但它不会释放主机,也不会到要删除的VMKernel中的同一个阶段。)
KB2079386中的措辞略有不同。它声明:
VXLAN端口8472保留或限制供VMware使用,任何虚拟机都不能将此端口用于其他目的或任何其他应用程序。
但是,它应该是:
VTEP端口保留或限制供VMware使用,任何虚拟机都不能将此端口用于其他目的或任何其他应用程序。
如果您使用的是NSX,则可以try changing the port用于VXLAN VTEP,但如果您要利用硬件, 4789 / udp 端口 VTEPs。
(我无法完全赞同这一点。在对类似问题进行排查时,我偶然发现了this blog post谈论类似的行为。)
答案 1 :(得分:1)
我要检查覆盖网络的第一件事是你的防火墙规则。您需要在主机之间打开以下内容:
iptables -A INPUT -p 50 -j ACCEPT
)如果这没有帮助,请考虑使用netshoot来调试流量停止的位置。
答案 2 :(得分:1)
如果您的节点不在同一个子网上(例如,它们都有公共IP) - 那么请确保使用--advertise-addr
选项指定其他节点在该节点(其他管理员)可以访问的IP地址和工人)加入群。
否则,覆盖网络将无法在主机之间正确路由,即使堆栈部署&节点注册等似乎工作正常。
在同一个GitHub问题中查看我案例的详细说明 - > https://github.com/docker/swarm/issues/2687
答案 3 :(得分:0)
“ VTEP端口已保留或限制供VMware使用,任何虚拟机均不能将此端口用于其他目的或任何其他应用程序。”
但是我们可以将docker swarm data-path-port(使用默认端口号4789)更改为另一个:
docker swarm init --data-path-port=7789