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 exécuté sur GKE Autopilot et le connecter à une instance privée de base de données AlloyDB. L'application Customer Service fait partie du système Cymbal Eats et permet de gérer les utilisateurs enregistrés. L'application de service client est un microservice basé sur Java qui utilise le framework Quarkus.

e8a5140b09521b7a.png

AlloyDB est compatible avec la connectivité réseau via des adresses IP privées et internes 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 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'accéder à Internet ni de disposer d'adresses IP externes pour atteindre les ressources AlloyDB.

44662d7a086358de.png

Qu'est-ce que GKE Autopilot ?

GKE Autopilot est un mode de fonctionnement de GKE dans lequel Google gère la configuration de votre cluster, y compris vos 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, reportez-vous au tableau de comparaison Standard et Autopilot.

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 utilisés, 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 base de données AlloyDB
  • Déployer une application sur un cluster GKE Autopilot qui se connecte à une instance AlloyDB

Prérequis

  • Dans cet atelier, nous considérons que vous connaissez la console Cloud et les environnements Cloud Shell.
  • Une expérience préalable avec GKE et 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 (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. 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 désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Configuration de l'environnement

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

eb0157a992f16fa3.png

Clonez le dépôt et accédez au répertoire. Pour ce faire, 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éployez les dépendances requises en exécutant gke-lab-setup.sh.

Les ressources suivantes seront créées :

  • Cluster et instance AlloyDB
  • Artifact Registry pour stocker les images de conteneurs pour les jobs Cloud Run et le service client
  • Connecteur d'accès au VPC pour que Cloud Run Job communique avec la base de données AlloyDB
  • Job Cloud Run pour créer une 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

Découvrez les fonctionnalités disponibles(insights sur les requêtes, surveillance) dans la console.

3b12b0fa1367fb42.png

Examiner un 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 pour afficher le cluster GKE Autopilot créé :

gcloud container clusters list

Exemple de résultat :

e8882c44fa0bb631.png

Exécutez la commande 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 ensuite déployer une application de service client.

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

Accédez au dossier cymbal-eats/customer-service et exécutez les commandes pour créer et 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 de la dernière compilation.

49fd65309967ae47.png

Définissez la variable d'environnement ci-dessous en utilisant 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 secret Kubernetes permettant de stocker les identifiants de base de données qui seront utilisés par l'application de service client 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 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 pour déployer l'application :

kubectl apply -f customer-service-deployment.yaml

Il faut quelques instants pour que l'application passe à l'état "RUNNING" (En cours d'exécution).

Exécutez la commande pour créer l'adresse IP externe qui sera utilisée dans les étapes de test :

SERVICE_NAME=customer-service

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

Exécutez la commande 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 de l'adresse IP externe de la sortie précédente.

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

Exécutez les commandes ci-dessous pour créer une fiche 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 afficher ultérieurement dans l'explorateur de journaux.

Examiner les fiches client

Exécutez les commandes ci-dessous pour afficher la fiche client créée.

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 les services créés.

e1217216e003a839.png

d5c97fb5950c4db.png

Journaux d'application

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

543c5ed97819f540.png

5. Félicitations !

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

Points abordés

  • Créer une instance privée de 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.