NAT背后的Docker群集工作程序



我想在NAT后面的服务器上有一个工作节点(即不能公开端口(我以为这不是问题,但事实证明是一个:

在NAT后面的这台服务器上,我运行:

docker swarm join --token SWMTKN-1... X.X.X.X:2377

这反过来又将服务器添加到群中。我不确定"内部"IP地址来自哪里,但在traefik上,如果我在traefikContainer:中执行,我就会有一个新的服务器http://10.0.1.126:8080(10.0.1.126绝对不是公共IP(

docker exec -it 80f9cb33e24c sh

除了新的服务器,我可以ping traefik上列表中的每个服务器/节点/工作者。为什么?


当像这样在vpn后面的工作人员上加入群时:

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.2tun0是从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

在一个成功的具有网络内部ip10.0.1.62的群工作者上

但我得到了:

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

在新的群节点上。为什么要过滤?我做错了什么?

我在这里添加它是因为它有点长
我认为只有管理器和远程节点能够通信是不够的;节点需要能够在它们之间进行通信。

尝试将管理器(连接到VPN(配置为通过VPN将数据包路由到远程工作者,并在所有节点(包括远程节点(上添加所需的路由。

类似于:

# Manager
sysctl -w net.ipv4.ip_forward=1  # if you use systemd you might need extra steps
# Remote node
ip route add LOCAL_NODES_SUBNET via MANAGER_TUN_IP dev tun0
#Local nodes
ip route add REMOTE_NODE_TUN_IP/32 via MANAGER_IP dev eth0

如果以上操作正确,则需要将上述路由更改永久化。

要查找所有节点的IP地址,请在管理器上运行以下命令:

for NODE in $(docker node ls --format '{{.Hostname}}'); do echo -e "${NODE} - $(docker node inspect --format '{{.Status.Addr}}' "${NODE}")"; done

最新更新