Подключение к Cloud SQL: Compute Engine, частный IP-адрес и прокси-сервер Cloud SQL

1. Введение

Последнее обновление: 06 мая 2021 г.

Думая о связи

Существует множество типов приложений и фреймворков. В этой лабораторной работе мы рассмотрим подключение к Cloud SQL из приложения, которое запускается на управляемой виртуальной машине в Google Compute Engine, через внутренний частный IP-адрес с использованием прокси-сервера Cloud SQL. Это невероятно безопасный способ запуска приложения с отслеживанием состояния в облаке. Вы сводите к минимуму свое воздействие в Интернете, ограничиваясь использованием только частного IP-адреса и используя прокси-сервер SQL, который управляет SSL-соединением за вас.

Одним из распространенных вариантов использования этого может быть, например, локальное приложение, которое было переведено для запуска в облаке, а не локально.

Что ты построишь

Эта кодовая лаборатория очень минималистична. Идея состоит в том, чтобы показать вам все тонкости соединительного элемента, не слишком задумываясь о самом приложении. В идеальном мире подключение к Cloud SQL аналогично подключению к любому другому экземпляру базы данных SQL, поэтому вы сможете взять то, что вы создадите в этой кодовой лаборатории, и применить его к любому рабочему приложению.

Инструкции будут включать как пошаговое руководство по выполнению действий в консоли GCP, так и эквиваленты команд gcloud для использования в CLI или автоматизации.

Отдельные шаги:

  • Создайте минимальный сервисный аккаунт, чтобы включить подключение к экземпляру Cloud SQL.
  • Создайте виртуальную машину в Google Compute Engine (GCE)
  • Создайте экземпляр Cloud SQL (в этом руководстве используется Postgres, но аналогично работает для MySQL или SQL Server).
  • Загрузите и запустите прокси-сервер Cloud SQL на экземпляре GCE.

Что вам понадобится

  • Учетная запись GCP, в которой у вас есть разрешения на включение API и создание сервисов.

2. Создайте учетную запись службы.

Учетные записи служб используются для предоставления разрешений на использование различных служб в вашем проекте GCP. Для этой лаборатории кода нам понадобится один, чтобы предоставить прокси-серверу Cloud SQL разрешение на подключение к нашему экземпляру Cloud SQL.

На консоли

Перейдите на страницу учетных записей службы IAM и нажмите кнопку f8393a08b37a422c.png кнопка вверху страницы.

Присвойте своей учетной записи службы уникальное имя и идентификатор и нажмите СОЗДАТЬ.

На следующей странице щелкните раскрывающийся список «Выберите роль». Отфильтруйте «Cloud SQL» и выберите роль Cloud SQL Client. Нажмите ПРОДОЛЖИТЬ.

Нажмите ГОТОВО.

Использование gcloud

Создайте учетную запись службы:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

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

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Например, если ваша учетная запись службы называется sa-test при ее создании, а ваш проект — my-project-test тогда команда будет такой:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Создание виртуальной машины Compute Engine

Google Compute Engine — это управляемая служба, на которой будет работать виртуальная машина, на которой будет находиться наше приложение, к которому мы хотим подключиться. В этой лаборатории кода мы не создаем приложение, а проверим подключение, запустив psql.

На консоли

Перейдите на страницу Google Compute Engine и нажмите кнопку 77c46cd1f51bed5c.png кнопка.

Вариантов здесь много, единственное, что вам нужно сделать, это:

  1. Дайте вашему экземпляру имя
  2. Измените Machine type на f1-micro
  3. В разделе «Доступ к удостоверениям и API» измените раскрывающийся список Service account с Default compute service account на ту, которую вы создали на предыдущем шаге.
  4. Нажмите «Создать» до конца внизу страницы.

Использование gcloud

Учетная запись службы — это полное имя учетной записи службы, созданной вами ранее, поэтому оно будет иметь формат: <NAME>@<PROJECT>.iam.gserviceaccount.com .

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Создание экземпляра Cloud SQL

Cloud SQL – это наше предложение по управляемым реляционным базам данных. Он поддерживает MySQL, PostgreSQL и SQL Server. Для этой лаборатории кода мы создадим базу данных Postgres, но инструкции для всех трех одинаковы.

