1. Обзор
Существует несколько вариантов подключения к частному экземпляру Cloud SQL из другого проекта или сети VPC. Вы можете использовать доступ к частным службам (PSA) для доступа к внутренним IP-адресам Google и сторонних служб через частные соединения. Чтобы расширить доступ к базе данных, теперь вы также можете включить Private Service Connect (PSC).
Private Service Connect (PSC) позволяет производителям услуг предоставлять свои услуги через вложения служб , которые потребители могут использовать для создания конечных точек PSC и/или серверных частей PSC в своей среде. Через эти конечные точки PSC они могут подключаться к службам производителя через указанный пользователем частный IP-адрес.
В этой лабораторной работе вы можете настроить и протестировать эту опцию.
В этой лабораторной работе вы создадите простую архитектуру, которая иллюстрирует использование доступа к конечным точкам PSA и PSC с CloudSQL.
Рисунок 1.
Для этой лабораторной работы вам понадобятся два проекта или отдельные VPC в одном проекте.
Цели
В ходе этой лабораторной работы вы научитесь выполнять следующую задачу:
- Включить сервисную сеть
- Настроить рекламную кампанию
- Создайте экземпляр CloudSQL с помощью PSA.
- Включите вложение службы PSC.
- Создайте конечную точку PSC в потребительском VPC для подключения к базе данных CloudSQL.
- Проверьте доступ к базе данных SQL с тестовых виртуальных машин как в исходном, так и в потребительском VPC.
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, создадим диапазон PSA, создадим пиринг сетевых служб и создадим правила брандмауэра. Откройте облачную консоль и выберите проект, который вы будете использовать для базы данных.
- Откройте Cloud Shell, расположенный в верхней части консоли справа. Убедитесь, что вы видите идентификатор проекта базы данных для проекта базы данных в Cloud Shell, подтвердите все запросы на разрешение доступа.
- Создайте папку с именем terraform-db-psc и перейдите в нее.
mkdir terraform-db-psc && cd terraform-db-psc
- Создайте файл main.tf,variable.tf, nat-vm.tf и data.tf.
touch main.tf variable.tf nat-vm.tf database.tf
- Переключитесь в режим редактора Cloud Shell . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс мог загрузиться.
- После загрузки перейдите в меню «Файл» > «Открыть папку» , перейдите в папку /home/your-user-name/terraform-db-psc и выберите «ОК» , чтобы открыть папку в редакторе.
- Выберите файл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 | |
Добавить правила брандмауэра | |
Создать диапазон PSA | |
Создать пиринг | |
- Скопируйте и вставьте следующее в основной файл .tf .
resource "google_project_service" "default" { for_each = toset([ "compute.googleapis.com", "servicenetworking.googleapis.com", "sqladmin.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 = true mtu = 1460 routing_mode = "GLOBAL" } resource "google_compute_global_address" "psa_range" { name = "psa-range-${google_compute_network.default.name}" project = var.project_id purpose = "VPC_PEERING" address_type = "INTERNAL" prefix_length = 20 address = "172.18.0.0" network = google_compute_network.default.id } resource "google_service_networking_connection" "private_connection" { network = google_compute_network.default.self_link service = "servicenetworking.googleapis.com" reserved_peering_ranges = [ google_compute_global_address.psa_range.name, ] } 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", "172.18.0.0/20"] # Include PSA range }
- Вернитесь к терминалу Cloud Shell, убедитесь, что вы находитесь в каталоге terraform-db-psc
cd terraform-db-psc
и выполните следующие команды.
terraform init
Инициализирует рабочий каталог. На этом этапе загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска.
4. Задача 2. Создание экземпляра CloudSQL с помощью PSA (Terraform)
Давайте воспользуемся Terraform для создания экземпляра CloudSQL с опцией PSA, разрешающей подключение. Завершите эту настройку в проекте базы данных .
- Переключитесь в режим редактора Cloud Shell . Убедитесь, что вы находитесь в папке
terraform-db-psc
. Выберите файлdatabase.tf
и добавьте следующее.
resource "google_sql_database_instance" "default" {
name = "psc-psa-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 {
ipv4_enabled = "false"
private_network = google_compute_network.default.id
}
}
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-psc . Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска. Создание экземпляра CloudSQL с помощью PSA может занять до 15+ минут.
Проверить базу данных
- После завершения перейдите к SQL в консоли и выберите вновь созданный экземпляр базы данных psc-psa-sql-db .
- С левой стороны разверните слайдер параметров SQL и выберите «Соединения».
- На вкладке «Сводка» вы можете увидеть информацию о соединении.
- Скопируйте внутренний IP-адрес и сохраните его где-нибудь в своей системе. Как видите, он был назначен из зарезервированного нами диапазона.
- Этот IP-адрес понадобится вам для выполнения задачи 3, шага 5.
- В левой части разверните слайдер «Параметры SQL» и выберите «Пользователи».
- Вы должны увидеть пользователя с именем testsql с паролем cloudsql24 (позже он будет использоваться для доступа к базе данных).
5. Задача 3. Создайте тестовую виртуальную машину и подключитесь к экземпляру SQL из проекта базы данных (Terraform).
Давайте воспользуемся Terraform для создания тестовой виртуальной машины и шлюза NAT. Завершите эту настройку в проекте базы данных .
- Переключитесь в режим редактора Cloud Shell . Убедитесь, что вы находитесь в папке
terraform-db-psc
. Выберите файлnat-vm.tf
и добавьте следующее.
resource "google_compute_router" "default" {
name = "outbound-nat"
region = var.region_id
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_instance" "sql_net_vm" {
name = "db-vm-test"
machine_type = "e2-medium"
zone = "${var.region_id}-b"
project = var.project_id
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.default.self_link
}
# 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-db-psc . Теперь, чтобы создать ресурсы, запустите
terraform plan, then terraform apply
и введитеyes
для запуска. Это создаст шлюз NAT и виртуальную машину с установленной MariaDB.
Проверить базу данных
Завершите это в потребительском проекте
- Перейдите к экземпляру виртуальной машины . Выберите db-vm-test
- Выберите опцию SSH для подключения к виртуальной машине.
- Подключитесь к БД через локальный IP-адрес, который вы скопировали ранее, выполнив следующие действия:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24
PS Измените IP-адрес на свой фактический IP-адрес, чтобы он мог подключиться.
- Когда соединение установлено, создайте базу данных со следующей командой localvpcsqldb .
CREATE DATABASE localvpcsqldb;
- После завершения введите exit, чтобы выйти из соединения. Введите exit еще раз, чтобы закрыть виртуальную машину.
6. Задача 4. Включите PSC на экземпляре CloudSQL
Давайте воспользуемся командами gcloud, чтобы включить опцию PSC, разрешающую подключение. Завершите эту настройку в проекте базы данных .
- Переключитесь в представление Cloud Shell .
- Выполните следующую команду в Cloud Shell.
- Замените Обеспечение
YOUR_DB_PROJECT_HERE
идентификатором проекта базы данных. - Замените Обеспечение
YOUR_CONSUMER_PROJECT_HERE
идентификатором потребительского проекта.
project_id=YOUR_DB_PROJECT_HERE
allowed_project=YOUR_CONSUMER_PROJECT_HERE
gcloud beta sql instances patch psc-psa-sql-db \
--project=$project_id \
--enable-private-service-connect \
--allowed-psc-projects=$allowed_project
- Это обновит существующую базу данных с вложением PSC. Это займет некоторое время, более 10 минут.
Если вы получаете сообщение об ошибке ожидания тайм-аута, оно также должно дать вам команду продолжить наблюдение за прогрессом. Что-то вроде : «Вы можете продолжить ожидание операции, запустив `gcloud beta sql Operations wait –project »
Обратите внимание, что вы можете развернуть новую базу данных с включенными PSA и PSC с самого начала.
Проверить базу данных
- После завершения перейдите к SQL в консоли, выберите экземпляр базы данных psc-psa-sql-db .
- С левой стороны разверните слайдер параметров SQL и выберите «Соединения».
- На вкладке «Сводка» вы можете увидеть информацию о соединении.
- Скопируйте адрес вложения службы и сохраните его где-нибудь в своей системе.
- Это понадобится вам для выполнения следующего задания 5 шаг 8.
7. Задача 5. Настройка среды потребительского проекта (Terraform)
В потребительском проекте мы создадим собственный VPC с правилами и подсетью брандмауэра. Откройте облачную консоль и выберите проект, который вы будете использовать.
- В верхней части консоли, справа от значка Google Cloud, щелкните раскрывающийся список и выберите вкладку «Все» .
- Из списка проектов выберите идентификатор потребительского проекта, чтобы продолжить.
- Откройте Cloud Shell, расположенный в верхней части консоли справа, убедитесь, что вы видите идентификатор потребительского проекта в Cloud Shell, подтвердите все запросы на разрешение доступа.
- Создайте папку с именем terraform-consumer-psc и перейдите в нее.
mkdir terraform-consumer-psc && cd terraform-consumer-psc
- Создайте файлы main.tf,variable.tf и psc.tf.
touch main.tf variable.tf psc.tf
- Переключитесь в режим редактора Cloud Shell для идентификатора потребительского проекта . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс мог загрузиться.
- После загрузки перейдите в меню «Файл» > «Открыть папку» , перейдите в папку /home/your-user-name/terraform-consumer-psc и выберите «ОК» , чтобы открыть папку в редакторе.
- Выберите файлvariable.tf и добавьте следующее. Замените текст
your-consumer-project-id-here
фактическим идентификатором потребительского проекта в кавычках. Замените текстyour-psc-attachment-id-here
адресом вложения psc в кавычках. Это идентификатор, который вы скопировали в разделе 5–7 задачи 4.
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-vpc" } variable "region_id" { type = string default = "us-east1" }
- Затем откройте файл 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_pc" { name = "vm-net" ip_cidr_range = "192.168.80.0/24" region = var.region_id network = google_compute_network.default.name project = var.project_id } resource "google_compute_subnetwork" "psc_subnet_ip" { name = "psc-subnet" ip_cidr_range = "192.168.100.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_id 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-psc
cd terraform-consumer-psc
в потребительском проекте, и выполните следующие команды
terraform init
Инициализирует рабочий каталог. На этом этапе загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска.
8. Задача 6. Создайте конечную точку PSC для подключения базы данных SQL в потребительском проекте и протестируйте виртуальную машину (Terraform)
Завершите эту настройку в потребительском проекте .
- Вернитесь в редактор Cloud Shell, откройте каталог terraform-consumer-psc и выберите файл
psc.tf
Добавьте в файл следующий код Terraform. При этом создается статический внутренний IP-адрес, конечная точка PSC и тестовая виртуальная машина с установленной базой данных Maria DB.
resource "google_compute_address" "default" { name = "psc-ip-1" region = var.region_id address_type = "INTERNAL" subnetwork = google_compute_subnetwork.psc_subnet_ip.name address = "192.168.100.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 = "remote-sql-test-vm" machine_type = "e2-medium" zone = "${var.region_id}-b" project = var.project_id boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { subnetwork = google_compute_subnetwork.vm_subnet_pc.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-psc
cd terraform-consumer-psc
в потребительском проекте, и выполните следующие команды
terraform plan
Создает план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, запустите команду
terraform apply
и введитеyes
для запуска.
9. Задача 7. Проверка подключения конечной точки от виртуальной машины через IP-адрес PSC
Завершите это в потребительском проекте
- Перейдите в экземпляр виртуальной машины . Выберите удаленную-sql-test-vm.
- Выберите опцию SSH для подключения к виртуальной машине.
- Подключитесь к БД через конечную точку, выполнив следующее:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
- Когда соединение установлено, создайте базу данных со следующим psc-sql-db .
CREATE DATABASE remotepscpsasqldb;
- После завершения введите exit, чтобы выйти из соединения. Введите exit еще раз, чтобы закрыть виртуальную машину.
10. Задача 8. Проверка записи в базе данных
Завершите эту проверку в проекте базы данных.
- В верхней части консоли, справа от значка Google Cloud, щелкните раскрывающийся список и выберите вкладку «Все» .
- Из перечисленных проектов выберите идентификатор проекта базы данных , чтобы продолжить.
- Перейдите к SQL , выберите базу данных psc-psa-sql-db , разверните параметры SQL и выберите «Базы данных» . Вы должны увидеть только что созданную базу данных с именем Remotepscpsasqldb из виртуальной машины потребительского проекта , а также localvpcsqldb из виртуальной машины проекта БД**
.
**
11. Очистка
Завершите это в проекте Consumer.
- Выберите идентификатор потребительского проекта
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор потребительского проекта.
- Перейдите в каталог terraform-consumer-psc
cd terraform-consumer-psc
и выполните следующую командуterraform destroy
и введитеyes
все ресурсы, которые вы создали в своем потребительском проекте с помощью Terraform, будут удалены.
Завершите это в проекте базы данных.
- Выберите идентификатор проекта базы данных
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор проекта базы данных.
- Перейдите в каталог terraform-db-psc
cd terraform-db-psc
и выполните следующую командуterraform destroy
и введитеyes
большая часть ресурсов, которые вы создали в своем проекте базы данных с помощью Terraform, будут удалены. Сеть службы может не удаляться и выдавать ошибку. - Затем удалите следующие файлы из папки terraform-db-psc.
rm -r terraform.tfstate terraform.tfstate.backup
- Далее в консоли переходим в сети VPC.
- Выберите VPC сети базы данных , выберите ДОСТУП К ЧАСТНЫМ СЕРВИСАМ , в разделе « Выделенные диапазоны IP-адресов для служб » выберите psa-range-database-net и выберите опцию «Выпустить» .
- Затем выберите СЕТЬ ПИРИНГ VPC, выберите servicenetworking-googleapis-com и выберите параметр «Удалить» .
- Далее выберите «Удалить сеть VPC».
12. Поздравления
Поздравляем, вы успешно настроили экземпляр Cloud SQL с подключением PSA и PSC и создали конечную точку Private Service Connect в другом VPC.
Узнать больше
Вы можете узнать больше о Private Service Connect и Cloud SQL.
Другая связанная кодовая лаборатория: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform .