Premiers pas avec l'équilibrage de charge pour API Gateway
Ce tutoriel 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 les mêmes étapes que celles utilisées pour configurer l'intégration de l'é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, utiliser un équilibreur de charge d'application externe global avec API Gateway vous permet de:
- Utilisez des domaines personnalisés.
- Utilisez Google Cloud Armor comme service de sécurité réseau.
- Gérer un équilibrage de charge efficace sur les passerelles de plusieurs emplacements.
- Implémenter une gestion avancée du trafic.
Avant de commencer
Si ce n'est pas déjà fait, téléchargez et installez Google Cloud CLI.
Mettez à jour les composants
gcloud
:gcloud components update
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.
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 les requêtes 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 de la passerelle API 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 mondial 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, vous devez ajouter une ressource de certificat SSL au frontal 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éée à une étape ultérieure. Pour obtenir des instructions détaillées, consultez la section 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 d'application externe global
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:
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
Créez un service de backend pour définir la façon dont l'équilibreur de charge d'application externe global distribue 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é dans la figure suivante:
Pour créer un service de backend, exécutez la commande suivante :
gcloud compute backend-services create BACKEND_SERVICE_NAME --global
où 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
Créez un mappage d'URL pour acheminer les requêtes entrantes vers le service de backend, comme illustré à la figure ci-dessous :
Pour créer le mappage d'URL, exécutez la commande suivante, où :
- URL_MAP_NAME correspond au 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 acheminer 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.
Créez un certificat SSL pour votre proxy cible, comme illustré dans la figure ci-dessous :
Pour créer un équilibreur de charge d'application externe global, 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
Créez un proxy HTTP(S) cible pour acheminer les requêtes vers votre mappage d'URL, comme illustré dans la figure ci-dessous :
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).Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy, comme illustré dans la figure suivante:
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'il pointe vers la nouvelle adresse IP de votre service. Elle est également obligatoire si vous avez créé un équilibreur de charge d'application externe global avec un certificat géré par Google (qui requiert un domaine). Il est recommandé d'allouer et d'utiliser une adresse IP statique lorsque vous utilisez le DNS. Les instructions spécifiques à cette étape dépendent de votre fournisseur DNS.
Pour envoyer du trafic à l'équilibreur de charge, l'enregistrement DNS de votre domaine (dans ce tutoriel, "mon-domaine-d'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
Mettez à jour l'enregistrement DNS A ou AAAA de votre domaine pour qu'il pointe vers l'adresse IP de l'équilibreur de charge afin que le trafic envoyé vers l'URL de domaine personnalisé existant soit acheminé via l'équilibreur de charge. La propagation de cette modification au serveur DNS peut prendre aussi peu que quelques secondes ou plusieurs heures.
Vérifiez que votre passerelle reçoit du trafic à l'aide de
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'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 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 réussi à configurer l'équilibreur de charge d'application externe global 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 :
Supprimer les règles de transfert :
gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
Supprimer les adresses IP externes globales :
gcloud compute addresses delete IP_ADDRESSES --global
Supprimer le proxy cible :
gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
Supprimer le mappage d'URL :
gcloud compute url-maps delete URL_MAP_NAME
Supprimer les services de backend :
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
(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