1. Przegląd
W tym ćwiczeniu wdrożysz dwuwarstwowy mikroserwis z podem działającym w GKE Autopilot i połączysz go z prywatną instancją bazy danych AlloyDB. Aplikacja Customer Service jest częścią systemu Cymbal Eats i umożliwia zarządzanie zarejestrowanymi użytkownikami. Aplikacja Customer Service to mikroserwis oparty na Javie, który korzysta z frameworka Quarkus.

AlloyDB obsługuje połączenia sieciowe za pomocą prywatnych, wewnętrznych adresów IP skonfigurowanych na potrzeby prywatnego dostępu do usług.
Prywatny dostęp do usług jest implementowany jako połączenie równorzędne VPC między Twoją siecią VPC a podstawową siecią VPC Google Cloud, w której znajdują się Twoje zasoby AlloyDB (klastry i instancje). Prywatne połączenie umożliwia zasobom w Twojej sieci VPC komunikowanie się z zasobami AlloyDB, do których mają dostęp, wyłącznie za pomocą wewnętrznych adresów IP. Zasoby w Twojej sieci VPC nie potrzebują dostępu do internetu ani zewnętrznych adresów IP, aby uzyskać dostęp do zasobów AlloyDB.

Czym jest Autopilot w GKE?
Autopilot w GKE to tryb działania, w którym Google zarządza konfiguracją klastra, w tym węzłami, skalowaniem, zabezpieczeniami i innymi wstępnie skonfigurowanymi ustawieniami. Klastry z Autopilotem są zoptymalizowane pod kątem uruchamiania większości zbiorów zadań produkcyjnych i udostępniania zasobów obliczeniowych na podstawie Twoich plików manifestu Kubernetes. Uproszczona konfiguracja jest zgodna ze sprawdzonymi metodami i rekomendacjami GKE dotyczącymi konfiguracji klastra i zbioru zadań, skalowalności oraz bezpieczeństwa. Listę wbudowanych ustawień znajdziesz w tabeli porównawczej Autopilota i trybu standardowego.
Czym jest AlloyDB?
W pełni zarządzana usługa bazy danych zgodnej z PostgreSQL dla najbardziej wymagających zadań firmowych. AlloyDB to połączenie najlepszych rozwiązań Google z jednym z najpopularniejszych mechanizmów baz danych open source – PostgreSQL, które zapewnia wysoką wydajność, skalowalność i dostępność.
Czego się nauczysz
Z tego ćwiczenia dowiesz się, jak:
- utworzyć prywatną instancję bazy danych AlloyDB;
- wdrożyć aplikację w klastrze GKE Autopilot, która łączy się z instancją AlloyDB.
Wymagania wstępne
- W tym ćwiczeniu zakładamy, że znasz środowiska konsoli Cloud i Cloud Shell.
- Wcześniejsze doświadczenie z GKE i AlloyDB jest przydatne, ale nie jest wymagane.
2. Konfiguracja i wymagania
Konfiguracja projektu Cloud
- 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 dla uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz go zmienić w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować użyć własnego identyfikatora i sprawdzić, czy jest dostępny. Po wykonaniu tego kroku nie można go zmienić i pozostanie on taki przez cały czas trwania projektu. - Dla Twojej informacji istnieje trzecia wartość – numer projektu , której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Wykonanie tego ćwiczenia nie powinno kosztować dużo, a nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Konfiguracja środowiska
Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

Sklonuj repozytorium i przejdź do katalogu. Skopiuj i wklej poniższe polecenie do terminala, a następnie naciśnij Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
Wdróż wymagane zależności, uruchamiając gke-lab-setup.sh
Utworzone zostaną te zasoby:
- Klaster i instancja AlloyDB
- Artifact Registry do przechowywania obrazów kontenerów na potrzeby zadania Cloud Run i usługi Customer Service
- Oprogramowanie sprzęgające dostępu do VPC na potrzeby zadania Cloud Run, aby komunikować się z bazą danych AlloyDB
- Zadanie Cloud Run do utworzenia bazy danych AlloyDB
- Klaster GKE Autopilot
./gke-lab-setup.sh
Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

