У меня есть цифровая океаническая капля, которую я создал, используя докер-машину с изображением ubuntu-18-04-x64.Я развернул на нем три контейнера с помощью docker-compose, один из которых - nginx с портами 80 и 8080, перенаправленными на 0.0.0.0 и, таким образом, прослушивающими все интерфейсы.
nginx:
image: noumena/nrg-vpp/nginx:latest
ports:
- "80:80"
- "8080:8080"
depends_on:
- engine
- api
Брандмауэр настроен на блокировкувесь трафик на eth0 (открытый интерфейс DO), за исключением 2376 для докера, и открытые порты 22, 80, 8080 на eth1 (частный интерфейс DO).
22/tcp on eth1 ALLOW Anywhere
8080/tcp on eth1 ALLOW Anywhere
80/tcp on eth1 ALLOW Anywhere
2376/tcp on eth0 ALLOW Anywhere
Anywhere on eth0 DENY Anywhere
Anywhere on eth1 DENY Anywhere
22/tcp (v6) on eth1 ALLOW Anywhere (v6)
8080/tcp (v6) on eth1 ALLOW Anywhere (v6)
80/tcp (v6) on eth1 ALLOW Anywhere (v6)
2376/tcp (v6) on eth0 ALLOW Anywhere (v6)
Anywhere (v6) on eth0 DENY Anywhere (v6)
Anywhere (v6) on eth1 DENY Anywhere (v6)
Однако порты, перенаправленные докером (80,8080) все еще видны на eth0, любой другой порт не виден на eth 0 (например, 22)
17:10 $ telnet public-ip 22
Trying x.x.x.x...
telnet: connect to address x.x.x.x: Operation timed out
telnet: Unable to connect to remote host
17:16 $ telnet public-ip 80
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
^]
telnet> Connection closed.
17:17 $ telnet public-ip 8080
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
^]
telnet> Connection closed.
С какой стати эти порты будут открыты?Переадресация происходит до включения брандмауэра?
Я исправил острую проблему, ограничив контейнеры только прослушиванием по приватному ip, но это раздражает, так как требует дополнительной логики для запроса дроплета дляего private-ip и файл docker-compose становятся шаблоном.Было бы намного проще, если бы я мог полагаться на брандмауэр, чтобы держать перенаправленные порты закрытыми.
Кто-нибудь сталкивался с подобным поведением раньше?Мне бы очень хотелось понять, что происходит.