Docker bridge и nginx allowed ip

У нас был мост докеров, содержащий несколько контейнеров докеров. Основным докером является сервер nginx, который действует как веб-хост и перенаправляет все данные в другие контейнеры.

Теперь требуется, чтобы соединения были ограничены только указанным списком IP-адресов. Для этого я отредактировал файл сервера nginx:

server {
        allow 127.0.0.0/8;
        deny all;
        ...

, который должен разрешить соединение 127.0.0.1.

Однако это не удается, и просмотр журнала access.log показывает, почему: Все строки начинаются с:

    172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET

172.25.0.1 - сетевой шлюз моста докеров; таким образом, докер «забывает» внешние IP-адреса, и я больше не могу фильтровать их.

Как я могу фильтровать IP-адреса? Или переслать исходный IP-адрес докеру?

4
задан 10 April 2018 в 12:02
1 ответ

Это ожидаемо, и именно так работает сеть докеров. По умолчанию вы получаете что-то вроде виртуальной сети на вашем хосте докеров. Перенаправляемые извне соединения будут приходить в каждый контейнер через docker0 и NAT.

Чтобы преодолеть это, простой ответ - использовать сеть хостов в контейнере nginx. т.е. - параметр сетевого хоста для команды docker run . См .: сеть хостов

Также прочтите документацию по сети докеров. Там это объясняется более подробно. https://docs.docker.com/network/

1
ответ дан 3 December 2019 в 04:08

Теги

Похожие вопросы