Premiers pas avec l'équilibrage de charge pour API Gateway

Ce tutoriel vous explique comment créer un équilibreur de charge d'application externe global pour acheminer les requêtes vers API Gateway. Le processus de configuration suit la même procédure que celle utilisée pour configurer l'intégration d'un équilibreur de charge d'application externe global avec d'autres produits sans serveur tels que Cloud Run, les fonctions Cloud Run et App Engine.

Bien qu'un équilibreur de charge ne soit pas nécessaire pour le fonctionnement d'API Gateway, il permet à votre passerelle de profiter des avantages d'un équilibreur de charge. Par exemple, l'utilisation d'un équilibreur de charge d'application externe global avec API Gateway vous permet:

  • Utilisez des domaines personnalisés.
  • Utiliser Google Cloud Armor en tant que service de sécurité réseau
  • Gérez un équilibrage de charge efficace entre les passerelles situées dans plusieurs emplacements.
  • Implémenter une gestion avancée du trafic.

Avant de commencer

  1. Si vous ne l'avez pas déjà fait, téléchargez et installez Google Cloud CLI.

    Télécharger gcloud CLI

  2. Mettez à jour les composants gcloud :

    gcloud components update
  3. Suivez le guide de démarrage rapide d'API Gateway pour déployer un service Cloud Run et créer une passerelle qui pointe vers ce service.

  4. Configurez les autorisations.

  5. Ajoutez une ressource de certificat SSL.

Déployer un service Cloud Run et une instance API Gateway

Dans ce tutoriel, vous allez déployer un vers Cloud Run, créer une passerelle qui achemine le trafic vers le service Cloud Run, et configurer un équilibreur de charge d'application externe global pour acheminer les requêtes vers un domaine personnalisé.

Bien que ce tutoriel utilise Cloud Run comme service de backend pour API Gateway, ces étapes s'appliquent également à tous les services de backend compatibles avec API Gateway.

Une fois le guide de démarrage rapide d'API Gateway terminé, vous devriez disposer d'une URL de passerelle déployée qui pointe vers le service Cloud Run.

Configurer les autorisations

Dans ce tutoriel, vous allez créer un groupe de points de terminaison du réseau (NEG) sans serveur et un équilibreur de charge d'application externe global dans un projet Cloud. Cette opération nécessite un rôle de propriétaire ou d'éditeur de projet, ou les rôles IAM Compute Engine suivants :

Tâche Rôle requis
Créer des composants d'équilibrage de charge et de mise en réseau Administrateur réseau
Créer et modifier des NEG Administrateur d'instances Compute
Créer et modifier des certificats SSL Administrateur de sécurité

Créer une ressource de certificat SSL

Pour créer un équilibreur de charge d'application externe global, un certificat SSL doit être ajoutée à l'interface de l'équilibreur de charge. Créez une ressource de certificat SSL à l'aide d'un certificat SSL géré par Google ou d'un certificat SSL autogéré.

  • Certificats gérés par Google. L'utilisation de certificats gérés par Google est recommandée, car Google Cloud obtient, gère et renouvelle automatiquement ces certificats pour vous. Pour créer un certificat géré par Google, vous devez disposer d'un domaine et d'enregistrements DNS pour ce domaine afin que le certificat soit provisionné. Si vous ne possédez pas encore de domaine, vous pouvez en obtenir un auprès de Google Domains. De plus, vous devez Mettre à jour l'enregistrement DNS A du domaine pour qu'il pointe vers l'adresse IP de l'équilibreur de charge créé lors d'une étape ultérieure. Pour obtenir des instructions détaillées, consultez l'article Utiliser des clés de sécurité gérées par Google certificats.

  • Certificats autosignés. Si vous ne souhaitez pas configurer un domaine à ce stade, vous pouvez utiliser un certificat SSL autosigné pour les tests.

Pour cet tutoriel, nous partons du principe que vous avez déjà créé une ressource de certificat SSL.

Si vous souhaitez tester ce processus sans créer de ressource de certificat SSL (ou de domaine comme requis par les certificats gérés par Google), vous pouvez toujours utiliser les instructions de cette page pour configurer un équilibreur de charge HTTP.

