Premiers pas avec l'équilibrage de charge HTTP(S) pour API Gateway

Ce tutoriel explique comment créer un équilibreur de charge HTTP(S) externe Google Cloud afin d'acheminer les requêtes vers API Gateway. Le processus de configuration suit les mêmes étapes que pour configurer l'intégration de Cloud Load Balancing avec d'autres produits sans serveur tels que Cloud Run, Cloud Functions et App Engine.

Bien qu'aucun équilibreur de charge ne soit nécessaire au fonctionnement d'API Gateway, il permet à votre passerelle d'exploiter de nombreux avantages de Cloud Load Balancing. Par exemple, l'utilisation de Cloud Load Balancing avec API Gateway vous permet d'effectuer les opérations suivantes:

  • Utilisez des domaines personnalisés.
  • Utiliser Google Cloud Armor en tant que service de sécurité du réseau
  • Gérez un équilibrage de charge efficace sur les passerelles de plusieurs emplacements.
  • Mettre en œuvre une gestion avancée du trafic

Avant de commencer

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

    Télécharger la gcloud CLI

  2. Mettez à jour les composants gcloud :

    gcloud components update
  3. Suivez le guide de démarrage rapide avec 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 service "hello-world" sur Cloud Run, créer une passerelle qui achemine le trafic vers ce service et configurer un équilibreur de charge HTTP(S) 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 actuellement compatibles avec API Gateway.

Une fois que vous avez suivi avec succès le guide de démarrage rapide d'API Gateway, vous devez 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 HTTP(S) externe 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é

Une ressource de certificat SSL doit être créée

Pour créer un équilibreur de charge HTTP(S), vous devez ajouter une ressource de certificat SSL à 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. En outre, vous devrez mettre à jour l'enregistrement DNS A du domaine pour qu'il pointe vers l'adresse IP de l'équilibreur de charge créée lors d'une étape ultérieure. Pour obtenir des instructions détaillées, consultez la page Utiliser des certificats gérés par Google.

  • 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 HTTP(S)

  1. Créez un groupe de points de terminaison du réseau 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 ci-dessous :

    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 groupe de points de terminaison du réseau sans serveur à créer.
    • GATEWAY_ID spécifie le nom de la passerelle.
    • REGION_ID est la région de déploiement du groupe de points de terminaison du réseau 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 Cloud Load Balancing 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 répartition et de gestion des sessions, les vérifications d'état et les délais avant expiration, comme illustré à la figure ci-dessous :

    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 groupe de points de terminaison du réseau 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 groupe de points de terminaison du réseau sans serveur créé à l'étape précédente.
    • REGION_ID est la région de déploiement du groupe de points de terminaison du réseau 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. Les règles d'hôte ou les outils de mise en correspondance des chemins d'accès ne sont donc pas nécessaires. 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 de leur chemin d'accès.

    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 des 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 HTTP(S), une ressource de certificat SSL 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é. Nous vous recommandons d'utiliser des certificats gérés par Google. 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 ne détenez pas de domaine, vous pouvez utiliser un certificat SSL autosigné pour les tests.

    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éé lors d'une é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é ci-dessus, 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 suivantes pour les proxys HTTP doivent être modifiées de façon à s'adapter à l'indicateur --target-http-proxy et à vous TARGET_HTTP_PROXY_NAME pour leurs équivalents HTTP(S).

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

    schéma d'une règle de transfert vers un 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 HTTP(S) cible.
    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'il pointe vers la nouvelle adresse IP de votre service. Elle est également requise si vous avez créé un équilibreur de charge HTTP(S) avec un certificat géré par Google (qui requiert un domaine). L'attribution et l'utilisation d'adresses IP statiques sont recommandées en cas d'utilisation avec un 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-de-l'application") 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. Mettez à jour l'enregistrement DNS A ou AAAA du domaine pour qu'il pointe vers l'adresse IP de l'équilibreur de charge afin que le trafic envoyé à l'URL du domaine personnalisé existant soit acheminé via l'équilibreur de charge. La propagation de cette modification au serveur DNS peut prendre de quelques secondes à plusieurs heures.

  3. Vérifiez que votre passerelle reçoit du trafic en utilisant curl ou en accédant à l'URL dans votre navigateur. Exemple : https://my-app-domain.

    Après les tests, vous devriez voir la réponse générée par le service Cloud Run. Par exemple, il peut s'agir d'une page HTML "Hello World" ou d'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 demande à l'équilibreur de charge 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 API Gateway pour vérifier que les requêtes atteignent les services appropriés.

Félicitations ! Vous avez réussi à configurer l'équilibrage de charge HTTP(S) pour API Gateway BÊTA.

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