Konfiguracja zajmie około 10 minut. Sprawdź skrypt konfiguracji, który służy do tworzenia wymaganych zależności.
gke-lab-setup.sh
Zanim przejdziesz do następnych kroków, poczekaj, aż skrypt się zakończy i zobaczysz poniższe dane wyjściowe.
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. Wdrażanie aplikacji
Sprawdzanie klastra AlloyDB
Uruchom to polecenie, aby sprawdzić utworzoną instancję AlloyDB:
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
Przykładowe dane wyjściowe:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
Poznaj dostępne funkcje(Query Insight, Monitoring) w konsoli.

Sprawdzanie klastra GKE Autopilot
Ustaw zmienne środowiskowe projektu:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
W ramach wstępnej konfiguracji klaster został utworzony za pomocą poniższego polecenia (nie musisz go uruchamiać):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
Uruchom to polecenie, aby wyświetlić utworzony klaster GKE Autopilot:
gcloud container clusters list
Przykładowe dane wyjściowe:

Uruchom to polecenie, aby zapisać dane logowania do klastra:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
Wdrażanie aplikacji
Następnie wdrożysz aplikację Customer Service.
Aplikacja Customer Service to mikroserwis oparty na Javie, który korzysta z frameworka Quarkus.
Otwórz folder cymbal-eats/customer-service i uruchom polecenia, aby utworzyć i przesłać obraz kontenera:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
Otwórz Cloud Build w konsoli, aby sprawdzić szczegóły najnowszej kompilacji.

Ustaw zmienną środowiskową poniżej, używając wartości prywatnego adresu IP AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
Uruchom poniższe polecenia, aby utworzyć obiekt tajnych danych Kubernetes do przechowywania danych logowania do bazy danych, które będą używane przez aplikację Customer Service do łączenia się z bazą danych:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
Uruchom to polecenie, aby zastąpić CUSTOMER_SERVICE_IMAGE w pliku deployment.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
Uruchom to polecenie, aby wdrożyć aplikację:
kubectl apply -f customer-service-deployment.yaml
Przejście aplikacji do stanu RUNNING (Działa) zajmie kilka chwil.
Uruchom to polecenie, aby utworzyć zewnętrzny adres IP, który będzie używany w krokach testowych:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
Uruchom to polecenie, aby sprawdzić utworzone zasoby:
kubectl get all
Przykładowe dane wyjściowe:

4. Testowanie aplikacji
Uruchom poniższe polecenia, aby zapisać adres URL usługi Customer Service.
kubectl get svc
Ustaw zmienną środowiskową poniżej, używając wartości zewnętrznego adresu IP z poprzednich danych wyjściowych.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Uruchom poniższe polecenia, aby utworzyć nowy rekord klienta:
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
Uruchom powyższe polecenie kilka razy, aby wygenerować komunikaty dziennika, które później wyświetlisz w eksploratorze logów.
Sprawdzanie rekordów klientów
Uruchom poniższe polecenia, aby wyświetlić utworzony rekord klienta.
curl $CUSTOMER_SERVICE_URL/customer | jq
Przykładowe dane wyjściowe:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
Sprawdzanie zbiorów zadań i usług GKE
Otwórz Kubernetes Engine w konsoli Cloud i sprawdź utworzone zbiory zadań i usługi.


Logi aplikacji
Otwórz eksplorator logów i wyszukaj logi zawierające tekst „Customer already exists” (Klient już istnieje).

5. Gratulacje!
Gratulacje! Ćwiczenie zostało ukończone.
Omówione zagadnienia:
- Tworzenie prywatnej instancji bazy danych AlloyDB
- Wdrażanie aplikacji w klastrze GKE Autopilot, która łączy się z instancją AlloyDB
Co dalej?
Poznaj inne ćwiczenia Cymbal Eats:
- Aktywowanie przepływów pracy w chmurze za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Łączenie z prywatną instancją Cloud SQL z poziomu Cloud Run
- Łączenie z w pełni zarządzanymi bazami danych z Cloud Run
- Zabezpieczanie aplikacji bezserwerowej za pomocą funkcji Identity Aware Proxy (IAP)
- Aktywowanie zadań Cloud Run za pomocą usługi Cloud Scheduler
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego do Cloud Run
Zwalnianie miejsca
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.
Usuwanie projektu
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.