Ce tutoriel explique comment configurer une connexion à partir d'une application exécutée dans un cluster Google Kubernetes Engine Autopilot vers une instance AlloyDB.
AlloyDB est un service de base de données entièrement géré et compatible avec PostgreSQL dans Google Cloud.
Google Kubernetes Engine vous aide à déployer, faire évoluer et gérer automatiquement Kubernetes.
Objectifs
- Créez une image Docker pour AlloyDB.
- Exécuter une application dans Google Kubernetes Engine
- Connectez-vous à une instance AlloyDB à l'aide du proxy d'authentification AlloyDB et d'une adresse IP interne.
Coûts
Ce tutoriel fait appel à des composants payants de Google Cloud, y compris :
- AlloyDB
- Google Kubernetes Engine
- Artifact Registry
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Console
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Vérifiez que vous disposez des autorisations requises pour suivre ce tutoriel.
- Activez les APIs Cloud nécessaires pour créer une instance AlloyDB et vous y connecter.
À l'étape Confirmer le projet, cliquez sur Suivant pour confirmer le nom du projet que vous allez modifier.
À l'étape Activer les API, cliquez sur Activer pour activer les éléments suivants :
- API AlloyDB
- API Artifact Registry
- API Compute Engine
- API Cloud Resource Manager
- API Cloud Build
- API Container Registry
- API Kubernetes Engine
- API Service Networking
gcloud
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Vérifiez que vous disposez des autorisations requises pour suivre ce tutoriel.
Pour les besoins de ce tutoriel, utilisez l'exemple d'application Web de collecte de votes nommée gke-alloydb-app.
Rôles requis
Pour obtenir les autorisations nécessaires pour effectuer les tâches de ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Administrateur de bases de données (
roles/iam.databasesAdmin) -
Administrateur de cluster Kubernetes Engine (
roles/container.clusterAdmin) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) -
Administrateur de compte de service(
roles/iam.serviceAccountAdmin) -
Administrateur Kubernetes Engine(
roles/container.admin) -
Administrateur Artifact Registry(
roles/artifactregistry.admin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Lancer Cloud Shell
Cloud Shell est un environnement shell permettant de gérer les ressources hébergées surGoogle Cloud.
Cloud Shell est préinstallé avec les outils de ligne de commande Google Cloud CLI et kubectl. gcloud CLI fournit l'interface de ligne de commande principale pour Google Cloud. kubectl fournit l'interface de ligne de commande principale permettant d'exécuter des commandes sur les clusters Kubernetes.
Console
Pour lancer Cloud Shell, procédez comme suit :
Accédez à la console Google Cloud .
Cliquez sur
Activer Cloud Shell en haut de la console Google Cloud .
Dans la boîte de dialogue Autoriser Cloud Shell, cliquez sur Autoriser.
Une session Cloud Shell s'ouvre dans un cadre situé en bas de la console. Utilisez cette interface système pour exécuter les commandes
gcloudetkubectl.Avant d'exécuter des commandes, définissez votre projet par défaut dans Google Cloud CLI à l'aide de la commande suivante :
gcloud config set project PROJECT_IDRemplacez
PROJECT_IDpar votre ID du projet
gcloud
Pour lancer Cloud Shell, procédez comme suit :
-
Dans la console Google Cloud , activez Cloud Shell.
En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Pour initialiser l'environnement, définissez votre projet par défaut dans Google Cloud CLI à l'aide de la commande suivante :
gcloud config set project PROJECT_IDRemplacez
PROJECT_IDpar votre ID du projetActivez les API Cloud nécessaires pour créer une instance AlloyDB pour PostgreSQL et vous y connecter.
gcloud services enable alloydb.googleapis.com \ compute.googleapis.com \ cloudresourcemanager.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ servicenetworking.googleapis.com \ artifactregistry.googleapis.com \ container.googleapis.com
Créer un cluster AlloyDB et son instance principale
Votre cluster AlloyDB comprend un certain nombre de nœuds dans un cloud privé virtuel (VPC) Google. Lorsque vous créez un cluster, vous configurez également l'accès aux services privés entre l'un de vos VPC et le VPC géré par Google contenant votre nouveau cluster. Nous vous recommandons d'utiliser un accès IP interne pour éviter d'exposer la base de données à l'Internet public.
Pour vous connecter à un cluster AlloyDB pour PostgreSQL depuis l'extérieur de son VPC configuré, configurez l'accès au service privé dans le VPC pour AlloyDB et utilisez le réseau VPC par défaut pour exécuter des requêtes à partir d'une application déployée sur un cluster GKE.
Console
Accédez à la page Clusters.
Dans la section Configurer le cluster, dans le champ ID du cluster, saisissez un ID pour votre cluster. Il doit commencer par une lettre minuscule et peut contenir des lettres minuscules, des chiffres et des traits d'union, comme
alloydb-cluster.Dans le champ Mot de passe, saisissez le CLUSTER_PASSWORD à utiliser pour l'utilisateur de base de données
postgrespar défaut lors de la création du cluster.Dans le champ Version de la base de données, sélectionnez la version majeure
POSTGRES_VERSIONpour votre nouveau cluster AlloyDB.Sélectionnez un REGION pour votre cluster, par exemple
us-central1.Dans la section Configurer votre instance principale, procédez comme suit :
Dans le champ ID d'instance, saisissez le INSTANCE_ID de votre instance principale, par exemple
alloydb-primary.Sélectionnez une série de machines, par exemple
N2.Sélectionnez un type de machine et spécifiez le nombre d'unités de traitement virtuelles NUM_CPU, par exemple
2.Pour vous assurer qu'une plage d'adresses IP est attribuée à l'appairage de services, configurez la connexion Accès aux services privés (PSA) :
Dans la liste Réseau, sélectionnez
default.Si une plage d'adresses IP comme
default-ip-rangeest déjà réservée, sélectionnez-la dans la liste Plage d'adresses IP attribuée.Si aucune plage d'adresses IP n'est attribuée, cliquez sur Allouer une plage d'adresses IP personnalisée pour allouer une nouvelle adresse IP interne IP_RANGE_NAME et configurer la connexion.
Cliquez sur Créer un cluster.
Attendez que l'instance AlloyDB soit créée. Cette opération peut prendre plusieurs minutes.
gcloud
Dans Cloud Shell, vérifiez si la plage d'adresses IP (IPv4) non utilisées est déjà attribuée à l'appairage de services :
gcloud services vpc-peerings list --network=defaultPassez à l'étape suivante si votre résultat ressemble à ce qui suit :
network: projects/493573376485/global/networks/default peering: servicenetworking-googleapis-com reservedPeeringRanges: - default-ip-range service: services/servicenetworking.googleapis.comDans cette sortie, la valeur de
reservedPeeringRangesestdefault-ip-range, que vous pouvez utiliser comme IP_RANGE_NAME pour créer une connexion privée à l'étape 3.(Ignorez cette étape si vous utilisez la valeur par défaut
reservedPeeringRanges.) Pour allouer des adresses IP inutilisées dans le VPC, utilisez la commande suivante :gcloud compute addresses create IP_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description="VPC private service access" \ --network=defaultRemplacez
IP_RANGE_NAMEpar le nom que vous souhaitez donner aux adresses IP internes disponibles dans un sous-réseau AlloyDB, par exemplealloydb-gke-psa-01.Pour configurer l'accès au service à l'aide de la plage d'adresses IP allouée, exécutez la commande suivante :
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=IP_RANGE_NAME \ --network=defaultPour déployer le cluster AlloyDB, exécutez la commande suivante :
gcloud alloydb clusters create CLUSTER_ID \ --database-version=POSTGRES_VERSION \ --password=CLUSTER_PASSWORD \ --network=default \ --region=REGION \ --project=PROJECT_IDRemplacez les éléments suivants :
CLUSTER_ID: ID du cluster que vous créez. Il doit commencer par une lettre minuscule et peut contenir des lettres minuscules, des chiffres et des traits d'union, commealloydb-cluster.VERSION: version majeure de PostgreSQL avec laquelle vous souhaitez que les serveurs de base de données du cluster soient compatibles. Choisissez l'une des options suivantes :14: pour la compatibilité avec PostgreSQL 1415: pour la compatibilité avec PostgreSQL 1516: pour la compatibilité avec PostgreSQL 1617: pour la compatibilité avec PostgreSQL 17, qui est la version PostgreSQL par défaut acceptée18, pour la compatibilité avec PostgreSQL 18
CLUSTER_PASSWORD: mot de passe à utiliser pour l'utilisateurpostgrespar défaut.PROJECT_ID: ID de votre Google Cloud projet dans lequel vous souhaitez placer le cluster.REGION: nom de la région dans laquelle le cluster AlloyDB est créé, par exempleus-central1.
Pour déployer l'instance principale AlloyDB, exécutez la commande suivante :
gcloud alloydb instances create INSTANCE_ID \ --instance-type=PRIMARY \ --cpu-count=NUM_CPU \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_IDRemplacez les éléments suivants :
INSTANCE_IDpar le nom de l'instance AlloyDB de votre choix, par exemplealloydb-primary.- Remplacez
CLUSTER_IDpar le nom du cluster AlloyDB, par exemplealloydb-cluster. NUM_CPUpar le nombre d'unités de traitement virtuelles, par exemple2.PROJECT_IDpar l'ID de votre projet Google Cloud ;- Remplacez
REGIONpar le nom de la région dans laquelle le cluster AlloyDB est créé, par exempleus-central1.
Attendez que l'instance AlloyDB soit créée. Cette opération peut prendre plusieurs minutes.
Se connecter à votre instance principale et créer une base de données et un utilisateur AlloyDB
Pour créer une base de données et un utilisateur de base de données sur votre instance principale, procédez comme suit :
Console
Si vous n'êtes pas sur la page Présentation du cluster que vous venez de créer, accédez à la page Clusters dans la console Google Cloud .
Pour afficher la page Présentation du cluster, cliquez sur le nom du cluster CLUSTER_ID.
Dans le menu de navigation, cliquez sur AlloyDB Studio.
Sur la page Se connecter à AlloyDB Studio, procédez comme suit :
Dans la liste Base de données, sélectionnez
postgres.Dans la liste Utilisateur, sélectionnez
postgres.Dans le champ Mot de passe, saisissez
CLUSTER_PASSWORDque vous avez créé dans Créer un cluster AlloyDB et son instance principale.Cliquez sur Authentifier. Le volet Explorateur affiche la liste des objets de votre base de données.
Dans l'onglet Éditeur 1, procédez comme suit :
Créez une base de données AlloyDB :
CREATE DATABASE DATABASE_NAME;Remplacez
DATABASE_NAMEpar le nom de votre choix, par exempletutorial_db.Cliquez sur Exécuter. Attendez que le message
Statement executed successfullys'affiche dans le volet Résultats.Cliquez sur Effacer.
Créez un utilisateur et un mot de passe pour la base de données AlloyDB :
CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';Remplacez les éléments suivants :
USERNAME: nom de l'utilisateur AlloyDB, tel quetutorial_user.DATABASE_PASSWORD: mot de passe de votre base de données AlloyDB, tel quetutorial.
Cliquez sur Exécuter. Attendez que le message
Statement executed successfullys'affiche dans le volet Résultats.
Dans le volet Explorateur d'AlloyDB Studio, cliquez sur manage_accounts Changer d'utilisateur/de base de données.
Sur la page Se connecter à AlloyDB Studio, procédez comme suit :
Dans la liste Base de données, sélectionnez
DATABASE_NAME, par exempletutorial_db.Dans la liste Utilisateur, sélectionnez
postgres.Dans le champ Mot de passe, saisissez
CLUSTER_PASSWORDque vous avez créé dans Créer un cluster AlloyDB et son instance principale.Cliquez sur Authentifier. Le volet Explorateur affiche la liste des objets de votre base de données.
Dans l'onglet Éditeur 1, procédez comme suit :
Accordez toutes les autorisations à l'utilisateur de la base de données AlloyDB :
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Cliquez sur Exécuter. Attendez que le message
Statement executed successfullys'affiche dans le volet Résultats.Cliquez sur Effacer.
Accordez les autorisations liées au schéma public à l'utilisateur de la base de données AlloyDB :
GRANT CREATE ON SCHEMA public TO "USERNAME";Cliquez sur Exécuter. Attendez que le message
Statement executed successfullys'affiche dans le volet Résultats.
Notez le nom, le nom d'utilisateur et le mot de passe de la base de données. Vous utiliserez ces informations dans Créer un secret Kubernetes.
gcloud
Pour créer un utilisateur de base de données AlloyDB, exécutez la commande suivante dans Cloud Shell :
gcloud alloydb users create USERNAME \ --cluster=CLUSTER_ID \ --region=REGION \ --password=DATABASE_PASSWORDRemplacez les éléments suivants :
USERNAME: nom de l'utilisateur AlloyDB, tel quetutorial_user.CLUSTER_ID: ID du cluster, tel quealloydb-cluster.REGION: région où se trouve le cluster, par exempleus-central1.DATABASE_PASSWORD: mot de passe de votre base de données AlloyDB, tel quetutorial.
Pour créer une base de données et accorder des autorisations, vous devez vous connecter au cluster et exécuter des commandes SQL. Dans Cloud Shell, utilisez le client
psqlpour vous connecter à votre instance.Une fois connecté à votre instance en tant qu'utilisateur
postgres, créez la base de données :CREATE DATABASE DATABASE_NAME;Remplacez
DATABASE_NAMEpar le nom de votre choix, par exempletutorial_db.Accordez toutes les autorisations à l'utilisateur de la base de données AlloyDB sur la nouvelle base de données :
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Connectez-vous à la nouvelle base de données et accordez les autorisations sur le schéma
public:\c DATABASE_NAME GRANT CREATE ON SCHEMA public TO "USERNAME";Notez le nom, le nom d'utilisateur et le mot de passe de la base de données. Vous utiliserez ces informations dans Créer un secret Kubernetes.
Créer un cluster GKE Autopilot
Un cluster contient au moins un système de plan de contrôle de cluster et plusieurs systèmes de calcul appelés nœuds. Les nœuds sont des instances de machines virtuelles (VM) Compute Engine qui exécutent les processus Kubernetes nécessaires pour faire partie du cluster. Vous déployez les applications sur des clusters, et ces applications s'exécutent sur les nœuds.
Console
Dans la console Google Cloud , accédez à la page Clusters Kubernetes.
Cliquez sur Créer.
Spécifiez
GKE_CLUSTER_IDpour votre cluster Autopilot dans le champ Nom de la page Paramètres de base du cluster, par exempleap-cluster.Dans le champ Région, sélectionnez
REGION, par exempleus-central1.Cliquez sur Créer.
Attendez que le cluster GKE soit créé. Cette opération peut prendre plusieurs minutes.
gcloud
Créez un cluster Autopilot :
gcloud container clusters create-auto GKE_CLUSTER_ID \
--location=REGIONRemplacez les éléments suivants :
GKE_CLUSTER_ID: nom du cluster Autopilot, tel queap-cluster.REGION: nom de la région dans laquelle le cluster GKE est déployé, par exempleus-central1.
Attendez que le cluster GKE soit créé. Cette opération peut prendre plusieurs minutes.
Se connecter à AlloyDB à l'aide du proxy d'authentification AlloyDB
Nous vous recommandons d'utiliser le proxy d'authentification AlloyDB pour vous connecter à AlloyDB. Le proxy d'authentification AlloyDB assure un chiffrement et une authentification sécurisés à l'aide d'Identity and Access Management (IAM), ce qui contribue à sécuriser votre base de données.
Lorsque vous vous connectez à l'aide du proxy d'authentification AlloyDB, celui-ci est ajouté à votre pod à l'aide du modèle de conteneur sidecar. Le conteneur du proxy d'authentification AlloyDB se trouve dans le même pod que l'application, ce qui permet à celle-ci de se connecter au proxy d'authentification AlloyDB à l'aide de localhost, améliorant ainsi la sécurité et les performances.
Créer et attribuer des rôles aux comptes de service Google
Dans Google Cloud, les applications utilisent des comptes de service pour effectuer des appels d'API autorisés en s'authentifiant en tant que compte de service. Lorsqu'une application s'authentifie en tant que compte de service, elle a accès à toutes les ressources auxquelles le compte de service est autorisé à accéder.
Pour exécuter le proxy d'authentification AlloyDB dans Google Kubernetes Engine, vous devez créer un compte de service Google pour représenter votre application. Nous vous recommandons de créer un compte de service unique pour chaque application plutôt que d'utiliser le même compte de service partout. Ce modèle est plus sécurisé, car il vous permet de limiter les autorisations par application.
Console
Dans la console Google Cloud , accédez à la page IAM.
Sur la page Autorisations pour le projet "
PROJECT_ID", recherchez la ligne contenant le compte de service Compute par défautPROJECT_NUMBER-compute@developer.gserviceaccount.com, puis cliquez sur edit Modifier le compte principal sur cette ligne.Pour obtenir le
PROJECT_NUMBER, qui est un identifiant unique généré automatiquement pour votre projet, procédez comme suit :Accédez à la page Tableau de bord dans la console Google Cloud .
Cliquez sur la liste déroulante de sélection du projet située en haut de la page. Dans la fenêtre Sélectionner qui s'affiche, sélectionnez votre projet.
Le
PROJECT_NUMBERest affiché sur la fiche Informations sur le projet du tableau de bord du projet.Cliquez sur Ajouter un autre rôle.
Pour accorder le rôle
roles/artifactregistry.reader, cliquez sur Sélectionner un rôle, puis sélectionnezArtifact Registrydans Par produit ou service etArtifact Registry Readerdans Rôles.Cliquez sur Enregistrer. Le rôle est attribué au compte principal.
Pour créer un compte de service pour l'application exemple GKE, accédez à la page Comptes de service. Accéder à la page "Comptes de service"
Sélectionnez votre projet.
Sur la page Comptes de service pour le projet "
PROJECT_ID", cliquez sur Créer un compte de service.Dans la section Détails du compte de service de la page Créer un compte de service, saisissez
GSA_NAMEdans le champ Nom du compte de service, par exemplegke-alloydb-gsa.Cliquez sur Créer et continuer.
La section Autoriser ce compte de service à accéder au projet (facultatif) de la page Créer un compte de service s'affiche.
Pour accorder le rôle
roles/alloydb.client, procédez comme suit :- Cliquez sur Sélectionner un rôle.
- Sélectionnez
Cloud AlloyDBdans Par produit ou service. - Sélectionnez
Cloud AlloyDB Clientdans Rôles.
Cliquez sur Ajouter un autre rôle.
Pour accorder le rôle
roles/serviceusage.serviceUsageConsumer, cliquez sur Sélectionner un rôle, puis sélectionnezService Usagedans Par produit ou service etService Usage Consumerdans Rôles.Cliquez sur OK. Des rôles sont attribués au compte de service Google.
gcloud
Pour accorder les autorisations requises au compte de service Google par défaut afin que Compute Engine puisse lire les données d'Artifact Registry, exécutez la commande suivante :
PROGECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:$PROGECT_NUM-compute@developer.gserviceaccount.com" --role="roles/artifactregistry.reader"Pour créer un compte de service Google pour votre application, créez un compte de service IAM :
gcloud iam service-accounts create GSA_NAME \ --display-name="gke-tutorial-service-account"Remplacez
GSA_NAMEpar le nom de votre nouveau compte de service IAM, par exemplegke-alloydb-gsa.Pour attribuer les rôles
alloydb.clientetserviceusage.serviceUsageConsumerau système GSA de votre application, utilisez les commandes suivantes :gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/alloydb.client" gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/serviceusage.serviceUsageConsumer"
Configurer la fédération d'identité de charge de travail pour GKE pour l'application exemple
Vous devez configurer GKE pour fournir le compte de service au proxy d'authentification AlloyDB à l'aide de la fonctionnalité Workload Identity Federation for GKE. Cette méthode vous permet d'associer un compte de service Kubernetes à un compte de service Google. Le compte de service Google devient alors accessible aux applications utilisant le compte de service Kubernetes correspondant.
Un compte de service Google est une identité IAM qui représente votre application dans Google Cloud. Un compte de service Kubernetes est une identité qui représente votre application dans un cluster Google Kubernetes Engine.
Workload Identity Federation pour GKE associe un compte de service Kubernetes à un compte de service Google. Cette liaison permet à tous les déploiements associés à ce compte de service Kubernetes de s'authentifier en tant que compte de service Google lors de leurs interactions avec Google Cloud.
Console
Pour lancer Cloud Shell, procédez comme suit :
-
Dans la console Google Cloud , activez Cloud Shell.
En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Dans Cloud Shell, obtenez les identifiants de votre cluster :
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDCette commande configure
kubectlpour l'utilisation du cluster GKE que vous avez créé.Dans l'éditeur de votre choix, procédez comme suit :
Ouvrez
service-account.yamlà l'aide de nano, par exemple :nano service-account.yamlDans l'éditeur, collez le contenu suivant :
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMERemplacez
KSA_NAMEpar le nom du compte de service, par exempleksa-alloydb.Appuyez sur Ctrl+O, puis sur ENTRÉE pour enregistrer les modifications. Appuyez ensuite sur Ctrl+X pour quitter l'éditeur.
Créez un compte de service Kubernetes pour votre exemple d'application :
kubectl apply -f service-account.yamlPour associer le compte de service Kubernetes au compte de service Google, procédez comme suit dans la console Google Cloud :
Dans la console Google Cloud , accédez à la page Comptes de service.
Sélectionnez votre projet.
Cliquez sur le nom du compte de service Google
GSA_NAME.Cliquez sur l'onglet Autorisations.
Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, saisissez les identités suivantes :
serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]Dans la liste Sélectionner un rôle, sélectionnez IAM > Utilisateur de l'identité de charge de travail.
Cliquez sur Enregistrer.
Dans Cloud Shell, ajoutez l'annotation
iam.gke.io/gcp-service-accountau compte de service Kubernetes à l'aide de l'adresse e-mail du compte de service Google :kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
gcloud
Dans la console Google Cloud , ouvrez Cloud Shell.
Dans Cloud Shell, obtenez les identifiants de votre cluster :
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDCette commande configure
kubectlpour l'utilisation du cluster GKE que vous avez créé.Dans l'éditeur de votre choix, procédez comme suit :
Ouvrez
service-account.yamlà l'aide de nano, par exemple :nano service-account.yamlDans l'éditeur, collez le contenu suivant :
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMERemplacez
KSA_NAMEpar le nom du compte de service, par exempleksa-alloydb.Appuyez sur Ctrl+O, puis sur ENTRÉE pour enregistrer les modifications. Appuyez ensuite sur Ctrl+X pour quitter l'éditeur.
Créez un compte de service Kubernetes pour votre exemple d'application :
kubectl apply -f service-account.yamlAccordez à votre compte de service Kubernetes les autorisations nécessaires pour emprunter l'identité du compte de service Google en créant une liaison de stratégie IAM entre les deux comptes de service :
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comAjoutez l'annotation
iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_IDau compte de service Kubernetes à l'aide de l'adresse e-mail du compte de service Google :kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Renseignez Artifact Registry avec une image de l'exemple d'application.
Pour créer une image de conteneur de l'exemple d'application et la transférer vers un dépôt, procédez comme suit.
Console
Dans la console Google Cloud , accédez à la page Artifact Registry.
Pour créer un dépôt, cliquez sur .
Dans le champ Nom, saisissez
REPOSITORY_ID, par exemplegke-alloydb-sample-app.Dans la section Format, sélectionnez Docker.
Dans la section Type d'emplacement, sélectionnez Région, puis choisissez
REGION, par exempleus-central1.Cliquez sur Créer.
Pour créer l'image de l'exemple d'application, lancez Cloud Shell et procédez comme suit.
-
Dans la console Google Cloud , activez Cloud Shell.
En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Dans Cloud Shell, clonez le dépôt avec l'exemple de code d'application
gke-alloydb-appdepuis GitHub :git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goDans la boîte de dialogue Autoriser Cloud Shell, cliquez sur Autoriser. Cette invite ne s'affiche pas si vous avez déjà effectué cette étape.
Pour créer le conteneur Docker et le publier dans Artifact Registry, exécutez la commande suivante :
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDRemplacez les éléments suivants :
PROJECT_ID: par l'ID du projet.REPOSITORY_ID: nom de votre dépôt, tel quegke-alloydb-sample-app.SAMPLE_APPLICATION: nom de votre exemple d'application Web, tel quegke-alloydb-app.
gcloud
Dans Cloud Shell, utilisez la commande suivante pour cloner le dépôt avec l'exemple de code d'application
gke-alloydb-appdepuis GitHub :git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goCréez un dépôt dans Artifact Registry pour les images Docker :
gcloud artifacts repositories create REPOSITORY_ID --location REGION --repository-format=docker --project PROJECT_IDRemplacez les éléments suivants :
PROJECT_ID: par l'ID du projet.REPOSITORY_ID: nom de votre dépôt, tel quegke-alloydb-sample-app.
Dans la boîte de dialogue Autoriser Cloud Shell, cliquez sur Autoriser. Cette invite ne s'affiche pas si vous avez déjà effectué cette étape.
Pour créer un conteneur Docker et le publier dans Artifact Registry, utilisez la commande suivante :
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDRemplacez les éléments suivants :
PROJECT_ID: par l'ID du projet.REPOSITORY_ID: nom de votre dépôt, tel quegke-alloydb-sample-app.SAMPLE_APPLICATION: nom de votre exemple d'application Web, tel quegke-alloydb-app.
Créer un secret Kubernetes
Créez des secrets Kubernetes pour la base de données, l'utilisateur et le mot de passe de l'utilisateur que l'exemple d'application doit utiliser. Les valeurs de chaque secret sont basées sur les valeurs spécifiées à l'étape Se connecter à votre instance principale et créer une base de données et un utilisateur AlloyDB de ce tutoriel. Pour en savoir plus, consultez Secrets.
Console
Dans votre fenêtre Cloud Shell ouverte, utilisez un SECRET Kubernetes, tel que gke-alloydb-secret, pour stocker les informations de connexion :
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDgcloud
Utilisez un SECRET Kubernetes, tel que gke-alloydb-secret, pour stocker les informations de connexion :
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDDéployer et exécuter le proxy AlloyDB dans un modèle side-car
Nous vous recommandons d'exécuter AlloyDB Proxy dans un modèle sidecar en tant que conteneur supplémentaire partageant un pod avec votre application pour les raisons suivantes :
- Empêche l'exposition locale de votre trafic SQL. Le proxy AlloyDB assure le chiffrement des connexions sortantes, mais vous devez limiter l'exposition aux connexions entrantes.
- Cela permet d'éviter un point de défaillance unique. L'accès de chaque application à votre base de données est indépendant des autres, ce qui rend l'ensemble plus résilient.
- Limiter l'accès au proxy AlloyDB, ce qui vous permet d'utiliser les autorisations IAM par application plutôt que d'exposer la base de données à l'ensemble du cluster.
- Vous permet de définir plus précisément la portée des demandes de ressources. Comme le proxy AlloyDB consomme les ressources de façon linéaire, ce modèle vous permet de définir plus précisément la portée et les demandes des ressources pour les adapter à vos applications.
- Vous permet de configurer votre application pour qu'elle se connecte à l'aide de
127.0.0.1sur la valeur DB_PORT spécifiée dans la section de commande.
Après avoir créé un cluster GKE et une image de conteneur pour votre application, déployez votre application conteneurisée sur le cluster GKE.
Console
Dans ce tutoriel, vous allez déployer l'exemple d'application Web de collecte de votes, gke-alloydb-app, qui utilise AlloyDB comme Datastore.
Obtenez la chaîne de connexion
INSTANCE_URIpour l'instance principale AlloyDB :Dans la console Google Cloud , accédez à la page Clusters.
Pour afficher la page Présentation du cluster, cliquez sur son nom.
Dans le tableau Instances, cliquez sur le nom de votre instance principale.
Dans le champ URI de l'instance de la page Présentation, cliquez sur Copier dans le presse-papiers.
Vous spécifiez cette
INSTANCE_URIdans le fichier de définitionproxy_sidecar_deployment.yamlà l'étape 2.b de cette section.Dans Cloud Shell, procédez comme suit :
Ouvrez
proxy_sidecar_deployment.yamlà l'aide de l'éditeur de votre choix, par exemple nano :nano proxy_sidecar_deployment.yamlDans l'éditeur, collez le contenu suivant :
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION -docker.pkg.dev/PROJECT_ID /REPOSITORY_ID /SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy - "INSTANCE_URI " securityContext: runAsNonRoot: true resources: requests: memory: "2Gi" cpu: "1"Remplacez
INSTANCE_URIpar le chemin d'accès que vous avez copié à l'étape 1.Appuyez sur Ctrl+O, puis sur ENTRÉE pour enregistrer les modifications. Appuyez ensuite sur Ctrl+X pour quitter l'éditeur.
Pour déployer l'application
gke-alloydb-app, appliquez le fichier de définition :kubectl apply -f proxy_sidecar_deployment.yamlPour vérifier que l'application est en cours d'exécution, accédez à la page Charges de travail de la console Google Cloud :
Accéder à la page Charges de travail
Vérifiez que l'état du déploiement gke-alloydb est OK.
Pour vous connecter à l'application exemple à l'aide d'un équilibreur de charge externe, procédez comme suit dans Cloud Shell :
Ouvrez
service.yaml:nano service.yamlCollez le contenu suivant :
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Remplacez
SAMPLE_APPLICATIONpar le nom de votre application, par exemplegke-alloydb-app.Enregistrez et quittez l'éditeur, puis appliquez le service :
kubectl apply -f service.yaml
Pour obtenir l'adresse IP externe de votre application, accédez à la page Services et entrées de la console Google Cloud :
Utilisez la valeur de la colonne Points de terminaison externes pour accéder à l'application à l'URL suivante :
http://EXTERNAL_IP
gcloud
Dans ce tutoriel, vous allez déployer l'exemple d'application Web de collecte de votes, gke-alloydb-app, qui utilise AlloyDB comme Datastore.
Obtenez la chaîne de connexion INSTANCE_URI de l'instance principale AlloyDB à laquelle vous souhaitez que le proxy AlloyDB se connecte :
gcloud alloydb instances describe INSTANCE_ID \ --cluster=CLUSTER_ID \ --region=REGION \ --format="value(name)"Remplacez les éléments suivants :
INSTANCE_ID: nom de l'instance, tel quealloydb-primary.CLUSTER_ID: nom du cluster, tel quealloydb-cluster.
La sortie contient le INSTANCE_URI que vous spécifiez dans le fichier de définition
proxy_sidecar_deployment.yamlà l'étape 2.b de cette section.Dans l'éditeur de votre choix (nano, par exemple), procédez comme suit :
Ouvrez
proxy_sidecar_deployment.yamlà l'aide de l'éditeur de votre choix, par exemple nano :nano proxy_sidecar_deployment.yamlDans l'éditeur, collez le contenu suivant :
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" # This project uses environment variables to determine # how you would like to run your application # To use the Go connector (recommended) - use INSTANCE NAME # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1) - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" # To use Automatic IAM Authentication (recommended) # use DB_IAM_USER instead of DB_USER # you may also remove the DB_PASS environment variable - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database # If you are using the Go connector (recommended), you can # remove alloydb-proxy (everything below this line) - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy # It is recommended to use a specific version for production environments. # See: https://github.com/GoogleCloudPlatform/alloydb-auth-proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy # Use <INSTANCE_URI> - "INSTANCE_URI" securityContext: # The default AlloyDB Auth proxy image runs as the # "nonroot" user and group (uid: 65532) by default. runAsNonRoot: true resources: requests: # The proxy's memory use scales linearly with the number of active # connections. Fewer open connections will use less memory. Adjust # this value based on your application's requirements. memory: "2Gi" # The proxy's CPU use scales linearly with the amount of IO between # the database and the application. Adjust this value based on your # application's requirements. cpu: "1"Remplacez
INSTANCE_URIpar le chemin d'accès à votre instance principale AlloyDB de l'étape 1, par exempleprojects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID.Appuyez sur Ctrl+O, puis sur ENTRÉE pour enregistrer les modifications. Appuyez ensuite sur Ctrl+X pour quitter l'éditeur.
Pour déployer l'application
gke-alloydb-app, appliquez le fichier de définitionproxy_sidecar_deployment.yamlque vous avez créé à l'étape précédente :kubectl apply -f proxy_sidecar_deployment.yamlVérifiez que l'état des deux conteneurs du pod est
running:kubectl get podsExemple de résultat :
NAME READY STATUS RESTARTS AGE gke-alloydb-8d59bb4cc-62xgh 2/2 Running 0 2m53sPour vous connecter à l'exemple d'application
gke-alloydb-app, utilisez un service, par exemple un équilibreur de charge HTTP externe. Dans l'éditeur de votre choix, procédez comme suit :Ouvrez
service.yamlà l'aide de nano, par exemple :nano service.yamlDans l'éditeur nano, collez le contenu suivant :
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Remplacez
SAMPLE_APPLICATIONpar le nom de votre exemple d'application Web, tel quegke-alloydb-app.Appuyez sur Ctrl+O, puis sur ENTRÉE pour enregistrer les modifications. Appuyez ensuite sur Ctrl+X pour quitter l'éditeur.
Pour déployer l'application de service
gke-alloydb-app, appliquez le fichierservice.yaml:kubectl apply -f service.yamlPour obtenir les détails du service, y compris son adresse IP externe, exécutez la commande suivante :
kubectl get serviceExemple de résultat :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gke-alloydb-app LoadBalancer 34.118.229.246 35.188.16.172 80:32712/TCP 45s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 85mUtilisez la valeur de l'adresse IP externe de l'étape précédente pour accéder à l'exemple d'application à l'URL suivante :
http://EXTERNAL-IP
Exemples de fichiers de configuration
proxy_sidecar_deployment.yaml
service.yaml
service-account.yaml
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées sur votre compte Google Cloud , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
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.
Pour supprimer le projet :
Dans la console Google Cloud , accédez à la page Gérer les ressources.
Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
Dans la boîte de dialogue, saisissez
PROJECT_ID, puis cliquez sur Arrêter pour supprimer le projet.
Étapes suivantes
- À propos du proxy d'authentification AlloyDB
- Présentation des adresses IP internes
- Documentation Google Kubernetes Engine