Verbindung zu einer privaten AlloyDB-Instanz über eine in GKE Autopilot ausgeführte Anwendung herstellen

1. Übersicht

In diesem Lab stellen Sie einen zweistufigen Mikrodienst mit einem Pod bereit, der in GKE Autopilot ausgeführt wird, und stellen eine Verbindung zu einer privaten Instanz der AlloyDB-Datenbank her. Die Kundenserviceanwendung ist Teil des Cymbal Eats-Systems und bietet Funktionen zur Verwaltung registrierter Nutzer. Die Kundenserviceanwendung ist ein Java-basierter Mikrodienst, der das Quarkus-Framework verwendet.

e8a5140b09521b7a.png

AlloyDB unterstützt Netzwerkverbindungen über private, interne IP-Adressen, die für den Zugriff auf private Dienste konfiguriert sind.

Der Zugriff auf private Dienste wird als VPC-Peering-Verbindung zwischen Ihrem VPC-Netzwerk und dem zugrunde liegenden Google Cloud-VPC-Netzwerk implementiert, in dem sich Ihre AlloyDB-Ressourcen (Cluster und Instanzen) befinden. Über die private Verbindung können Ressourcen in Ihrem VPC-Netzwerk ausschließlich über interne IP-Adressen mit den AlloyDB-Ressourcen kommunizieren, auf die sie zugreifen. Die Ressourcen in Ihrem VPC-Netzwerk benötigen keinen Internetzugriff oder externe IP-Adressen, um AlloyDB-Ressourcen zu erreichen.

44662d7a086358de.png

Was ist GKE Autopilot?

GKE Autopilot ist ein Betriebsmodus in GKE, in dem Google Ihre Clusterkonfiguration verwaltet, einschließlich Knoten, Skalierung, Sicherheit und anderer vorkonfigurierter Einstellungen. Autopilot-Cluster sind für die Ausführung der meisten Produktionsarbeitslasten optimiert und stellen Rechenressourcen basierend auf Ihren Kubernetes-Manifesten bereit. Die optimierte Konfiguration folgt den Best Practices und Empfehlungen der GKE für die Einrichtung von Clustern und Arbeitslasten, Skalierbarkeit und Sicherheit. Eine Liste der integrierten Einstellungen finden Sie in der Vergleichstabelle für Autopilot und Standard.

Was ist AlloyDB?

Ein vollständig verwalteter PostgreSQL-kompatibler Datenbankdienst für die anspruchsvollsten Datenbankarbeitslasten Ihres Unternehmens. AlloyDB kombiniert das Beste von Google mit einer der beliebtesten Open-Source-Datenbank-Engines, PostgreSQL. Das sorgt für hervorragende Leistung, Skalierbarkeit und Verfügbarkeit.

Lerninhalte

In diesem Lab lernen Sie Folgendes:

  • Private Instanz einer AlloyDB-Datenbank erstellen
  • Anwendung in einem GKE Autopilot-Cluster bereitstellen, die eine Verbindung zur AlloyDB-Instanz herstellt

Vorbereitung

  • Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Cloud Shell-Umgebungen vertraut sind.
  • Vorkenntnisse in GKE und AlloyDB sind hilfreich, aber nicht erforderlich.

2. Einrichtung und Anforderungen

Cloud-Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Umgebung einrichten

Aktivieren Sie Cloud Shell, indem Sie rechts neben der Suchleiste auf das Symbol klicken.

eb0157a992f16fa3.png

Klonen Sie das Repository und rufen Sie das Verzeichnis auf. Kopieren Sie den folgenden Befehl und fügen Sie ihn in das Terminal ein. Drücken Sie dann die Eingabetaste:

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

Stellen Sie die erforderlichen Abhängigkeiten bereit, indem Sie gke-lab-setup.sh ausführen.

Die folgenden Ressourcen werden erstellt:

  • AlloyDB-Cluster und ‑Instanz
  • Artifact Registry zum Speichern von Container-Images für Cloud Run-Jobs und den Kundenservice
  • VPC-Zugriffsconnector für Cloud Run-Job zur Kommunikation mit AlloyDB-Datenbank
  • Cloud Run-Job zum Erstellen einer AlloyDB-Datenbank
  • GKE Autopilot-Cluster
./gke-lab-setup.sh

Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf „Autorisieren“, um fortzufahren.

6356559df3eccdda.png

