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

时间:2020-04-04 12:49:29

标签: docker docker-swarm docker-ingress

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

我有一个奇怪的情况,我重新启动了工作节点。
我执行了docker node ls,工作节点是Ready
docker service ls会告诉我,工作者中容器的复制是好的。
问题:我无法通过入口网络加入该节点。其他节点中没有容器能够访问该工作节点中的容器。

我检查了所有它们都已加入入口网络的容器。
我将容器从同一节点中卷曲,它们做出了响应。
我从一个容器ping服务名称(在同一故障节点中),并且该名称有效。
我把经理那里的工人容器卷曲了,没用!
我ed缩了工人的IP地址,他们回应了。

我重新启动了工作节点,但是问题仍然存在,然后我重新启动了整个集群,并且再次正常工作!

我刚刚目睹过什么吗?
我最担心这种情况会在生产环境中发生。

谢谢你。

1 个答案:

答案 0 :(得分:4)

在节点(工作人员和管理人员)之间未打开覆盖网络端口时,会发生这种情况。从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不同的覆盖网络端口