Docker群:节点未加入入口网络

问题描述 投票:0回答:1

[我在玩Docker群,我有一个三个节点的集群,一个管理器和两个工作器节点。我正在为所有服务使用VIP。我有一个奇怪的情况,我重新启动了工作节点。我执行了docker node ls,而工作节点是Readydocker service ls会告诉我,工作者中容器的复制是好的。问题:我无法通过入口网络加入该节点。其他节点中没有容器能够访问该工作节点中的容器。

我检查了它们都已加入入口网络的容器。我从同一节点内卷曲容器,它们做出了响应。我从一个容器ping服务名称(在同一故障节点中),并且该名称有效。我把经理那里的工人容器卷曲了,无法正常工作!!我ed缩着工人的IP地址,他们回应了。我重新启动了工作节点,但问题仍然存在,然后我重新启动了整个集群,并且再次正常工作!

我刚刚目睹过什么解释吗?我最担心这会在生产环境中发生。预先谢谢你。

docker docker-swarm docker-ingress
1个回答
0
投票

当未在节点(工作人员和管理人员)之间打开覆盖网络端口时,会发生这种情况。从Docker's documentation,需要打开以下端口:

  • 用于集群管理通信的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

如果无法调整防火墙设置,则群集模式可能会配置为具有docker swarm init --data-path-port的4789以外的覆盖网络端口>

© www.soinside.com 2019 - 2024. All rights reserved.