Créer l'équilibreur de charge d'application externe global

  1. Créez un NEG sans serveur pour API Gateway.

    Un groupe de points de terminaison du réseau (NEG) spécifie un groupe de points de terminaison backend pour un équilibreur de charge. Un NEG sans serveur est un backend qui pointe vers un service tel qu'API Gateway, comme illustré dans la figure suivante:

    Schéma d'un groupe de points de terminaison du réseau sans serveur comme backend de passerelles multirégionales

    Pour créer un NEG sans serveur pour votre passerelle, exécutez la commande suivante, où :

    • SERVERLESS_NEG_NAME est le nom du NEG sans serveur à créer.
    • GATEWAY_ID spécifie le nom de la passerelle.
    • REGION_ID est la région de déploiement du NEG sans serveur (elle doit correspondre à la région de la passerelle).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Exemple :

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Créez un service de backend pour définir la manière dont l'équilibreur de charge d'application externe global répartit le trafic.

    La configuration du service de backend contient un ensemble de valeurs, telles que le protocole utilisé pour se connecter aux backends, divers paramètres de distribution et de session, les vérifications de l'état et les délais avant expiration, comme illustré dans la figure suivante:

    Schéma d'un groupe de points de terminaison du réseau sans serveur comme backend d'un service de backend

    Pour créer un service de backend, exécutez la commande suivante :

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    BACKEND_SERVICE_NAME est le nom de votre nouveau service de backend.

    Exemple :

    gcloud compute backend-services create api-gateway-backend-service --global

    Pour ajouter votre NEG sans serveur en tant que backend au service de backend, exécutez la commande suivante, où:

    • BACKEND_SERVICE_NAME est le nom de votre service de backend.
    • SERVERLESS_NEG_NAME est le nom du NEG sans serveur créé à l'étape précédente.
    • REGION_ID est la région de déploiement du NEG sans serveur (elle doit correspondre à la région de la passerelle).
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Exemple :

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. Créez un mappage d'URL pour acheminer les requêtes entrantes vers le service de backend, comme illustré à la figure ci-dessous :

    Schéma illustrant le mappage d'URL vers le service de backend

    Pour créer le mappage d'URL, exécutez la commande suivante, où :

    • URL_MAP_NAME est le nom du mappage d'URL à créer.
    • BACKEND_SERVICE_NAME est le nom de votre service de backend.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Exemple :

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Cet exemple de mappage d'URL ne cible qu'un seul service de backend représentant une seule passerelle. Vous n'avez donc pas besoin de règles d'hôte ni d'outils de mise en correspondance des chemins d'accès. Si vous disposez de plusieurs service de backend, vous pouvez utiliser des règles d'hôte pour diriger les requêtes vers différents services en fonction du nom d'hôte. Utilisez des outils de mise en correspondance des chemins d'accès pour diriger les requêtes vers différents services en fonction du chemin d'accès des requêtes.

    Exemple :

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Pour en savoir plus sur les règles d'hôte et les outils de mise en correspondance de chemins d'accès, consultez la documentation sur le mappage d'URL.

  4. Créez un certificat SSL pour votre proxy cible, comme illustré dans la figure ci-dessous :

    schéma du certificat SSL pour le proxy cible

    Pour créer un équilibreur de charge d'application externe global, Certificat SSL ressource est requise pour le proxy cible HTTP(S). Vous pouvez créer une ressource de certificat SSL à l'aide d'un certificat SSL géré par Google ou d'un certificat SSL autogéré. L'utilisation de certificats gérés par Google est recommandée. Si vous testez ce processus sans ressource de certificat SSL et que vous souhaitez configurer un équilibreur de charge HTTP, vous pouvez ignorer cette étape.

    Pour créer un certificat géré par Google, vous devez disposer d'un domaine. Si vous n'avez pas de domaine, vous pouvez utiliser un certificat SSL autosigné pour le test.

    Pour créer une ressource de certificat SSL géré par Google, procédez comme suit :

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    Pour créer une ressource de certificat SSL autogéré, procédez comme suit :

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Créez un proxy HTTP(S) cible pour acheminer les requêtes vers votre mappage d'URL, comme illustré dans la figure ci-dessous :

    Schéma du mappage HTTP vers le mappage d'URL

    Pour créer le proxy cible, utilisez la commande suivante, où :

    • TARGET_HTTPS_PROXY_NAME est le nom du proxy HTTP(S) cible à créer.
    • URL_MAP_NAME est le nom du mappage d'URL créé à l'étape précédente.
    • Facultatif : SSL_CERT_NAME est le nom du certificat SSL créé.
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Exemple :

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Comme indiqué précédemment, vous pouvez créer un équilibreur de charge HTTP sans créer de ressource de certificat SSL. Pour ce faire, exécutez la commande suivante:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Exemple :

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    Les commandes ultérieures pour les proxys HTTP doivent être modifiées pour prendre en charge l'indicateur --target-http-proxy et TARGET_HTTP_PROXY_NAME pour leurs homologues HTTP(S).

  6. Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy, comme illustré dans la figure suivante:

    Schéma de la règle de transfert vers le proxy HTTP

    Utilisez la commande suivante pour créer la règle de transfert, où :

    • HTTPS_FORWARDING_RULE_NAME est le nom de la règle à créer.
    • TARGET_HTTPS_PROXY_NAME est le nom du proxy cible HTTP(S).
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Exemple :

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Mettre à jour les enregistrements DNS avec l'adresse IP de l'équilibreur de charge

