Используйте несколько определенных сетевых интерфейсов с Docker Swarm - PullRequest
7 голосов
/ 08 июля 2019

Я использую Docker Swarm для развертывания локального стороннего приложения. Машина, на которой я развертываю, работает под управлением RHEL 7.6 и имеет два сетевых интерфейса. Пользователи будут взаимодействовать с приложением с eth0, но для внутренней связи с их системой необходимо использовать eth1, иначе соединение будет заблокировано их брандмауэрами. Моему приложению требуются некоторые из моих служб для установления соединений с внутренними службами в их сети.

Я создал свой рой, используя:

$ docker swarm init --advertise-addr x.x.x.x

Где x.x.x.x - это адрес eth0 inet. Это работает для входящего пользовательского трафика на сервис. Тем не менее, когда я пытаюсь установить соединение с другой службой, соединение блокируется брандмауэром.

Вне докера, на машине я могу запустить:

ssh -b y.y.y.y user@server

Где y.y.y.y - это адрес eth1 inet, и он работает. Когда я запускаю то же самое в моем контейнере Docker Swarm, я получаю эту ошибку:

bind: y.y.y.y: Невозможно назначить запрошенный адрес

Можно ли как-нибудь использовать несколько сетевых интерфейсов с Docker Swarm и указать, какой из них используется в контейнерах? Я не мог найти много документации по этому вопросу. Нужно ли настраивать какой-то прокси?

1 Ответ

0 голосов
/ 26 июля 2019

По умолчанию Docker создает мостовую сеть из сетевых интерфейсов на вашей машине, а затем присоединяет каждый экземпляр контейнера к нему через отдельный виртуальный интерфейс внутри. Таким образом, вы не сможете напрямую связываться с eth1, поскольку ваш контейнер Docker имеет другой интерфейс.

См. https://docs.docker.com/v17.09/engine/userguide/networking/ для общего руководства и https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/ для пользовательских мостовых сетей с несколькими физическими интерфейсами.

...