Как заставить Docker разрешить хост DMZ?

Представьте, что у меня есть эта настройка:

  • Сервер приложений
    • Частный IP: 1.0.0.1; Частное имя хоста: machine1.internal.domain
    • Публичный IP: 2.0.0.1; Публичное имя хоста: machine1.example.com
  • Сервер базы данных
    • Частный IP: 1.0.0.2; Частное имя хоста: machine2.internal.domain
    • Публичный IP: 2.0.0.2; Публичное имя хоста: machine2.example.com

Эти 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 запустите команду
  • Не содержащая сеть для контейнера в машине1: docker blabla --net=host
    • Это не правильно, хотя я не могу сказать, каковы будут последствия.

1 ответ

Если у вас есть внутренний DNS-сервер, вы можете запустить приложение Docker с параметром --dns=[].

Настройте внутренний DNS-сервер в качестве сервера пересылки к реальному DNS-серверу, когда поиск имени не удается, чтобы любые внутренние имена использовали внутренний адрес.

Другой вариант - записать пользовательский файл hosts в образ докера, который будет в порядке, если они исправлены, но не всегда идеален.

Третий способ - рассмотреть возможность использования чего-то вроде skydns. Если ваши док-хосты работают под управлением CoreOS или если у вас есть кластер etcd2, он тоже будет работать.

Безусловно, лучший вариант - это чтобы ваши хосты работали через какой-то механизм обнаружения, где все находится, а не полагается на DNS. Тем не менее, они обычно требуют что-то вроде etcd2 или консула.

Другие вопросы по тегам