Si vous disposez d'un domaine personnalisé, cette étape est nécessaire pour configurer les paramètres DNS de votre domaine afin qu'ils pointent vers la nouvelle adresse IP de votre service. Elle est également requise si vous avez créé un équilibreur de charge d'application externe global avec un certificat géré par Google (qui nécessite un domaine). Il est recommandé d'allouer et d'utiliser une adresse IP statique en cas d'utilisation avec DNS. Les instructions spécifiques à cette étape dépendent de votre fournisseur DNS.

  1. Pour envoyer du trafic vers l'équilibreur de charge, l'enregistrement DNS de votre domaine (dans ce tutoriel, mon-domaine-appli) doit pointer vers la ou les adresses IP de l'équilibreur de charge.

    Pour trouver l'adresse IP de votre règle de transfert globale, utilisez la commande suivante :

    gcloud compute forwarding-rules list
  2. Mettre à jour l'enregistrement DNS A ou AAAA de votre domaine pour qu'il pointe à l'adresse IP de l'équilibreur de charge pour que le trafic envoyé à l'URL de domaine personnalisé existante soit acheminé via l'équilibreur de charge. Quelques secondes, voire plusieurs heures, peuvent être nécessaires pour que le DNS propage cette modification au serveur DNS.

  3. Effectuez un test pour vérifier que votre passerelle reçoit du trafic en utilisant curl ou en accédant à l'URL dans votre navigateur. Exemple : https://my-app-domain.

    Lors des tests, vous devriez voir la réponse générée par le service Cloud Run. Il peut s'agir, par exemple, d'un message "Hello World". une page HTML ou une autre réponse attendue générée directement par le service de backend. Cela signifie que votre requête passe par l'équilibreur de charge, et que le service de backend lui demande de l'envoyer à votre passerelle.

Tester la configuration de votre équilibreur de charge

Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers l'adresse IP de la règle de transfert.

Pour trouver l'adresse IP de votre règle de transfert globale, utilisez la commande suivante :

gcloud compute forwarding-rules list

Testez la réponse de plusieurs URL pour vos services à l'aide de la commande curl. Exemple :

curl https://HOST_URL/hello/
curl https://HOST_URL

Vous pouvez utiliser la console Cloud d'API Gateway pour vérifier que les requêtes atteignent les services appropriés.

Félicitations ! Vous avez correctement configuré l'équilibreur de charge d'application externe global pour la passerelle API PREVIEW.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce guide de démarrage rapide soient facturées sur votre compte Google Cloud, vous pouvez supprimer les ressources Cloud Load Balancing que vous avez créées. Si ces ressources ont été créées au sein d'un projet isolé dédié, vous pouvez supprimer l'ensemble du projet. Sinon, vous pouvez supprimer les ressources individuellement.

Supprimer le projet

Exécutez la commande suivante en remplaçant PROJECT_ID par l'ID de votre projet :

gcloud projects delete PROJECT_ID

Supprimer des ressources individuelles

Supprimez chaque composant de l'équilibreur de charge :

  1. Supprimer les règles de transfert :

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Supprimer les adresses IP externes globales :

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Supprimer le proxy cible :

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Supprimer le mappage d'URL :

    gcloud compute url-maps delete URL_MAP_NAME
  5. Supprimer les services de backend :

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (Facultatif) Supprimez le certificat SSL :

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Supprimez le NEG sans serveur :

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION