Доступ к контейнеру Docker через DNS-имя из корпоративной локальной сети

#docker #windows-container

#docker #windows-контейнер

Вопрос:

Я ищу способ получить доступ к контейнерам, которые запущены на сервере в локальной сети нашей компании, по доменным именам. До сих пор мне удавалось получить к ним доступ только по IP-адресам

Итак, установка такова. Docker (для Windows) запущен на сервере srv1.ourdomain.com (Windows Server 2019), сеть для контейнера настроена с помощью l2bridge драйвера, DNS-имя контейнера, указанное в команде запуска, является cont1 . Он доступен по DNS-имени на хосте docker ( srv1 ) и по IP-адресу с моего компьютера.

Что я могу сделать, чтобы получить доступ к контейнеру по DNS-имени cont1.ourdomain.com с моего локального компьютера, расположенного в той же локальной сети?

Я попытался использовать прокси (traefik), но он не может переписать URL-адреса в содержимом, поэтому веб-приложения, запущенные внутри контейнера, терпят неудачу. Из-за этого я не могу разместить несколько веб-приложений за этим прокси.

Я знаю, что можно сопоставить порт контейнера с портом хоста, и тогда он будет доступен из локальной сети через имя хоста и порт хоста, но для приложений, которые я запускаю, требуется сопоставление многих портов (например, 8 портов для каждого контейнера), и поскольку эти контейнеры являются недолговечными средами разработчика, будет чертовски сложно найти пул портов при запуске нового контейнера.

Итак, опять же, если я могу получить доступ к контейнеру и его портам по IP, есть ли способ сделать то же самое по DNS-имени?


UPD1. Хост контейнера — это виртуальный сервер, работающий на vmware. Я попытался следовать этим рекомендациям и настроить беспорядочный режим. Однако это не помогает с dns.

UPD2. Я также пробовал transparent сеть. По какой-то причине DHCP никогда не может назначить propper IP, и контейнер получает автоматически настроенный IP из подсети 168.x.x.x.

Комментарии:

1. Вам нужен определенный порт в контейнере? Вы можете добавить nginx на корпоративный сервер и передавать трафик proxypass на открытый порт из вашего контейнера

Ответ №1:

Вы могли бы создать прозрачную сеть и сделать контейнер доступным для обнаружения в сети точно так же, как host. Однако рекомендуется использовать порты хоста.

Вы пробовали PathStrip или PathPrefixStrip с Traefik? Это должно позволить вам переписать URL-адреса для серверной части.

Комментарии:

1. Сеть Transparens, похоже, не слишком отличается от l2bridge. Единственное отличие, которое я вижу, заключается в том, что для этого требуется подмена Mac, и bridge автоматически выполнит перевод Mac. Вы уверены, что прозрачная сеть будет работать с DNS иначе, чем l2bridge?

2. Да, я пробовал как PathStrip, так и PathPrefixStrip. Это не работает для приложений, которые я собираюсь разместить внутри контейнеров. Traefik перезаписывает URL только в URL запроса, но не в теле ответа. Таким образом, все ссылки на css и скрипты все равно будут пытаться загружаться из корня, domain.com/ даже если traefic работает по пути, подобному domain.com/deeper/path/ .

3. Никакой обратный прокси-сервер не изменит содержимое или тело ответа. Вам необходимо обновить свои приложения, чтобы использовать относительные пути для ресурсов. Например, удалите / from /deeper/path и используйте deeper/path без имени хоста или корневого пути.

4. Я не могу изменить приложения, они предоставляются мне как есть. Они действительно связаны с root, и они должны быть такими для активов, потому что сами приложения используют пути для других целей, таких как переключение языка интерфейса ( domain.com/en-eu/app ). В этом случае скрипты и CSS должны быть загружены из root в любом случае. Поэтому относительные пути не подойдут. Итак, снова propper DNS спас бы меня.