Docker рабочий роя за NAT - PullRequest
5 голосов
/ 02 мая 2020

Я хочу иметь рабочий узел на моем сервере, который находится за 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 определенно не является publi c IP), если я исполняю c внутри контейнера traefik:

docker exec -it 80f9cb33e24c sh

Я могу пропинговать каждый сервер / узел / работник в списке на 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.2 и tun0 - это интерфейс vpn от менеджера к серверу за NAT. К сожалению, когда я запускаю:

$ 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

, но я получаю:

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

на новый роевой узел. Почему это фильтруется? Что я делаю не так?

...