Swarm 节点无法通信

Swarm 节点无法通信

我有几台机器正在Ubuntu Server 22.04.1 LTS运行Docker version 20.10.17

我已经设置了一个包含这两台机器的集群。这些机器的端口tcp/2377udp/4789udp/7946tcp/7946均已打开。我没有为此进行任何防火墙配置,Ubuntu Server 附带的防火墙服务已禁用。我分别使用这些命令nc -zv HOST PORTnc -zvu HOST PORTtcp和进行了测试udp。除了tcp/2377从管理器节点到工作节点的查询外,所有查询都返回成功,大概这是没问题的,因为这个端口似乎是管理器特定的端口。

如果我在同一节点上运行堆栈中的几个服务,这些服务可以毫无问题地通信。但是,当服务分散到不同节点时,它们就无法再相互连接。

他们能够ping在每个容器内使用对方服务的名称互相联系。

但是,它们无法curl service_name运行任何 Web 服务器,例如在单独的机器上的容器上运行。

我尝试用谷歌搜索这个问题,并尝试过关闭数据包校验和通过在两台机器上运行sudo ethtool -K docker_gwbridge tx off; sudo ethtool -K docker0 tx off,然后重新启动机器,但没有成功。

我正在寻找导致此问题的其他原因,或者可能是我误用了上述命令。在使用 Ubuntu Desktop 之前,我已经在这些节点上运行了 swarm,没有出现此问题,并且已经切换到 ubuntu 服务器。

谢谢。

PS 很高兴提供任何相关的附加信息。

答案1

将 ubuntu 从 18.04 版本更新到 22.04 后,我遇到了同样的问题。当前系统配置:docker 版本:20.10.17 ubuntu 版本:22.04.1 LTS

在建议关闭校验和后,我使用命令执行了此操作:

sudo ethtool --offload <NETWORK INTERFACE> tx off

我在这里找到了有关如何做到这一点的信息:如何禁用 UDP 校验和

相关内容