Страшно ли использовать сокет домена unix для подключения к Postgresql из контейнера докеров?

Предыстория ниже, но вот вопрос: я обнаружил, что если у меня есть postgresql, работающий на моем хосте докера, я могу подключиться к нему в контейнере через сокет домена, смонтированный как файл:

docker run -v /var/run/postgresql/:/var/run/postgresql

Это похоже на серьезный взлом, поэтому мне любопытно, действительно ли это ужасно в производственной среде. Мысли?


Предыстория

Предыстория заключается в том, что у меня есть postgresql, работающий на хосте докера, потому что я не доверяю докеру напрямую запускать postgresql.

Поэтому мне нужно подключиться к этому экземпляру postgresql из док-контейнера, работающего на том же сервере. Я попытался:

  • Использование --add-host

    Но это также был взлом, потому что требовалось, чтобы docker run был помещен в скрипт, чтобы определить правильный IP-адрес хост-компьютера. Что-то вроде:

     docker run --add-host=postgres-host:$(ip route show | awk {print $2})
    

    Мне не нравилось это делать.

  • Я пытался использовать --net=host, но... это не то, что нам нужно. Нам нужна оверлейная сеть.

  • Я попытался установить это внутри контейнера, посмотрев там IP-адрес хоста, но мне не очень понравилось запускать скрипт только для этой цели.

Итак... я подумал: а как насчет использования сокета домена?


person mlissner    schedule 07.05.2019    source источник


Ответы (2)


Установка сокетов не кажется мне хаком. На самом деле монтирование /var/run/docker.sock — это стандартный метод, используемый, если вы хотите использовать команды docker из контейнера.

person Alassane Ndiaye    schedule 07.05.2019
comment
Хм. Такого концепта еще не видел. Похоже, здесь есть хороший объяснитель: stackoverflow.com /вопросы/35110146/. Спасибо! - person mlissner; 07.05.2019

Я думал, что это security и scalability.

  • безопасность

    С докером, даже если контейнер был атакован хакерами, вы все равно можете иметь одну защиту между контейнером (веб-сервером) и хостом (сервером базы данных), но с unix socket, я думаю, данные будут напрямую доступны хакеру.

  • масштабируемость

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

    Но с unix-socket веб-сервер в докере не масштабируется, вам пришлось разместить веб-сервер (контейнер) на одном компьютере, чтобы использовать unix-socket базы данных.

person atline    schedule 07.05.2019
comment
Такой подход мне кажется не менее безопасным, чем наличие TCP-подключения к базе данных на хосте. - person David Maze; 07.05.2019
comment
Не уверен, что с TCP хакерам может потребоваться больше усилий, чтобы определить, какой порт открыт, а с сетью может быть больше способов (брандмауэр и т. Д.) Для контроля доступа. Но с сокетом unix дополнительная защита от контейнера отсутствует. Не знаком с безопасностью сети и хакеров, просто подумал. На самом деле, я думаю, это не связано с докером, а связано с преимуществом обратного прокси. Но я думаю, что пользователь должен думать о масштабируемости. - person atline; 07.05.2019