Назад | Перейти на главную страницу

Блокировать общедоступный трафик к определенному контейнеру в кластере Docker Swarm

Я запустил кластер docker swarm. Он предоставляет 2 порта: 80 (перенаправляет на Nginx) и 3000 (перенаправляет на панель Grafana).

Я хотел бы сделать контейнер Grafana доступным только с локального хоста (установлен OpenVPN).

Я не могу установить

ports:
    - 10.8.0.1:3000:3000

поскольку docker swarm игнорирует его (WARN[0000] ignoring IP-address (10.8.0.1:3000:3000/tcp) service will listen on '0.0.0.0').

$ netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      741/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      903/sshd            
tcp6       0      0 :::2377                 :::*                    LISTEN      886/dockerd         
tcp6       0      0 :::7946                 :::*                    LISTEN      886/dockerd         
tcp6       0      0 :::80                   :::*                    LISTEN      886/dockerd         
tcp6       0      0 :::22                   :::*                    LISTEN      903/sshd            
tcp6       0      0 :::3000                 :::*                    LISTEN      886/dockerd 

Я попытался использовать брандмауэр ufw, но обнаружил, что Docker изменяет iptables. Так что мне нужно отредактировать iptables.

У меня нет опыта в этом. Может ли кто-нибудь написать пошагово, что мне делать, чтобы заблокировать контейнер Grafana от публичного доступа?

Думаю, это будет полезно для многих. Я не единственный, кто борется с этим.