Ce tutoriel explique comment configurer une connexion entre une application exécutée dans un cluster Google Kubernetes Engine Autopilot et une instance AlloyDB.
AlloyDB est un service de base de données entièrement géré compatible avec PostgreSQL dans Google Cloud.
Google Kubernetes Engine vous aide à déployer, faire évoluer et gérer automatiquement Kubernetes.
Objectifs
- Créer une image Docker pour AlloyDB.
- Exécutez 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é 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 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 la 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 de shell dans lequel la Google Cloud CLI est déjà installée, 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 la 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 se compose d'un certain nombre de nœuds au sein d'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 par adresse 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é, vous devez configurer l'accès au service privé dans le VPC pour AlloyDB et utiliser 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, par exemple
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 virtuel NUM_CPU, par exemple
2.Pour vous assurer qu'une plage d'adresses IP est attribuée à l'appairage de services, configurez la connexion d'accès aux services privés :
Dans la liste Réseau, sélectionnez
default.Si une plage d'adresses IP telle que
default-ip-rangeest déjà réservée, sélectionnez-la dans la liste Plage d'adresses IP alloué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 plage d'adresses IP internes 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) inutilisées est déjà attribuée à l'appairage de services :
gcloud services vpc-peerings list --network=defaultIgnorez l'étape suivante si votre résultat ressemble à ceci :
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 de
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, par exemplealloydb-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 assurer 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 projet Google Cloud 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.CLUSTER_IDpar le nom du cluster AlloyDB, par exemplealloydb-cluster.NUM_CPUpar le nombre d'unités de traitement virtuel, par exemple2.PROJECT_IDpar l'ID de votre projet Google Cloud ;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 à l'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, par exempletutorial_user.DATABASE_PASSWORD: mot de passe de votre base de données AlloyDB, par exempletutorial.
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 des autorisations à l'utilisateur de la base de données AlloyDB sur le schéma public :
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 de la base de données, le nom d'utilisateur et le mot de passe. 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, par exempletutorial_user.CLUSTER_ID: ID du cluster, par exemplealloydb-cluster.REGION: région où se trouve le cluster, par exempleus-central1.DATABASE_PASSWORD: mot de passe de votre base de données AlloyDB, par exempletutorial.
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 des autorisations sur le schéma
public:\c DATABASE_NAME GRANT CREATE ON SCHEMA public TO "USERNAME";Notez le nom de la base de données, le nom d'utilisateur et le mot de passe. 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, par exempleap-cluster.REGION: nom de la région où 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 via localhost, améliorant ainsi la sécurité et les performances.
Accorder l'accès à Artifact Registry au compte de service Compute Engine par défaut
Attribuez le rôle Lecteur Artifact Registry (roles/artifactregistry.reader) au compte de service Compute Engine par défaut afin que vos nœuds Google Kubernetes Engine puissent extraire les images de conteneurs depuis Artifact Registry.
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.
L'
PROJECT_NUMBERest affiché sur la fiche Informations sur le projet du tableau de bord du projet.Cliquez sur Ajouter un autre rôle.
Pour attribuer le rôle
roles/artifactregistry.reader, cliquez sur Sélectionner un rôle, choisissezArtifact Registrydans Par produit ou service, puis choisissezArtifact Registry Readerdans Rôles.Cliquez sur Enregistrer. Le rôle est attribué au compte principal.
gcloud
Attribuez le rôle de lecteur Artifact Registry (roles/artifactregistry.reader) sur le projet au compte de service Compute Engine par défaut :
PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/artifactregistry.reader" \
--condition=NoneRemplacez PROJECT_ID par l'ID du projet.
Configurer Workload Identity Federation for GKE pour l'application exemple
Configurez Google Kubernetes Engine pour authentifier le proxy AlloyDB Auth à l'aide de Workload Identity Federation for GKE. Avec la fédération d'identité de charge de travail pour GKE, vous créez un compte de service Kubernetes pour votre application dans le cluster Google Kubernetes Engine et vous accordez des rôles IAM à ce compte de service Kubernetes. Créez un compte de service Kubernetes unique pour chaque application afin de pouvoir limiter les autorisations par application.
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 de shell dans lequel la Google Cloud CLI est déjà installée, 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: KUBERNETES_SERVICEACCOUNTRemplacez
KUBERNETES_SERVICEACCOUNTpar le nom du compte de service Kubernetes, par exemplealloydb-sa.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 attribuer des rôles IAM au compte de service Kubernetes, procédez comme suit dans la console Google Cloud :
Dans la console Google Cloud , accédez à la page IAM.
Sélectionnez votre projet.
Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, saisissez ce qui suit :
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/default/sa/KUBERNETES_SERVICEACCOUNTRemplacez les éléments suivants :
PROJECT_NUMBER: votre numéro de projet.PROJECT_ID: ID de votre projet.KUBERNETES_SERVICEACCOUNT: nom du compte de service Kubernetes, tel quealloydb-sa.
Pour attribuer le rôle
roles/alloydb.client, dans la liste Sélectionner un rôle, choisissez AlloyDB pour PostgreSQL > Client AlloyDB.Cliquez sur Ajouter un autre rôle.
Pour attribuer le rôle
roles/serviceusage.serviceUsageConsumer, dans la liste Sélectionner un rôle, choisissez Service Usage > Consommateur Service Usage.Cliquez sur Enregistrer.
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: KUBERNETES_SERVICEACCOUNTRemplacez
KUBERNETES_SERVICEACCOUNTpar le nom du compte de service Kubernetes, par exemplealloydb-sa.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.yamlAttribuez les rôles Client AlloyDB (
roles/alloydb.client) et Consommateur Service Usage (roles/serviceusage.serviceUsageConsumer) sur le projet au compte de service Kubernetes :PROJECT_ID="PROJECT_ID" KUBERNETES_SERVICEACCOUNT="KUBERNETES_SERVICEACCOUNT" PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/$KUBERNETES_SERVICEACCOUNT" \ --role="roles/alloydb.client" \ --condition=None gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/$KUBERNETES_SERVICEACCOUNT" \ --role="roles/serviceusage.serviceUsageConsumer" \ --condition=NoneRemplacez les éléments suivants :
PROJECT_ID: ID de votre projet.KUBERNETES_SERVICEACCOUNT: nom du compte de service Kubernetes, par exemplealloydb-sa.
Renseigner 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, puis 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 de 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, par exemplegke-alloydb-sample-app.SAMPLE_APPLICATION: nom de votre exemple d'application Web, par exemplegke-alloydb-app.
gcloud
Dans Cloud Shell, utilisez la commande suivante pour cloner le dépôt contenant 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, par exemplegke-alloydb-sample-app.SAMPLE_APPLICATION: nom de votre exemple d'application Web, par exemplegke-alloydb-app.
Créer un secret Kubernetes
Vous 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 dans 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 Cloud Shell, 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 le proxy AlloyDB dans un modèle sidecar en tant que conteneur supplémentaire partageant un pod avec votre application pour les raisons suivantes :
- Empêcher 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 le nom de connexion
INSTANCE_URIde 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 ce
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: KUBERNETES_SERVICEACCOUNT 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
KUBERNETES_SERVICEACCOUNTpar le nom de votre compte de service Kubernetes etINSTANCE_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 dans 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, par exemplealloydb-primary.CLUSTER_ID: nom du cluster, par exemplealloydb-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: KUBERNETES_SERVICEACCOUNT 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
KUBERNETES_SERVICEACCOUNTpar le nom de votre compte de service Kubernetes etINSTANCE_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, utilisez 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 votre
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