Connessione all'istanza AlloyDB privata da un'applicazione in esecuzione su GKE Autopilot

1. Panoramica

In questo lab, eseguirai il deployment di un microservizio a due livelli con un pod in esecuzione su GKE Autopilot e lo connetterai a un'istanza privata del database AlloyDB. L'applicazione Customer Service fa parte del sistema Cymbal Eats e fornisce funzionalità per gestire gli utenti registrati. L'applicazione Customer Service è un microservizio basato su Java che utilizza il framework Quarkus.

e8a5140b09521b7a.png

AlloyDB supporta la connettività di rete tramite indirizzi IP privati e interni configurati per l'accesso privato ai servizi.

L'accesso privato ai servizi viene implementato come connessione di peering VPC tra la tua rete VPC e la rete VPC di Google Cloud sottostante in cui si trovano le tue risorse AlloyDB (cluster e istanze). La connessione privata consente alle risorse nella rete VPC di comunicare con le risorse AlloyDB a cui accedono esclusivamente utilizzando indirizzi IP interni. Le risorse nella tua rete VPC non hanno bisogno dell'accesso a internet o di indirizzi IP esterni per raggiungere le risorse AlloyDB.

44662d7a086358de.png

Che cos'è GKE Autopilot?

GKE Autopilot è una modalità operativa in GKE in cui Google gestisce la configurazione del cluster, inclusi nodi, scalabilità, sicurezza e altre impostazioni preconfigurate. I cluster Autopilot sono ottimizzati per eseguire la maggior parte dei carichi di lavoro di produzione e per il provisioning delle risorse di calcolo in base ai manifest Kubernetes. La configurazione semplificata segue le best practice e i suggerimenti di GKE per la configurazione, la scalabilità e la sicurezza dei cluster e dei workload. Per un elenco delle impostazioni integrate, consulta la tabella di confronto tra Autopilot e Standard.

Che cos'è AlloyDB?

Un servizio di database completamente gestito compatibile con PostgreSQL per i carichi di lavoro di database aziendale più impegnativi. AlloyDB combina il meglio di Google con uno dei più diffusi motori di database open source (PostgreSQL) per prestazioni, scalabilità e disponibilità superiori.

Cosa imparerai a fare

In questo lab imparerai a:

  • Crea un'istanza privata del database AlloyDB
  • Esegui il deployment di un'applicazione sul cluster GKE Autopilot che si connette all'istanza AlloyDB

Prerequisiti

  • Questo lab presuppone la familiarità con gli ambienti della console Cloud e di Cloud Shell.
  • L'esperienza pregressa con GKE e AlloyDB è utile, ma non obbligatoria.

2. Configurazione e requisiti

Configurazione del progetto Cloud

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (in genere è identificato come PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Configurazione dell'ambiente

Attiva Cloud Shell facendo clic sull'icona a destra della barra di ricerca.

eb0157a992f16fa3.png

Clona il repository e vai alla directory, copia e incolla il comando riportato di seguito nel terminale e premi Invio:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Esegui il deployment delle dipendenze richieste eseguendo gke-lab-setup.sh.

Verranno create le seguenti risorse:

  • Cluster e istanza AlloyDB
  • Artifact Registry per archiviare le immagini container per Cloud Run Job e Customer Service
  • Connettore di accesso VPC per Cloud Run Job per comunicare con il database AlloyDB
  • Job Cloud Run per creare il database AlloyDB
  • Cluster GKE Autopilot
./gke-lab-setup.sh

Se ti viene richiesto di concedere l'autorizzazione, fai clic su "Autorizza" per continuare.

6356559df3eccdda.png

La configurazione richiederà circa 10 minuti. Esamina lo script di configurazione utilizzato per creare le dipendenze richieste.

gke-lab-setup.sh

Prima di eseguire i passaggi successivi, attendi il completamento dello script e visualizza l'output riportato di seguito.

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. Deployment dell'applicazione

Esamina il cluster AlloyDB

Esegui il comando seguente per esaminare l'istanza AlloyDB creata:

gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1

Esempio di output:

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

Esplora le funzionalità disponibili(Query Insight, Monitoring) nella console.

3b12b0fa1367fb42.png

Rivedi il cluster GKE Autopilot

Imposta le variabili di ambiente del progetto:

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)')

Nell'ambito della configurazione iniziale, il cluster è stato creato utilizzando il comando riportato di seguito (non devi eseguire questo comando):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Esegui il comando per visualizzare il cluster GKE Autopilot creato:

gcloud container clusters list

Esempio di output:

e8882c44fa0bb631.png

Esegui il comando per archiviare le credenziali per il cluster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Esegui il deployment di un'applicazione

Successivamente, eseguirai il deployment di un'applicazione di assistenza clienti.

L'applicazione Customer Service è un microservizio basato su Java che utilizza il framework Quarkus.

Vai alla cartella cymbal-eats/customer-service ed esegui i comandi per creare e caricare l'immagine container:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Apri Cloud Build nella console per esaminare i dettagli dell'ultima build.

49fd65309967ae47.png

Imposta la variabile di ambiente riportata di seguito utilizzando il valore dell'indirizzo IP privato di 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

Esegui i comandi riportati di seguito per creare l'oggetto Kubernetes Secrets per archiviare le credenziali del database che verranno utilizzate dall'applicazione Customer Service per connettersi al database:

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

Esegui il comando per sostituire CUSTOMER_SERVICE_IMAGE nel file deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Esegui il comando per eseguire il deployment dell'applicazione:

kubectl apply -f customer-service-deployment.yaml

L'applicazione impiegherà qualche istante per passare allo stato RUNNING.

Esegui il comando per creare l'IP esterno che verrà utilizzato nei passaggi del test:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Esegui il comando per verificare le risorse create:

kubectl get all

Esempio di output:

179a23bd33793924.png

4. Test dell'applicazione

Esegui i comandi riportati di seguito per salvare l'URL dell'assistenza clienti.

kubectl get svc

Imposta la variabile di ambiente riportata di seguito utilizzando il valore di IP esterno dell'output precedente.

CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Esegui i comandi riportati di seguito per creare un nuovo record cliente:

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"}'

Esegui il comando precedente più volte per generare messaggi di log che visualizzerai in Esplora log in un secondo momento.

Esaminare le registrazioni dei clienti

Esegui i comandi riportati di seguito per visualizzare il record del cliente creato.

curl $CUSTOMER_SERVICE_URL/customer | jq

Esempio di output:

[
  {
    "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"
  }
]

Esamina i workload e i servizi GKE

Apri Kubernetes Engine in Cloud Console e rivedi i servizi e i workload creati.

e1217216e003a839.png

d5c97fb5950c4db.png

Log delle applicazioni

Apri Esplora log e cerca i log che contengono il testo "Customer already exists" (Il cliente esiste già).

543c5ed97819f540.png

5. Complimenti!

Congratulazioni, hai completato il codelab.

Argomenti trattati:

  • Come creare un'istanza privata del database AlloyDB
  • Come eseguire il deployment di un'applicazione su un cluster GKE Autopilot che si connette all'istanza AlloyDB

Qual è il passaggio successivo?

Esplora altri codelab di Cymbal Eats:

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.