Как заставить Docker разрешить хост DMZ?
Представьте, что у меня есть эта настройка:
- Сервер приложений
- Частный IP:
1.0.0.1
; Частное имя хоста:machine1.internal.domain
- Публичный IP:
2.0.0.1
; Публичное имя хоста:machine1.example.com
- Частный IP:
- Сервер базы данных
- Частный IP:
1.0.0.2
; Частное имя хоста:machine2.internal.domain
- Публичный IP:
2.0.0.2
; Публичное имя хоста:machine2.example.com
- Частный IP:
Эти 2 машины находятся в DMZ.
Machine1 должен подключиться к machine2, используя внутреннее имя хоста. Важно одно: мы не хотим, чтобы трафик между этими двумя выходил за пределы DMZ. И имя хоста machine2.internal.domain
жестко запрограммирован в приложении, работающем на компьютере #1.
Без настройки Dockerized:
- Случай № 1: Если разрешение имен работает для
machine2.internal.domain
, все уже хорошо. - Случай № 2: В противном случае я бы добавил запись в
/etc/hosts
в машине1:machine2.internal.domain 1.0.0.2
С установкой Dockerized я знаю, когда разрешение имен не работает, контейнер Docker не может добраться до machine2, так как он не наследует записи в /etc/hosts
хост машины.
Как я могу заставить эту вещь работать лучше всего? ... для обоих случаев: разрешение DNS работает, а не работает.
Я рассмотрел следующие варианты для случая 2:
- Передача IP-адреса machine2 в контейнер Docker на machine1:
docker run --add-host machine2.internal.domain:1.0.0.2 ...
- Я должен определить IP
machine2.internal.domain
дважды: один раз в/etc/hosts
и однажды в Docker запустите команду
- Я должен определить IP
- Не содержащая сеть для контейнера в машине1:
docker blabla --net=host
- Это не правильно, хотя я не могу сказать, каковы будут последствия.
1 ответ
Если у вас есть внутренний DNS-сервер, вы можете запустить приложение Docker с параметром --dns=[].
Настройте внутренний DNS-сервер в качестве сервера пересылки к реальному DNS-серверу, когда поиск имени не удается, чтобы любые внутренние имена использовали внутренний адрес.
Другой вариант - записать пользовательский файл hosts в образ докера, который будет в порядке, если они исправлены, но не всегда идеален.
Третий способ - рассмотреть возможность использования чего-то вроде skydns. Если ваши док-хосты работают под управлением CoreOS или если у вас есть кластер etcd2, он тоже будет работать.
Безусловно, лучший вариант - это чтобы ваши хосты работали через какой-то механизм обнаружения, где все находится, а не полагается на DNS. Тем не менее, они обычно требуют что-то вроде etcd2 или консула.