1. Omówienie
Istnieje kilka opcji nawiązywania połączenia z prywatną instancją Cloud SQL z innego projektu lub sieci VPC. Private Service Connect (PSC) umożliwia producentom usług udostępnianie ich za pomocą załączników usług. Użytkownicy mogą używać tych przyłączy usługi do tworzenia w swoim środowisku punktów końcowych PSC lub zaplecza PSC oraz do łączenia się z tymi usługami producenta za pomocą określonego prywatnego adresu IP.
Cloud SQL może korzystać z usługi PSC, aby umożliwić połączenie prywatne. W tym laboratorium możesz skonfigurować i przetestować tę opcję.
W tym module utworzysz prostą architekturę, która ilustruje korzystanie z dostępu do punktu końcowego PSC w CloudSQL.
Rysunek 1.
Do wykonania tego ćwiczenia potrzebne będą 2 projekty lub osobne środowiska VPC w tym samym projekcie.
Cele
Z tego modułu dowiesz się, jak wykonać te czynności:
- Utwórz instancję CloudSQL z załączoną usługą PSC.
- Tworzenie statycznego adresu IP
- Utwórz punkt końcowy PSC w sieci VPC konsumenta, aby połączyć się z bazą danych CloudSQL
- Sprawdź dostęp do bazy danych SQL z testowej maszyny wirtualnej w sieci klienta za pomocą adresu IP punktu końcowego PSC.
2. Konfiguracja i wymagania
Konfiguracja środowiska w samodzielnym tempie
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem trzeba podać identyfikator projektu (zwykle oznaczony jako
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego adresu e-mail, aby sprawdzić, czy jest on dostępny. Nie można go zmienić po wykonaniu tego kroku. Pozostanie on na stałe w ramach projektu. - Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten samouczek nie będzie kosztowne, a być może nawet bezpłatne. Aby wyłączyć zasoby i uniknąć obciążenia opłatami po zakończeniu samouczka, możesz usunąć utworzone zasoby lub usunąć projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu będziesz korzystać z Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po jego zakończeniu powinno wyświetlić się coś takiego:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie poprawia wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym CodeLab możesz wykonać w przeglądarce. Nie musisz niczego instalować.
3. Zadanie 1. Konfigurowanie środowiska projektu bazy danych za pomocą Terraform
W projekcie bazy danych utworzymy niestandardową sieć VPC z regułami zapory sieciowej i podsiecią. Otwórz konsolę Google Cloud i wybierz projekt, którego będziesz używać do bazy danych.
- Otwórz Cloud Shell, który znajduje się u góry konsoli po prawej stronie. Upewnij się, że w Cloud Shell widzisz identyfikator projektu bazy danych. Potwierdź wszystkie monity, aby zezwolić na dostęp.
- Utwórz folder o nazwie terraform-db i przenieś go do folderu
mkdir terraform-db && cd terraform-db
- Utwórz pliki main.tf, variable.tf i database.tf.
touch main.tf variable.tf database.tf
- Przełącz się na widok Edytor Cloud Shell. Wybierz Edytor i potwierdź wszystkie wymagane prompty, aby umożliwić wczytanie interfejsu.
- Po załadowaniu przejdź do Plik > Otwórz folder, przejdź do katalogu /home/nazwa_użytkownika/terraform-db i kliknij OK, aby otworzyć folder w edytorze.
- Wybierz plik variable.tf i dodaj te informacje. Zastąp tekst
your-database-project-id-here
cudzysłowami z identyfikatorem swojego projektu bazy danych. Zastąp tekstyour-consumer-project-id-here
swoim identyfikatorem projektu konsumenta w cudzysłowie.
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" }
- Następnie otwórz plik main.tf. Dodamy kod terraform, który wykona różne działania opisane poniżej.
Włączanie interfejsów API |
|
Utwórz VPC |
|
Dodaj reguły zapory sieciowej |
|
- Skopiuj i wklej ten kod do głównego pliku .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"] }
- Wróć do terminala Cloud Shell i upewnij się, że jesteś w katalogu terraform-db (
cd terraform-db
). Następnie uruchom te polecenia.
terraform init
Inicjuje katalog roboczy. Na tym etapie pobierani są dostawcy wymagani w danej konfiguracji.
terraform plan
Tworzy plan wykonania, który pokazuje, jakie działania Terraform wykona, aby wdrożyć Twoją infrastrukturę.
- Aby utworzyć zasoby, uruchom polecenie
terraform apply
i wpiszyes
, aby je uruchomić.
4. Zadanie 2. Tworzenie instancji CloudSQL z dołączonym PSC (Terraform)
Utwórz instancję CloudSQL za pomocą Terraform, korzystając z opcji PSC, aby umożliwić połączenie. Przeprowadź tę konfigurację w projekcie bazy danych.
- Przełącz się na widok Edytor Cloud Shell. Upewnij się, że jesteś w folderze
terraform-db
. Wybierz plikdatabase.tf
i dodaj te informacje.
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
}
- Wróć do terminala Cloud Shell i sprawdź,czy jesteś w katalogu terraform-db. Aby utworzyć zasoby, uruchom polecenie
terraform apply
i wpiszyes
, aby je uruchomić. Utworzenie instancji CloudSQL z dołączonym PSC może potrwać ponad 5 minut.
Weryfikowanie bazy danych
- Po zakończeniu przejdź w konsoli do sekcji SQL i wybierz nowo utworzoną instancję bazy danych psc-sql-db.
- Po lewej stronie rozwiń panel opcji SQL i wybierz Połączenia.
- Na karcie Podsumowanie znajdziesz informacje o połączeniu.
- Skopiuj adres załącznika usługi i zapisz go w swoim systemie.
- Potrzebujesz tego, aby wykonać krok 8 zadania 3.
- Po lewej stronie rozwiń panel opcji SQL i wybierz Użytkownicy.
- Powinien pojawić się użytkownik o nazwie testsql z hasłem cloudsql24. (Będzie on używany do późniejszego uzyskiwania dostępu do bazy danych)
5. Zadanie 3. Konfigurowanie środowiska dla projektu konsumenta (Terraform)
W projekcie klienta utworzymy niestandardowe środowisko VPC z regułami zapory sieciowej i podsiecią. Otwórz konsolę Google Cloud i wybierz projekt, którego będziesz używać.
- U góry konsoli po prawej stronie obok ikony Google Cloud kliknij menu i wybierz kartę all (Wszystkie).
- Aby kontynuować, wybierz z listy identyfikator projektu dla konsumentów.
- Otwórz Cloud Shell, który znajduje się u góry konsoli po prawej stronie. Upewnij się, że w Cloud Shell widać identyfikator projektu konsumenta. Potwierdź wyświetlone prośby o dostęp.
- Utwórz folder o nazwie terraform-consumer i przenieś go do folderu
mkdir terraform-consumer && cd terraform-consumer
- Utwórz pliki main.tf, variable.tf i psc.tf.
touch main.tf variable.tf psc.tf
- Przełącz się na widok edytora Cloud Shell dla identyfikatora projektu klienta. Wybierz Edytor i pozwól na wyświetlanie wszystkich wymaganych komunikatów, aby umożliwić wczytanie interfejsu.
- Po załadowaniu przejdź do Plik > Otwórz folder, przejdź do folderu /home/nazwa_użytkownika/terraform-consumer i kliknij OK, aby otworzyć folder w edytorze.
- Wybierz plik variable.tf i dodaj te informacje. Zastąp tekst
your-consumer-project-id-here
cudzy tekst rzeczywistym identyfikatorem projektu w cudzysłowie. Zastąp tekstyour-psc-attachment-id-here
adresem załącznika psc w cudzysłowie. To identyfikator skopiowany w kroku 2, sekcja 2–5
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" }
- Następnie otwórz plik main.tf. Dodamy kod terraform, który wykona różne działania opisane poniżej.
Włączanie interfejsów API |
|
Utwórz VPC |
|
Tworzenie bramy NAT |
|
Dodaj reguły zapory sieciowej |
|
- Skopiuj i wklej ten kod do głównego pliku .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"] }
- Wróć do terminalu Cloud Shell i upewnij się, że znajdujesz się w katalogu terraform-consumer
cd terraform-consumer
w projekcie konsumenta. Następnie uruchom te polecenia.
terraform init
Inicjuje katalog roboczy. Na tym etapie pobierani są dostawcy wymagani w danej konfiguracji.
terraform plan
Tworzy plan wykonania, który pokazuje, jakie działania Terraform wykona, aby wdrożyć Twoją infrastrukturę.
- Aby utworzyć zasoby, uruchom polecenie
terraform apply
i wpiszyes
, aby je uruchomić.
6. Zadanie 4. Tworzenie w projekcie konsumenta połączenia punktu końcowego PSC z bazą danych SQL i testowanie maszyny wirtualnej (Terraform)
Przeprowadź tę konfigurację w projekcie konsumenta.
- Wróć do edytora Cloud Shell, otwórz katalog terraform-consumer i wybierz plik
psc.tf
. Dodaj do tego pliku ten kod Terraform. Spowoduje to utworzenie stałego wewnętrznego adresu IP, punktu końcowego PSC i testowej maszyny wirtualnej z zainstalowaną bazą danych MariaDB.
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 }
- Wróć do terminalu Cloud Shell i upewnij się, że znajdujesz się w katalogu terraform-consumer
cd terraform-consumer
w projekcie konsumenta. Następnie uruchom te polecenia.
terraform plan
Tworzy plan wykonania, który pokazuje, jakie działania Terraform wykona, aby wdrożyć Twoją infrastrukturę.
- Aby utworzyć zasoby, uruchom polecenie
terraform apply
i wpiszyes
, aby je uruchomić. - Ponieważ maszyna wirtualna i punkt końcowy znajdują się w różnych regionach, musimy włączyć dostęp globalny w punkcie końcowym PSC. Robimy to w konsoli.
- W konsoli projektu konsumenta otwórz Private Service Connect. Na karcie Połączony punkt końcowy w sekcji Punkt końcowy wybierz psc-sql-endpoint.
- Teraz wybierz EDYTUJ,a następnie kliknij pole wyboru obok opcji Włącz dostęp globalny i Zapisz.
- Przejdź do następnego kroku, aby sprawdzić połączenie
7. Zadanie 5. Sprawdzanie łączności punktu końcowego z maszyny wirtualnej za pomocą adresu IP PSC
Wykonaj to w projekcie konsumenta
- Otwórz instancję maszyny wirtualnej. Wybierz sql-test-vm.
- Aby połączyć się z maszyną wirtualną, wybierz opcję SSH.
- Połącz się z bazą danych za pomocą punktu końcowego, korzystając z tych opcji:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Po nawiązaniu połączenia utwórz bazę danych o nazwie psc-sql-db.
CREATE DATABASE remotesqldb;
- Po zakończeniu wpisz exit, aby zakończyć połączenie.
8. Zadanie 6. Weryfikowanie wpisu w bazie danych
Przeprowadź tę weryfikację w projekcie bazy danych.
- U góry konsoli po prawej stronie obok ikony Google Cloud kliknij menu i wybierz kartę all (Wszystkie).
- Aby kontynuować, wybierz z listy identyfikator projektu bazy danych.
- Otwórz SQL, wybierz bazę danych psc-sql-db, rozwiń opcje SQL i wybierz Bazy danych. Na maszynie wirtualnej projektu dla konsumenta powinna być widoczna właśnie utworzona baza danych o nazwie remotesqldb.**
.
**
9. Czyszczenie
Wykonaj to w projekcie bazy danych
- Wybierz identyfikator projektu bazy danych
- Otwórz Cloud Shell i sprawdź, czy widzisz identyfikator projektu bazy danych.
- Otwórz katalog terraform-db
cd terraform-db
i uruchom to polecenie:terraform destroy
, a następnie wpiszyes
. W ten sposób wszystkie zasoby utworzone w projekcie bazy danych za pomocą Terraform zostaną usunięte.
Wykonaj to w projekcie dotyczącym konsumentów
- Wybierz identyfikator projektu konsumenta
- Otwórz Cloud Shell i sprawdź, czy widzisz identyfikator projektu konsumenta.
- Przejdź do katalogu terraform-consumer
cd terraform-consumer
i uruchom to polecenieterraform destroy
, a następnie wpiszyes
. Wszystkie zasoby utworzone w projekcie bazy danych za pomocą Terraform zostaną usunięte.
10. Gratulacje
Gratulacje! Udało Ci się skonfigurować instancję Cloud SQL z dołączonym PSC i utworzyć punkt końcowy Private Service Connect w innej sieci VPC. Udało Ci się połączyć z bazą danych z poziomu zdalnej maszyny wirtualnej za pomocą punktu końcowego PSC.
Więcej informacji
Więcej informacji o Private Service Connect i Cloud SQL