gpt4 book ai didi

NAT 后面的 Docker swarm worker

转载 作者:行者123 更新时间:2023-12-02 17:49:15 24 4
gpt4 key购买 nike

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

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

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

这反过来将服务器添加到群中。我不确定“内部”IP 地址来自哪里,但在 traefik 上我有一个新服务器 http://10.0.1.126:8080 ( 10.0.1.126 绝对不是公共(public) IP)如果我在 traefik 容器中执行:
docker exec -it 80f9cb33e24c sh

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

当像这样在 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.2tun0是从管理器到 NAT 后面的服务器的 vpn 接口(interface)。不幸的是,当我运行时:
$ 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

我可以看到 docker 的端口是关闭的,这很奇怪吗?

另外,如果我使用 nmap -p 8080 10.0.1.0/24在经理的 traefik 容器内,我得到:
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)配置为通过 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

关于NAT 后面的 Docker swarm worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61565258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com