Как получить доступ к базе данных на Docker Swarm, не открывая порты для Интернета?
Мне было очень трудно придумать короткое и описательное название для этого... Позвольте мне объяснить:
В классическом Docker (без режима роя) моя система была настроена так, чтобы моя база данных PostgreSQL выставляла свой основной порт (5432) только для localhost. Таким образом я мог подключиться через SSH к своему веб-серверу, туннелировать порт 5432 к localhost и использовать pgAdmin на своем компьютере разработчика, как если бы база данных работала локально на моем компьютере. Это удобно в использовании и (насколько мне известно) довольно безопасно.
Тем не менее, в настоящее время я нахожусь в процессе миграции этого в режим роя. Насколько я знаю (и мог бы гуглить), невозможно открыть сервисный порт только для localhost в режиме роя. Это также имеет смысл, поскольку сервисы могут самопроизвольно перемещаться на другой узел, и вы действительно не хотите беспокоиться о том, какой сервис и где работает.
В моем случае служба базы данных будет ограничена одним узлом, поскольку я использую стандартные локальные тома для сохранения базы данных (по крайней мере, на данный момент). Итак, я знаю, на какой машине работает БД.
Теперь службы могут нормально общаться друг с другом, не открывая порты, потому что все они находятся в одной оверлейной сети. Однако когда я хочу интерактивно проверить (или изменить) свою базу данных, например, с помощью pgAdmin, я вижу только неудовлетворительные решения:
- выставить порт 5432 (и все его потенциально уязвимые уязвимости) на интернет
- раскрутить службу pgAdmin в той же оверлейной сети, что и postgresql, и открыть ее в Интернете (опять же: взломать)
- SSH в узел db, exec в контейнер и все из командной строки (тьфу...)
Есть ли лучший способ справиться с этим? Я что-то пропустил?
Кроме того, я считаю следующие пункты не по теме для этого обсуждения:
- Я знаю, что вы не должны вручную изменять живые базы данных. Это только для тестирования и диагностики.
- Я знаю, что было бы лучше использовать некоторые передовые средства управления громкостью, такие как REX-Ray или что-то еще, но в настоящее время это для меня излишне. Пожалуйста, не пытайтесь убедить меня отойти от местных томов только потому, что это "лучше".
- Я знаю, что просто не мог использовать режим роя для БД. Я все еще хочу научиться правильно обращаться с этим в режиме роя, так как сценарий использования (безопасный доступ к сервису роя) не кажется мне очень экзотическим. Также я хочу использовать некоторые функции только для роя, такие как секреты и конфиги.