Доступ к внешнему ресурсу базы данных в сервисе без селектора - PullRequest
0 голосов
/ 03 июля 2019

Я создал управляемую базу данных Postgres в Google Cloud. Эта база данных получила внешний IP-адрес. На втором этапе я создал кластер Kubernetes. В k8s я хочу получить доступ к этой внешней базе данных. Поэтому я создал сервис без селектора меток, но с внешней конечной точкой, указывающей на мою базу данных Postgres.

Мне пришлось разрешить базе данных Postgres получать доступ от (трех) узлов кластера. Я настроил это в Google Cloud Console (SQL).

Мой первый вопрос: это правильный способ интеграции внешней базы данных? Особенно эта конфигурация IP-доступа?

Для проверки моего соединения с базой данных моей первой попыткой было установить переадресацию портов с моего локального хоста. Моя идея состояла в том, чтобы получить доступ к этой базе данных через мою Database-IDE (datagrip). Однако при попытке установить переадресацию порта я получаю следующую ошибку:

error: cannot attach to *v1.Service: invalid service 'postgres-bla-bla': Service is defined without a selector

Второй вопрос: как получить доступ к этой услуге локально?

На третьем шаге я создал модуль с docker-образом 'partlab / ubuntu-postgresql'. Я выполнил команду 'kctrl exec -it ...' и смог получить доступ к своей базе данных Postgres с помощью

psql -h postgres-bla-bla ...

Так что в основном это работает. Но я уверен, что у моего решения есть некоторые недостатки. Что я могу сделать лучше? Как решить проблему из вопроса 2?

1 Ответ

0 голосов
/ 04 июля 2019

Хотя можно получить доступ к службам в кластере, используя службу без селекторов , альтернативный подход, который может соответствовать вашему конкретному сценарию, будет использовать службу ExternalName :

Службы типа ExternalName сопоставляют Службу с DNS-именем, а не с типичный селектор, такой как my-service или cassandra

Кроме того, учитывая, что вы используете Cloud SQL на GCP, более надежный способ подключения к базе данных без необходимости заносить в белый список IP-адреса узла будет использовать Cloud SQL proxy :

Cloud SQL Proxy обеспечивает безопасный доступ к вашему Cloud SQL Second Создание экземпляров без внесения в белый список IP-адресов или настроить SSL.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...