На консоли

Перейдите на страницу Cloud SQL и нажмите кнопку 241836b315e11bf5.png кнопка.

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

  1. Дайте вашему экземпляру идентификатор
  2. Введите пароль для пользователя по умолчанию (имя пользователя будет использоваться по умолчанию для выбранной базы данных, например root для MySQL или postgres для PostgreSQL).
  3. Если вы изменили регион своего вычислительного экземпляра, вам также следует изменить регион здесь, чтобы он соответствовал.
  4. Прокрутите вниз и нажмите « show configuration options
  5. Разверните раздел Connectivity
  6. Снимите флажок « Public IP и установите флажок Private IP
  7. Убедитесь, что в раскрывающемся списке, который отображается, когда установлен флажок «Частный IP», выбрано default .
  8. Прокрутите вниз и нажмите «Создать».

Обычно запуск экземпляра занимает пару минут.

Использование gcloud

Поскольку здесь нет подсказок для включения API, нам придется сделать это вручную.

gcloud services enable servicenetworking.googleapis.com

Далее нам нужно включить подключение частных сервисов в нашей сети VPC по умолчанию. Первый шаг к этому — выделить именованный диапазон IP-адресов, который будет использоваться для нашего экземпляра.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Далее необходимо назначить этот диапазон IP-адресов нашим внутренним службам (это занимает около минуты).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

И, наконец, создание самого экземпляра в настоящее время доступно только в бета-версии. Комбинация --no-assign-ip и --network=default обеспечивает частное IP-подключение. В настоящее время невозможно одновременно включить частный IP-адрес и общедоступный IP-адрес, поэтому, если вам нужен публичный доступ, вам нужно будет отредактировать экземпляр после создания. Это займет несколько минут.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Установите и запустите прокси-сервер Cloud SQL.

Как только мы подключимся к виртуальной машине, нам понадобится строка подключения к экземпляру. Сначала мы это возьмем, а затем подключимся к самой виртуальной машине через SSH. Инструкции для этих частей будут в соответствующих разделах «Консоль» и «gcloud», а остальные будут командами, запускаемыми из оболочки на виртуальной машине в отдельном разделе.

На консоли

Перейдите сюда и щелкните имя своего экземпляра Cloud SQL.

Прокрутите немного вниз и скопируйте куда-нибудь Connection name , чтобы использовать его позже.

Перейдите на страницу списка экземпляров Google Compute Engine и найдите строку с вашей виртуальной машиной.

В столбце Connect нажмите кнопку SSH , и откроется отдельное окно, обеспечивающее безопасное подключение к виртуальной машине.

Пропустите раздел Using gcloud , чтобы ознакомиться с остальными инструкциями, поскольку они одинаковы для обоих.

Использование gcloud

Замените <INSTANCE NAME> именем вашего экземпляра Cloud SQL:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Сохраните имя подключения экземпляра для использования позже.

Вам нужно будет заменить <ZONE> зоной, которая использовалась при создании экземпляра. Если вы его не меняли, то было установлено значение us-central1-b . А также замените <INSTANCE_NAME> тем, что вы указали ранее.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

После подключения к виртуальной машине

Прежде всего нам нужно скачать прокси. Зависит от вашей операционной системы. Если вы не меняли ОС при создании виртуальной машины, то это будет Linux и вы можете использовать:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Если вы сменили операционную систему, вы можете перейти сюда и найти нужную команду, чтобы получить прокси для вашей ОС.

Чтобы запустить прокси-сервер, возьмите имя подключения экземпляра, которое вы скопировали из сведений об экземпляре Cloud SQL, чтобы заменить <INSTANCE_CONNECTION_NAME> . Также обратите внимание: номер порта TCP может измениться, если вы не используете базу данных Postgres или если вы изменили порт по умолчанию, который прослушивает база данных.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Проверка соединения и накрутка

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

Из сеанса SSH на виртуальной машине:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Затем укажите пароль пользователя по умолчанию, который вы установили при создании экземпляра Cloud SQL.

Поздравляем! Если все прошло хорошо, у вас должно появиться приглашение Postgres, и вы сможете запускать команды в своей базе данных.

Что дальше?

Посмотрите некоторые из этих кодовых лабораторий...

Справочная документация