【发布时间】:2020-05-02 19:39:07
【问题描述】:
我想在我拥有的位于 NAT 后面的服务器上拥有一个工作节点(即不能公开端口)我认为这不是问题,但事实证明这是一个问题:
在我运行的 NAT 后面的服务器上:
docker swarm join --token SWMTKN-1... X.X.X.X:2377
这反过来又将服务器添加到集群中。我不确定“内部”IP 地址来自哪里,但在 traefik 上,如果我在 traefik 容器中执行,我将拥有一个新服务器 http://10.0.1.126:8080(10.0.1.126 绝对不是公共 IP):
docker exec -it 80f9cb33e24c sh
我可以 ping 到 traefik 列表中的每个服务器/节点/worker,除了新的。为什么?
当像这样在 vpn 后面的 worker 上加入 swarm 时:
docker swarm join --advertise-addr=tun0 --token SWMTKN-1-... X.X.X.X:2377
我可以从经理那里看到我网络上的新对等点:
$ docker network inspect traefik
...
"Peers": [
...
{
"Name": "c2f01f1f1452",
"IP": "12.0.0.2"
}
]
其中12.0.0.2 和tun0 是从管理器到NAT 后面服务器的vpn 接口。不幸的是,当我运行时:
$ nmap -p 2377,2376,4789,7946 12.0.0.2
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-04 11:01 EDT
Nmap scan report for 12.0.0.2
Host is up (0.017s latency).
PORT STATE SERVICE
2376/tcp closed docker
2377/tcp closed swarm
4789/tcp closed vxlan
7946/tcp open unknown
我可以看到码头工人的端口被关闭了,这很奇怪吗?
另外,如果我在管理器的 traefik 容器内使用nmap -p 8080 10.0.1.0/24,我会得到:
Nmap scan report for app.6ysph32io2l9q74g6g263wed3.mbnlnxusxv2wz0pa2njpqg2u1.traefik (10.0.1.62)
Host is up (0.00033s latency).
PORT STATE SERVICE
8080/tcp open http-proxy
在具有网络内部 ip 10.0.1.62 的成功 swarm worker 上
但我明白了:
Nmap scan report for app.y7odtja923ix60fg7madydia3.jcfbe2ke7lzllbvb13dojmxzq.traefik (10.0.1.126)
Host is up (0.00065s latency).
PORT STATE SERVICE
8080/tcp filtered http-proxy
在新的 swarm 节点上。为什么会被过滤?我做错了什么?
【问题讨论】:
-
我猜集群管理器需要一条可以到达节点的路由(通过 VPN 隧道)。
docker node ls说什么?另请注意,swarm 也需要允许 UDP 流量(端口 4789 和 7946) -
另外,如果远程主机使用 VPN 连接到 swarm 的网络,那么它是否在 NAT 后面应该无关紧要;只要它可以通过 VPN 隧道使用 TCP 和 UDP 与 swarm 的节点通信就可以了。
-
docker node ls显示是Ready Active 19.03.8 -
@IonutTicus 在我在 vpn 后面添加的节点上!
-
为什么在您的 VPN 接口上使用公共 IP 地址 (
12.0.0.2)? VPN 中的所有 docker 节点都是成员吗?
标签: docker networking docker-swarm traefik