Se connecter à une instance AlloyDB privée depuis une application exécutée sur GKE Autopilot

1. Présentation

Dans cet atelier, vous allez déployer un microservice à deux niveaux avec un pod s'exécutant sur GKE Autopilot et le connecter à une instance privée de la base de données AlloyDB. L'application de service client fait partie du système Cymbal Eats et fournit une fonctionnalité permettant de gérer les utilisateurs inscrits. L'application de service client est un microservice basé sur Java qui utilise le framework Quarkus.

e8a5140b09521b7a.png

AlloyDB prend en charge la connectivité réseau via des adresses IP internes privées configurées pour l'accès aux services privés.

L'accès aux services privés est implémenté sous la forme d'une connexion d'appairage de VPC entre votre réseau VPC et le réseau VPC Google Cloud sous-jacent où résident vos ressources AlloyDB (clusters et instances). La connexion privée permet aux ressources de votre réseau VPC de communiquer avec les ressources AlloyDB auxquelles elles accèdent exclusivement à l'aide d'adresses IP internes. Les ressources de votre réseau VPC n'ont pas besoin d'un accès Internet ni d'adresses IP externes pour accéder aux ressources AlloyDB.

44662d7a086358de.png

Qu'est-ce que GKE Autopilot ?

GKE Autopilot est un mode de fonctionnement dans GKE dans lequel Google gère la configuration de votre cluster, y compris les nœuds, le scaling, la sécurité et d'autres paramètres préconfigurés. Les clusters Autopilot sont optimisés pour exécuter la plupart des charges de travail de production et provisionner des ressources de calcul en fonction de vos fichiers manifestes Kubernetes. La configuration simplifiée respecte les bonnes pratiques et recommandations de GKE concernant la configuration, l'évolutivité et la sécurité des clusters et des charges de travail. Pour obtenir la liste des paramètres intégrés, consultez le tableau comparatif Autopilot et Standard.

Qu'est-ce qu'AlloyDB ?

Service de base de données entièrement géré compatible avec PostgreSQL pour vos charges de travail de bases de données d'entreprise les plus exigeantes. AlloyDB associe le meilleur de Google à l'un des moteurs de base de données Open Source les plus populaires, PostgreSQL, pour des performances, une évolutivité et une disponibilité optimales.

Objectifs de l'atelier

Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :

  • Créer une instance privée de la base de données AlloyDB
  • Déployer une application sur le cluster GKE Autopilot qui se connecte à l'instance AlloyDB

Prérequis

  • Pour cet atelier, nous partons du principe que vous connaissez la console Cloud et les environnements Cloud Shell.
  • Une expérience préalable de GKE et d'AlloyDB est utile, mais pas obligatoire.

2. Préparation

Configuration du projet Cloud

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet.
  • Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.

Configuration de l'environnement

Activez Cloud Shell en cliquant sur l'icône située à droite de la barre de recherche.

eb0157a992f16fa3.png

Clonez le dépôt, accédez au répertoire, copiez et collez la commande ci-dessous dans le terminal, puis appuyez sur Entrée:

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

Déployer les dépendances requises en exécutant la commande gke-lab-setup.sh

Les ressources suivantes seront créées:

  • Cluster et instance AlloyDB
  • Artifact Registry pour stocker des images de conteneurs pour le job Cloud Run et le service client
  • Connecteur d'accès VPC pour la tâche Cloud Run afin de communiquer avec la base de données AlloyDB
  • Job Cloud Run pour créer la base de données AlloyDB
  • Cluster GKE Autopilot
./gke-lab-setup.sh

Si vous êtes invité à donner votre autorisation, cliquez sur "Autoriser". pour continuer.

6356559df3eccdda.png

La configuration prendra environ 10 minutes. Examinez le script de configuration utilisé pour créer les dépendances requises.

gke-lab-setup.sh

Attendez que le script soit terminé et que le résultat ci-dessous s'affiche avant de passer aux étapes suivantes.

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. Déploiement d'applications

Examiner le cluster AlloyDB

Exécutez la commande ci-dessous pour examiner l'instance AlloyDB créée:

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

Exemple de résultat :

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

Explorez les fonctionnalités disponibles(Insights sur les requêtes, surveillance) dans la console.

3b12b0fa1367fb42.png

Examiner le cluster GKE Autopilot

Définissez les variables d'environnement du projet:

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

Lors de la configuration initiale, le cluster a été créé à l'aide de la commande ci-dessous (vous n'avez pas besoin d'exécuter cette commande):

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

Exécutez la commande suivante pour afficher le cluster GKE Autopilot créé:

gcloud container clusters list

Exemple de résultat :

e8882c44fa0bb631.png

Exécutez la commande suivante pour stocker les identifiants du cluster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

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

Déployer une application

Vous allez maintenant déployer une application de service client.

L'application de service client est un microservice Java qui utilise le framework Quarkus.

Accédez au dossier cymbal-eats/customer-service, puis exécutez les commandes permettant de créer et d'importer l'image de conteneur:

./mvnw clean package -DskipTests

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

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Ouvrez Cloud Build dans la console pour consulter les détails du dernier build.

49fd65309967ae47.png

Définissez la variable d'environnement ci-dessous sur la valeur de l'adresse IP privée 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

Exécutez les commandes ci-dessous pour créer un objet de secrets Kubernetes afin de stocker les identifiants de la base de données que l'application de service client utilisera pour se connecter à la base de données:

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

Exécutez la commande suivante pour remplacer CUSTOMER_SERVICE_IMAGE dans le fichier deployment.yaml:

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

Exécutez la commande suivante pour déployer l'application:

kubectl apply -f customer-service-deployment.yaml

Le passage de l'application à l'état RUNNING (En cours d'exécution) prend quelques instants.

Exécutez la commande suivante pour créer une adresse IP externe qui sera utilisée lors des étapes de test:

SERVICE_NAME=customer-service

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

Exécutez la commande suivante pour vérifier les ressources créées:

kubectl get all

Exemple de résultat :

179a23bd33793924.png

4. Tester l'application

Exécutez les commandes ci-dessous pour enregistrer l'URL du service client.

kubectl get svc

Définissez la variable d'environnement ci-dessous en utilisant la valeur "External IP" (Adresse IP externe) indiquée dans le résultat précédent.

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

Exécutez les commandes ci-dessous pour créer un enregistrement client:

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

Exécutez la commande ci-dessus plusieurs fois pour générer des messages de journal que vous pourrez consulter ultérieurement dans l'explorateur de journaux.

Consulter les dossiers client

Exécutez les commandes ci-dessous pour afficher l'enregistrement client créé.

curl $CUSTOMER_SERVICE_URL/customer | jq

Exemple de résultat :

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

Examiner les charges de travail et les services GKE

Ouvrez Kubernetes Engine dans la console Cloud et examinez les charges de travail et services créés.

e1217216e003a839.png

d5c97fb5950c4db.png

Journaux d'application

Ouvrez l'explorateur de journaux et recherchez les journaux contenant "Le client existe déjà". texte.

543c5ed97819f540.png

5. Félicitations !

Félicitations, vous avez terminé cet atelier de programmation.

Points abordés

  • Créer une instance privée de la base de données AlloyDB
  • Déployer une application sur un cluster GKE Autopilot qui se connecte à une instance AlloyDB

Étapes suivantes :

Découvrez d'autres ateliers de programmation Cymbal Eats:

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.