1. Обзор
Существует несколько вариантов подключения к частному экземпляру Cloud SQL из другого проекта или VPC. Private Service Connect (PSC) позволяет производителям услуг предоставлять свои услуги через вложения служб. Эти вложения служб могут использоваться потребителями для создания конечных точек PSC и/или серверных частей PSC в своей среде и подключения к этим службам производителя через указанный частный IP-адрес.
Cloud SQL имеет возможность использовать вложение службы PSC для обеспечения частного подключения. В этой лабораторной работе вы можете настроить и протестировать эту опцию.
В этой лабораторной работе вы создадите простую архитектуру, иллюстрирующую использование доступа к конечной точке PSC с CloudSQL.
Рисунок 1.
Для этой лабораторной работы вам понадобятся два проекта или отдельные VPC в одном проекте.
Цели
В ходе этой лабораторной работы вы научитесь выполнять следующую задачу:
- Создайте экземпляр CloudSQL с прикрепленным сервисом PSC.
- Создайте статический IP-адрес
- Создайте конечную точку PSC в потребительском VPC для подключения к базе данных CloudSQL.
- Проверьте доступ к базе данных SQL с тестовой виртуальной машины в потребительской сети через IP-адрес конечной точки PSC.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.
3. Задача 1. Настройка среды для проекта базы данных с помощью (Terraform)
В проекте базы данных мы создадим собственный VPC с правилами брандмауэра и подсетью. Откройте облачную консоль и выберите проект, который вы будете использовать для базы данных.
- Откройте Cloud Shell, расположенный в верхней части консоли справа. Убедитесь, что вы видите идентификатор проекта базы данных для проекта базы данных в Cloud Shell, подтвердите все запросы на разрешение доступа.
- Создайте папку с именем terraform-db и перейдите в нее.
mkdir terraform-db && cd terraform-db
- Создайте файл main.tf,variable.tf и data.tf.
touch main.tf variable.tf database.tf
- Переключитесь в режим редактора Cloud Shell . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс мог загрузиться.
- После загрузки перейдите в меню «Файл» > «Открыть папку» , перейдите в /home/your-user-name/terraform-db и выберите «ОК» , чтобы открыть папку в редакторе.
- Выберите файлvariable.tf и добавьте следующее. Замените текст
your-database-project-id-here
фактическим идентификатором проекта базы данных в кавычках. Замените текстyour-consumer-project-id-here
фактическим идентификатором потребительского проекта в кавычках.
variable "project_id" { type = string default = "your-database-project-id-here" } variable "project_id_consumer" { type = set(string) default = ["your-consumer-project-id-here"] } variable "network_id" { type = string default = "database-net" } variable "region_id" { type = string default = "us-east1" } variable "db_password" { type = string default = "cloudsql24" }
- Затем откройте файл main.tf. Мы собираемся добавить код терраформирования для выполнения различных действий, как описано ниже.
Включить API | |
Создать VPC | |
Добавить правила брандмауэра | |
- Скопируйте и вставьте следующее в основной файл .tf .
resource "google_project_service" "default" { for_each = toset([ "compute.googleapis.com", "sqladmin.googleapis.com" ]) service = each.value disable_on_destroy = false } resource "google_compute_network" "default" { project = var.project_id name = var.network_id auto_create_subnetworks = true mtu = 1460 routing_mode = "GLOBAL" } resource "google_compute_firewall" "allow_icmp" { name = "allow-icmp-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] target_tags = ["allow-icmp"] } resource "google_compute_firewall" "allow_ssh" { name = "allow-ssh-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "tcp" ports = ["22"] } source_ranges = ["0.0.0.0/0"] target_tags = ["allow-ssh"] } resource "google_compute_firewall" "allow_sql" { name = "allow-sql-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "tcp" ports = ["3306"] } source_ranges = ["0.0.0.0/0"] } resource "google_compute_firewall" "allow_internal" { name = "allow-internal-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "icmp" } allow { protocol = "tcp" ports = ["0-65535"] } allow { protocol = "udp" ports = ["0-65535"] } source_ranges = ["10.128.0.0/9"] }
- Вернитесь к терминалу Cloud Shell, убедитесь, что вы находитесь в каталоге terraform-db
cd terraform-db
и выполните следующие команды
terraform init
Инициализирует рабочий каталог. На этом этапе загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска.
4. Задача 2. Создать экземпляр CloudSQL с прикрепленным PSC (Terraform)
Давайте воспользуемся Terraform для создания экземпляра CloudSQL с опцией PSC, позволяющей подключение. Завершите эту настройку в проекте базы данных .
- Переключитесь в режим редактора Cloud Shell . Убедитесь, что вы находитесь в папке
terraform-db
. Выберите файлdatabase.tf
и добавьте следующее.
resource "google_sql_database_instance" "default" {
name = "psc-sql-db"
region = var.region_id
database_version = "MYSQL_8_0"
settings {
tier = "db-f1-micro"
availability_type = "REGIONAL"
backup_configuration {
enabled = true
binary_log_enabled = true
}
ip_configuration {
psc_config {
psc_enabled = true
allowed_consumer_projects = var.project_id_consumer
}
ipv4_enabled = false
}
}
deletion_protection = false
}
resource "google_sql_user" "users" {
name = "testsql"
instance = google_sql_database_instance.default.name
password = var.db_password
}
- Вернитесь к терминалу Cloud Shell и убедитесь, что вы находитесь в каталоге terraform-db . Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска. Создание экземпляра CloudSQL с вложением PSC может занять до 5+ минут.
Проверить базу данных
- После завершения перейдите к SQL в консоли и выберите вновь созданный экземпляр базы данных psc-sql-db .
- С левой стороны разверните слайдер параметров SQL и выберите «Соединения».
- На вкладке «Сводка» вы можете увидеть информацию о соединении.
- Скопируйте адрес вложения службы и сохраните его где-нибудь в своей системе.
- Это понадобится вам для выполнения задания 3 шага 8.
- В левой части разверните слайдер «Параметры SQL» и выберите «Пользователи».
- Вы должны увидеть пользователя с именем testsql с паролем cloudsql24 (позже он будет использоваться для доступа к базе данных).
5. Задача 3. Настройка среды потребительского проекта (Terraform)
В потребительском проекте мы создадим собственный VPC с правилами и подсетью брандмауэра. Откройте облачную консоль и выберите проект, который вы будете использовать.
- В верхней части консоли, справа от значка Google Cloud, щелкните раскрывающийся список и выберите вкладку «Все» .
- Из списка проектов выберите идентификатор потребительского проекта, чтобы продолжить.
- Откройте Cloud Shell, расположенный в верхней части консоли справа. Убедитесь, что вы видите идентификатор потребительского проекта в Cloud Shell, подтвердите все запросы на разрешение доступа.
- Создайте папку с именем terraform-consumer и перейдите в нее.
mkdir terraform-consumer && cd terraform-consumer
- Создайте файлы main.tf,variable.tf и psc.tf.
touch main.tf variable.tf psc.tf
- Переключитесь в режим редактора Cloud Shell для идентификатора потребительского проекта . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс мог загрузиться.
- После загрузки перейдите в меню «Файл» > «Открыть папку» , перейдите в /home/your-user-name/terraform-consumer и выберите «ОК» , чтобы открыть папку в редакторе.
- Выберите файлvariable.tf и добавьте следующее. Замените текст
your-consumer-project-id-here
фактическим идентификатором потребительского проекта в кавычках. Замените текстyour-psc-attachment-id-here
адресом вложения psc в кавычках. Это идентификатор, который вы скопировали в разделе 2–5 задачи 2.
variable "project_id" { type = string default = "your-consumer-project-id-here" } variable "psc_attachment_id" { type = string default = "your-psc-attachment-id-here" } variable "network_id" { type = string default = "psc-endpoint-net" } variable "region_id" { type = string default = "us-east1" } variable "region_id2" { type = string default = "us-central1" }
- Затем откройте файл main.tf. Мы собираемся добавить код терраформирования для выполнения различных действий, как описано ниже.
Включить API | |
Создать VPC | |
Создать NAT-шлюз | |
Добавить правила брандмауэра | |
- Скопируйте и вставьте следующее в основной файл .tf .
resource "google_project_service" "default" { for_each = toset([ "compute.googleapis.com", "cloudresourcemanager.googleapis.com" ]) service = each.value disable_on_destroy = false } resource "google_compute_network" "default" { project = var.project_id name = var.network_id auto_create_subnetworks = false mtu = 1460 routing_mode = "GLOBAL" } resource "google_compute_subnetwork" "vm_subnet" { name = "vm-subnet" ip_cidr_range = "192.168.50.0/24" region = var.region_id2 network = google_compute_network.default.name project = var.project_id } resource "google_compute_subnetwork" "psc_subnet" { name = "psc-subnet" ip_cidr_range = "192.168.90.0/24" region = var.region_id network = google_compute_network.default.name project = var.project_id } resource "google_compute_router" "default" { name = "outbound-nat" region = var.region_id2 network = google_compute_network.default.id bgp { asn = 64514 } } resource "google_compute_router_nat" "default" { name = "outbound-nat-gw" router = google_compute_router.default.name region = google_compute_router.default.region nat_ip_allocate_option = "AUTO_ONLY" source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" log_config { enable = true filter = "ERRORS_ONLY" } } resource "google_compute_firewall" "allow_icmp" { name = "allow-icmp-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] } resource "google_compute_firewall" "allow_ssh" { name = "allow-ssh-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "tcp" ports = ["22"] } source_ranges = ["0.0.0.0/0"] target_tags = ["allow-ssh"] } resource "google_compute_firewall" "allow_internal" { name = "allow-internal-${google_compute_network.default.name}" network = google_compute_network.default.id project = var.project_id allow { protocol = "icmp" } allow { protocol = "tcp" ports = ["0-65535"] } allow { protocol = "udp" ports = ["0-65535"] } source_ranges = ["192.168.0.0/16"] }
- Вернитесь к терминалу Cloud Shell, убедитесь, что вы находитесь в каталоге terraform-consumer
cd terraform-consumer
в потребительском проекте, и выполните следующие команды
terraform init
Инициализирует рабочий каталог. На этом этапе загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска.
6. Задача 4. Создайте конечную точку PSC для подключения базы данных SQL в потребительском проекте и протестируйте виртуальную машину (Terraform).
Завершите эту настройку в потребительском проекте .
- Вернитесь в редактор Cloud Shell, откройте каталог terraform-consumer и выберите файл
psc.tf
Добавьте в файл следующий код Terraform. При этом создается статический внутренний IP-адрес, конечная точка PSC и тестовая виртуальная машина с установленной базой данных Maria DB.
resource "google_compute_address" "default" { name = "psc-ip" region = var.region_id address_type = "INTERNAL" subnetwork = google_compute_subnetwork.psc_subnet.name address = "192.168.90.100" } resource "google_compute_forwarding_rule" "default" { name = "psc-sql-endpoint" region = var.region_id network = google_compute_network.default.name ip_address = google_compute_address.default.self_link load_balancing_scheme = "" target = var.psc_attachment_id } resource "google_compute_instance" "sql_test_vm" { name = "sql-test-vm" machine_type = "e2-medium" zone = "${var.region_id2}-b" project = var.project_id boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { subnetwork = google_compute_subnetwork.vm_subnet.name } # No external IP address network_performance_config { total_egress_bandwidth_tier = "DEFAULT" } tags = ["allow-icmp", "allow-ssh", "allow-internal", "allow-health-check"] # Install MariaDB at startup metadata_startup_script = <<EOF #!/bin/bash apt-get update apt-get install -y mariadb-server systemctl enable mariadb EOF }
- Вернитесь к терминалу Cloud Shell, убедитесь, что вы находитесь в каталоге terraform-consumer
cd terraform-consumer
в потребительском проекте, и выполните следующие команды
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска. - Поскольку наша виртуальная машина и конечная точка находятся в разных регионах, нам необходимо включить глобальный доступ на конечной точке PSC . Делаем это через консоль
- В консоли потребительского проекта перейдите к Private Service Connect . На вкладке « Подключенная конечная точка» найдите раздел «Конечная точка» и выберите psc-sql-endpoint.
- Теперь выберите «РЕДАКТИРОВАТЬ», а затем установите флажок рядом с «Включить глобальный доступ и опцию сохранения» .
- Перейдите к следующему шагу, чтобы проверить подключение
7. Задача 5. Проверка подключения конечной точки от виртуальной машины через IP-адрес PSC.
Завершите это в потребительском проекте
- Перейдите к экземпляру виртуальной машины . Выберите sql-test-vm
- Выберите опцию SSH для подключения к виртуальной машине.
- Подключитесь к БД через конечную точку, выполнив следующее:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Когда соединение установлено, создайте базу данных со следующим psc-sql-db .
CREATE DATABASE remotesqldb;
- После завершения введите exit, чтобы выйти из соединения.
8. Задача 6. Проверка записи в базе данных
Завершите эту проверку в проекте базы данных.
- В верхней части консоли, справа от значка Google Cloud, щелкните раскрывающийся список и выберите вкладку «Все» .
- Из перечисленных проектов выберите идентификатор проекта базы данных , чтобы продолжить.
- Перейдите к SQL , выберите базу данных psc-sql-db , разверните параметры SQL и выберите «Базы данных» . Вы должны увидеть только что созданную базу данных под названием Remotesqldb из виртуальной машины потребительского проекта**
.
**
9. Очистка
Завершите это в проекте базы данных.
- Выберите идентификатор проекта базы данных
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор проекта базы данных.
- Перейдите в каталог terraform-db
cd terraform-db
и выполните следующую командуterraform destroy
и введитеyes
все ресурсы, которые вы создали в своем проекте базы данных с помощью Terraform, будут удалены.
Завершите это в проекте Consumer.
- Выберите идентификатор потребительского проекта
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор потребительского проекта.
- Перейдите в каталог terraform-consumer
cd terraform-consumer
и выполните следующую командуterraform destroy
и введитеyes
все ресурсы, которые вы создали в своем проекте базы данных с помощью Terraform, будут удалены.
10. Поздравления
Поздравляем, вы успешно настроили экземпляр Cloud SQL с подключением PSC и создали конечную точку Private Service Connect в другом VPC. Вам удалось успешно подключиться к базе данных с удаленной виртуальной машины через конечную точку PSC.
Узнать больше
Вы можете узнать больше о Private Service Connect и Cloud SQL.