Die Einrichtung dauert etwa 10 Minuten. Sehen Sie sich das Einrichtungs-Script an, das zum Erstellen der erforderlichen Abhängigkeiten verwendet wird.

gke-lab-setup.sh

Warten Sie, bis das Skript fertig ist und die Ausgabe unten angezeigt wird, bevor Sie mit den nächsten Schritten fortfahren.

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. Bereitstellung von Anwendungen

AlloyDB-Cluster prüfen

Führen Sie den folgenden Befehl aus, um die erstellte AlloyDB-Instanz zu prüfen:

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

Beispielausgabe:

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

Verfügbare Funktionen(Query Insight, Monitoring) in der Console ansehen

3b12b0fa1367fb42.png

GKE Autopilot-Cluster ansehen

Projektumgebungsvariablen festlegen:

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

Im Rahmen der Ersteinrichtung wurde der Cluster mit dem folgenden Befehl erstellt (Sie müssen diesen Befehl nicht ausführen):

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

Führen Sie den Befehl aus, um den erstellten GKE Autopilot-Cluster aufzurufen:

gcloud container clusters list

Beispielausgabe:

e8882c44fa0bb631.png

Führen Sie den Befehl aus, um Anmeldedaten für den Cluster zu speichern:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Anwendung bereitstellen

Als Nächstes stellen Sie eine Kundenserviceanwendung bereit.

Die Kundenserviceanwendung ist ein Java-basierter Mikrodienst, der das Quarkus-Framework verwendet.

Wechseln Sie zum Ordner cymbal-eats/customer-service und führen Sie die Befehle zum Erstellen und Hochladen des Container-Images aus:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Öffnen Sie Cloud Build in der Console, um Details zum letzten Build aufzurufen.

49fd65309967ae47.png

Legen Sie die Umgebungsvariable unten mit dem Wert der privaten IP-Adresse von AlloyDB fest:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Führen Sie die folgenden Befehle aus, um ein Kubernetes-Secret-Objekt zum Speichern von Datenbankanmeldedaten zu erstellen, die von der Kundenserviceanwendung zum Herstellen einer Verbindung zur Datenbank verwendet werden:

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

Führen Sie den Befehl aus, um CUSTOMER_SERVICE_IMAGE in der Datei „deployment.yaml“ zu ersetzen:

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

Führen Sie den Befehl aus, um die Anwendung bereitzustellen:

kubectl apply -f customer-service-deployment.yaml

Es dauert einige Zeit, bis die Anwendung den Status „Wird ausgeführt“ erreicht.

Führen Sie den Befehl aus, um die externe IP-Adresse zu erstellen, die in den Testschritten verwendet wird:

SERVICE_NAME=customer-service

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

Führen Sie den Befehl aus, um die erstellten Ressourcen zu prüfen:

kubectl get all

Beispielausgabe:

179a23bd33793924.png

4. App testen

Führen Sie die folgenden Befehle aus, um die Kundenservice-URL zu speichern.

kubectl get svc

Legen Sie die Umgebungsvariable unten mit dem Wert von „External IP“ aus der vorherigen Ausgabe fest.

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

Führen Sie die folgenden Befehle aus, um einen neuen Kundendatensatz zu erstellen:

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

Führen Sie den obigen Befehl mehrmals aus, um Log-Nachrichten zu generieren, die Sie später im Log-Explorer aufrufen können.

Kundendatensätze überprüfen

Führen Sie die folgenden Befehle aus, um den erstellten Kundendatensatz aufzurufen.

curl $CUSTOMER_SERVICE_URL/customer | jq

Beispielausgabe:

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

GKE-Arbeitslasten und -Dienste ansehen

Öffnen Sie Kubernetes Engine in der Cloud Console und prüfen Sie die erstellten Arbeitslasten und Dienste.

e1217216e003a839.png

d5c97fb5950c4db.png

Anwendungslogs

Öffnen Sie den Log-Explorer und suchen Sie nach Logs, die den Text „Customer already exists“ (Kunde ist bereits vorhanden) enthalten.

543c5ed97819f540.png

5. Glückwunsch!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen:

  • Private Instanz einer AlloyDB-Datenbank erstellen
  • Anwendung in einem GKE Autopilot-Cluster bereitstellen, die eine Verbindung zu einer AlloyDB-Instanz herstellt

Nächste Schritte:

Weitere Codelabs zu Cymbal Eats:

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.