Docker swarm:一个节点没有加入入口网络



我在玩Docker swarm,
我有一个三节点集群,一个管理器和两个工作节点。我的所有服务都使用VIP

我遇到了一个奇怪的情况,我重新启动了工作节点
我执行了docker node ls,工作节点是Ready
docker service ls将向我展示工作线程中容器的复制效果良好
问题:我无法通过入口网络加入节点。其他节点中没有容器能够访问该工作节点中的容器

我检查了容器,它们都加入了入口网络
我从同一个节点中卷曲容器,它们做出了响应
我从一个容器中ping到了服务名称(在同一个发生故障的节点中(,它就工作了
我把工人容器卷在经理的工人身上不起作用
我用工作人员的ip地址打了个招呼,他们做出了回应

我重新启动了工作节点,但问题仍然存在,然后我重新启动整个集群,它又工作了

我刚才目睹的事情有什么解释吗
我最担心的是这种情况会发生在生产环境中

提前谢谢

当节点(工作节点和管理节点(之间没有打开覆盖网络端口时,就会发生这种情况。根据Docker的文档,需要打开以下端口:

  • 用于群集管理通信的TCP端口2377
  • 用于节点间通信的TCP和UDP端口7946
  • 用于覆盖网络流量的UDP端口4789

这可能会被两端的iptables、中间的网络路由器/防火墙甚至VMWare NSX等工具阻止。要验证端到端的连接是否正常,可以在每个节点的选定端口上运行tcpdump,并确保离开一个节点的请求到达另一个节点。

集群中每个节点的相关iptables规则是:

iptables -I INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
iptables -I INPUT -p udp -m udp --dport 7946 -j ACCEPT
iptables -I INPUT -p tcp -m udp --dport 4789 -j ACCEPT
iptables -I INPUT -p 50 -j ACCEPT # allows ipsec when secure overlay is enabled

如果您无法调整防火墙设置,群集模式可能会配置一个不同于4789的docker swarm init --data-path-port覆盖网络端口

相关内容

  • 没有找到相关文章

最新更新