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 Assistenza clienti fa parte del sistema Cymbal Eats e fornisce funzionalità per gestire gli utenti registrati. L'applicazione Assistenza clienti è un microservizio basato su Java che utilizza il framework Quarkus.

e8a5140b09521b7a.png

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

L'accesso privato ai servizi è implementato come connessione in peering VPC tra la tua rete VPC e la rete VPC Google Cloud sottostante in cui si trovano le risorse AlloyDB (cluster e istanze). La connessione privata consente alle risorse nella tua rete VPC di comunicare con le risorse AlloyDB a cui accedono in modo esclusivo mediante 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 di GKE in cui Google gestisce la configurazione del tuo 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 ed eseguire il provisioning delle risorse di calcolo in base ai tuoi manifest Kubernetes. La configurazione semplificata segue le best practice e i suggerimenti di GKE per la configurazione, la scalabilità e la sicurezza di cluster e carichi di lavoro. 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 offrire 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

  • In questo lab si presuppone che tu abbia familiarità con gli ambienti della console Cloud e Cloud Shell.
  • L'esperienza precedente 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei al 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, vai alla directory, copia e incolla il comando seguente nel terminale e premi Invio:

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

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

Verranno create le seguenti risorse:

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

Se ti viene richiesta 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 obbligatorie.

gke-lab-setup.sh

Attendi il completamento dello script e la visualizzazione dell'output in basso prima di eseguire i passaggi successivi.

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

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

Parte della configurazione iniziale, il cluster è stato creato utilizzando il comando seguente (non è necessario 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

Eseguire il deployment di un'applicazione

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

L'applicazione Assistenza clienti è 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 della build più recente.

49fd65309967ae47.png

Imposta la variabile di ambiente 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 un oggetto secret di Kubernetes in cui archiviare le credenziali del database che verranno utilizzate dall'applicazione dell'assistenza clienti 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

Il passaggio allo stato IN ESECUZIONE dell'applicazione richiederà qualche istante.

Esegui il comando per creare un IP esterno che verrà utilizzato nei passaggi di 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. Applicazione di test

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

kubectl get svc

Imposta la variabile di ambiente 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 di clienti:

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 riportato sopra più volte per generare i messaggi di log che visualizzerai in Esplora log in seguito.

Esamina i registri dei clienti

Esegui i comandi riportati di seguito per visualizzare il record 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"
  }
]

Rivedi i carichi di lavoro e i servizi GKE

Apri Kubernetes Engine nella console Cloud ed esamina i carichi di lavoro e i servizi creati.

e1217216e003a839.png

d5c97fb5950c4db.png

Log delle applicazioni

Apri Esplora log e cerca i log contenenti "Customer già esistente" testo.

543c5ed97819f540.png

5. Complimenti!

Complimenti, hai completato il codelab.

Argomenti trattati:

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

Passaggi successivi

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 è quello di eliminare il progetto che hai creato per il tutorial.