Configurer un équilibreur de charge d'application externe régional avec Cloud Run

Cette page vous explique comment déployer un équilibreur de charge d'application externe régional avec un backend Cloud Run. Pour ce faire, vous devez utiliser un backend de NEG sans serveur pour l'équilibreur de charge.

Avant de suivre cette procédure, assurez-vous de connaître les sujets suivants :

Les NEG sans serveur vous permettent d'utiliser les services Cloud Run avec votre équilibreur de charge. Une fois que vous avez configuré un équilibreur de charge avec le backend du NEG sans serveur, les requêtes envoyées à l'équilibreur de charge sont acheminées vers le backend Cloud Run.

Avant de commencer

  1. Installez Google Cloud CLI.
  2. Déployez un service Cloud Run
  3. Configurez les autorisations.

Installez le SDK Google Cloud

Installez l'outil Google Cloud CLI. Pour obtenir plus d'informations conceptuelles sur l'outil ainsi que des instructions d'installation, consultez la présentation de gcloud.

Si vous n'avez pas encore utilisé gcloud CLI, commencez par exécuter la commande gcloud init pour initialiser votre répertoire gcloud.

Remarque : Vous ne pouvez pas utiliser la console Google Cloud pour configurer un équilibreur de charge externe régional avec un backend de NEG sans serveur.

Déployer un service Cloud Run

Dans les instructions de cette page, nous partons du principe que vous disposez déjà d'un service Cloud Run.

Pour l'exemple de cette page, vous pouvez utiliser l'un des guides de démarrage rapide de Cloud Run pour déployer un service Cloud Run.

Le NEG sans serveur et l'équilibreur de charge doivent se trouver dans la même région que le service Cloud Run. Vous pouvez bloquer les requêtes externes envoyées directement aux URL par défaut du service Cloud Run en limitant l'entrée à internal and cloud load balancing. Exemple :

gcloud run deploy CLOUD_RUN_SERVICE_NAME \
  --platform=managed \
  --allow-unauthenticated \
  --ingress=internal-and-cloud-load-balancing \
  --region=REGION \
  --image=IMAGE_URL

Notez le nom du service que vous créez. Enfin, le reste de la page vous explique comment configurer un équilibreur de charge qui dirige les requêtes vers ce service.

Configurer les autorisations

Pour suivre ce guide, vous devez créer un NEG sans serveur et créer un équilibreur de charge dans un projet. Vous devez être propriétaire ou éditeur du projet, ou disposer des 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é

Configurer le réseau et les sous-réseaux

Pour configurer le réseau et ses sous-réseaux, vous devez effectuer les tâches suivantes :

  • Créez un réseau et un sous-réseau VPC :
  • Créer un sous-réseau proxy réservé

Créer le réseau VPC

Créez un réseau VPC en mode personnalisé, puis les sous-réseaux que vous souhaitez dans une région.

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Cliquez sur Créer un réseau VPC.

  3. Dans le champ Nom, saisissez lb-network.

  4. Dans le champ Mode de création de sous-réseau, sélectionnez Personnalisé.

  5. Dans la section Nouveau sous-réseau, spécifiez les paramètres de configuration de sous-réseau suivants :

    1. Dans le champ Nom, saisissez lb-subnet.
    2. Sélectionnez une Région.
    3. Dans Plage d'adresses IP, saisissez 10.1.2.0/24.
    4. Cliquez sur OK.
  6. Cliquez sur Créer.

gcloud

  1. Créez le réseau VPC personnalisé à l'aide de la commande gcloud compute networks create :

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Créez un sous-réseau dans le réseau lb-network. Cet exemple utilise une plage d'adresses IP 10.1.2.0/24 pour le sous-réseau. Vous pouvez configurer n'importe quelle plage de sous-réseau valide.

    gcloud compute networks subnets create lb-subnet \
    --network=lb-network \
    --range=10.1.2.0/24 \
    --region=REGION
    

Créer un sous-réseau proxy réservé

Créez un sous-réseau proxy réservé pour tous les équilibreurs de charge régionaux basés sur Envoy dans une région spécifique du réseau lb-network.

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Cliquez sur le nom du réseau VPC partagé auquel vous souhaitez ajouter un sous-réseau proxy réservé.

  3. Cliquez sur Ajouter un sous-réseau.

  4. Dans le champ Nom, saisissez proxy-only-subnet.

  5. Sélectionnez une Région.

  6. Définissez le champ Objectif sur Proxy géré régional.

  7. Saisissez une plage d'adresses IP comme 10.129.0.0/23.

  8. Cliquez sur Ajouter.

gcloud

  1. Créez le sous-réseau proxy réservé à l'aide de la commande gcloud compute networks subnets create.

    Cet exemple utilise une plage d'adresses IP de 10.129.0.0/23 pour le sous-réseau proxy réservé. Vous pouvez configurer n'importe quelle plage de sous-réseau valide.

    gcloud compute networks subnets create proxy-only-subnet \
     --purpose=REGIONAL_MANAGED_PROXY \
     --role=ACTIVE \
     --region=REGION \
     --network=lb-network \
     --range=10.129.0.0/23
    

Créer l'équilibreur de charge

Dans le schéma suivant, l'équilibreur de charge utilise un backend de NEG sans serveur pour envoyer les requêtes vers un service Cloud Run sans serveur.

Architecture d'équilibrage de charge HTTP(S) externe régional pour une application Cloud Run.
Architecture d'équilibrage de charge HTTP(S) externe régional pour une application Cloud Run

Le trafic provenant de l'équilibreur de charge vers les backends NEG sans serveur utilise des routes spéciales définies en dehors de votre VPC, qui ne sont pas soumises à des règles de pare-feu. Par conséquent, si votre équilibreur de charge ne dispose que de backends de NEG sans serveur, vous n'avez pas besoin de créer de règles de pare-feu pour autoriser le trafic provenant du sous-réseau proxy réservé vers le backend sans serveur.

Console

Démarrer la configuration

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur Créer un équilibreur de charge.
  3. Dans le champ Type d'équilibreur de charge, sélectionnez Équilibreur de charge d'application (HTTP/HTTPS), puis cliquez sur Suivant.
  4. Pour Public ou interne, sélectionnez Public (externe), puis cliquez sur Suivant.
  5. Pour Déploiement global ou dans une seule région, sélectionnez Recommandé pour les charges de travail régionales, puis cliquez sur Suivant.
  6. Cliquez sur Configurer.

Configuration de base

  1. Pour le nom de l'équilibreur de charge, saisissez serverless-lb.
  2. Sélectionnez le réseau comme lb_network.
  3. Laissez la fenêtre ouverte pour continuer.

Configurer l'interface

  1. Avant de continuer, assurez-vous de disposer d'un certificat SSL.
  2. Cliquez sur Configuration du frontend.
  3. Saisissez un nom.
  4. Pour configurer un équilibreur de charge d'application externe régional, renseignez les champs comme suit.
    1. Dans la section Protocole, sélectionnez HTTPS.
    2. Sous Version IP, sélectionnez IPv4.
    3. Sous Adresse IP, sélectionnez Éphémère.
    4. Sous Port, sélectionnez 443.
    5. Sous Certificat, sélectionnez un certificat SSL existant ou créez-en un.

      L'exemple suivant montre comment créer des certificats SSL Compute Engine :

    6. Cliquez sur Créer un certificat.
      1. Dans le champ Nom, saisissez un nom.
      2. Dans les champs appropriés, importez vos fichiers au format PEM :
        • Certificat
        • Clé privée
      3. Cliquez sur Créer.

    Si vous souhaitez tester ce processus sans configurer une ressource de certificat SSL, vous pouvez configurer un équilibreur de charge HTTP.

  5. Facultatif : pour créer un équilibreur de charge HTTP, procédez comme suit :
    1. Sous Protocole, sélectionnez HTTP.
    2. Sous Version IP, sélectionnez IPv4.
    3. Sous Adresse IP, sélectionnez Éphémère.
    4. Sous Port, sélectionnez 80.
  6. Cliquez sur OK.

Configurer les services de backend

  1. Cliquez sur Configuration du backend.
  2. Dans le menu déroulant Créer ou sélectionner des services de backend, maintenez le pointeur de la souris sur Services de backend, puis sélectionnez Créer un service de backend.
  3. Dans la fenêtre Créer un service de backend, saisissez un Nom.
  4. Sous Type de backend, sélectionnez Groupe de points de terminaison du réseau sans serveur.
  5. Laissez le paramètre Protocole inchangé. Ce paramètre est ignoré.
  6. Sous Backends > Nouveau backend, sélectionnez Créer un groupe de points de terminaison du réseau sans serveur.
    1. Dans la fenêtre Créer un groupe de points de terminaison du réseau sans serveur, saisissez un Nom.
    2. Sous Région, la région de l'équilibreur de charge s'affiche.
    3. Dans le champ Type de groupe de points de terminaison du réseau sans serveur, sélectionnez Cloud Run. Cloud Run est le seul type compatible.
    4. Cliquez sur Sélectionner un nom de service.
    5. Dans la liste déroulante Service, sélectionnez le service Cloud Run pour lequel vous souhaitez créer un équilibreur de charge.
    6. Cliquez sur OK.
    7. Cliquez sur Create (Créer).
  7. Dans la fenêtre Créer un service de backend, cliquez sur Créer.

Configurer des règles de routage

Les règles de routage déterminent la manière dont le trafic est dirigé. Vous pouvez diriger le trafic vers un service de backend ou un service Kubernetes. Tout trafic ne correspondant pas explicitement à un outil de mise en correspondance des hôtes et des chemins d'accès est envoyé au service par défaut.

  1. Cliquez sur Règle d'hôte et de chemin d'accès simple.
  2. Sélectionnez un service de backend dans la liste déroulante Backend.

Vérifier la configuration

  1. Cliquez sur Vérifier et finaliser.
  2. Examinez les valeurs définies pour Backend, Règles d'hôte et de chemin d'accès et Interface.
  3. Facultatif : cliquez sur Code équivalent pour afficher la requête API REST qui sera utilisée pour créer l'équilibreur de charge.
  4. Cliquez sur Créer. Attendez jusqu'à ce que l'équilibreur de charge soit créé.
  5. Cliquez sur le nom de l'équilibreur de charge (serverless-lb).
  6. Notez l'adresse IP de l'équilibreur de charge pour la prochaine tâche.

gcloud

  1. Réservez une adresse IP externe statique pour l'équilibreur de charge.
        gcloud compute addresses create IP_ADDRESS_NAME  \
            --region=REGION \
            --network-tier=STANDARD
        
  2. Créez un NEG sans serveur pour votre service Cloud Run :
        gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
            --region=REGION \
            --network-endpoint-type=serverless  \
            --cloud-run-service=CLOUD_RUN_SERVICE_NAME
        
  3. Créez un service de backend régional. Définissez --protocol sur HTTP. Ce paramètre est ignoré, mais il est obligatoire. Sinon, --protocol est défini sur TCP par défaut.
        gcloud compute backend-services create BACKEND_SERVICE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --protocol=HTTP \
            --region=REGION
        
  4. Ajoutez le NEG sans serveur en tant que backend au service de backend :
        gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
            --region=REGION \
            --network-endpoint-group=SERVERLESS_NEG_NAME \
            --network-endpoint-group-region=REGION
        
  5. Créez un mappage d'URL régional pour acheminer les requêtes entrantes vers le service de backend :
        gcloud compute url-maps create URL_MAP_NAME \
            --default-service=BACKEND_SERVICE_NAME \
            --region=REGION
        
    Cet exemple de mappage d'URL ne cible qu'un seul service de backend représentant une seule application sans serveur. Vous n'avez donc pas besoin de configurer de règles d'hôte ni de mises en correspondance des chemins d'accès.
  6. Facultatif : effectuez cette étape si vous utilisez HTTPS entre le client et l'équilibreur de charge. Cette opération n'est pas requise pour les équilibreurs de charge HTTP.

    Vous pouvez créer des certificats Compute Engine ou via le gestionnaire de certificats. Utilisez l'une des méthodes suivantes pour créer des certificats à l'aide du gestionnaire de certificats :

    • Certificats régionaux autogérés Pour en savoir plus sur la création et l'utilisation de certificats autogérés régionaux, consultez la page Déployer un certificat autogéré régional. Les mappages de certificats ne sont pas acceptés.

    • Certificats régionaux gérés par Google. Les mappages de certificats ne sont pas acceptés.

      Les types de certificats régionaux gérés par Google suivants sont compatibles avec le gestionnaire de certificats :

    • Après avoir créé des certificats, associez-les directement au proxy cible.

      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 \
              --region=REGION
          
    • Créez un proxy cible régional pour acheminer les requêtes vers le mappage d'URL.

      Pour un équilibreur de charge HTTP, créez un proxy cible HTTP :
          gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
      Pour un équilibreur de charge HTTPS, créez un proxy cible HTTPS. Le serveur proxy est la partie de l'équilibreur de charge qui contient le certificat SSL pour l'équilibrage de charge HTTPS. Vous chargez donc également votre certificat à cette étape :
          gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
              --ssl-certificates=SSL_CERTIFICATE_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
    • Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy. Pour un équilibreur de charge HTTP :
          gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
              --load-balancing-scheme=EXTERNAL_MANAGED \
              --network-tier=STANDARD \
              --network=lb-network \
              --address=IP_ADDRESS_NAME \
              --target-http-proxy=TARGET_HTTP_PROXY_NAME \
              --target-http-proxy-region=REGION \
              --region=REGION \
              --ports=80
          
      Pour un équilibreur de charge HTTPS :
          gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
              --load-balancing-scheme=EXTERNAL_MANAGED \
              --network-tier=STANDARD \
              --network=lb-network \
              --address=IP_ADDRESS_NAME \
              --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
              --target-https-proxy-region=REGION \
              --region=REGION \
              --ports=443
          

Tester l'équilibreur de charge

Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP.

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur l'équilibreur de charge que vous venez de créer.

  3. Notez l'adresse IP de l'équilibreur de charge.

  4. S'il s'agit d'un équilibreur de charge HTTP, vous pouvez le tester à l'aide d'un navigateur Web en accédant à http://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du service Cloud Run.

  5. S'il s'agit d'un équilibreur de charge HTTPS, vous pouvez le tester à l'aide d'un navigateur Web en accédant à https://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du service Cloud Run.
    Si vous avez utilisé un certificat autosigné pour les tests, votre navigateur affiche un avertissement. Vous devez explicitement lui indiquer d'accepter un certificat autosigné. Cliquez sur l'avertissement pour afficher la page.

Options de configuration supplémentaires

Cette section développe l'exemple de configuration et propose d'autres options de configuration. Toutes les tâches décrites ici sont facultatives. Vous pouvez les exécuter dans n'importe quel ordre.

Utiliser un masque d'URL

Lorsque vous créez un NEG sans serveur, au lieu de sélectionner un service Cloud Run spécifique, vous pouvez utiliser un masque d'URL qui pointe vers plusieurs services diffusés sur le même domaine. Un masque d'URL est un modèle de votre schéma d'URL. Le NEG sans serveur utilise ce modèle pour extraire le nom du service de l'URL de la requête entrante et mapper la requête au service approprié.

Les masques d'URL sont utiles si votre service est mappé sur un domaine personnalisé plutôt que sur l'adresse par défaut que Google Cloud fournit au service déployé. Un masque d'URL vous permet de cibler plusieurs services et versions avec une seule règle, même lorsque votre application utilise un format d'URL personnalisé.

Si vous ne l'avez pas déjà fait, consultez la section Masques d'URL de la présentation des NEG sans serveur.

Créer un masque d'URL

Pour créer un masque d'URL pour votre équilibreur de charge, commencez par l'URL de votre service. Cet exemple utilise un exemple d'application sans serveur s'exécutant sur https://example.com/login. Il s'agit de l'URL où le service login de l'application est diffusé.

  1. Supprimez http ou https de l'URL pour ne garder que example.com/login.
  2. Remplacez le nom du service par un espace réservé pour le masque d'URL.
    • Cloud Run : remplacez le nom du service Cloud Run par l'espace réservé <service>. Si le service Cloud Run est associé à un tag, remplacez celui-ci par l'espace réservé <tag>. Dans cet exemple, le masque d'URL final est example.com/<service>.
  3. Facultatif : Si le nom du service peut être extrait de la partie du chemin d'accès de l'URL, le domaine peut être omis. La partie du chemin d'accès du masque d'URL se distingue par le premier caractère de barre oblique (/). Si le caractère de barre oblique (/) est absent du masque d'URL, le masque est considéré comme représentant uniquement l'hôte. Par conséquent, dans cet exemple, le masque d'URL peut être réduit à /<service>.

    De même, si <service> peut être extrait de la partie hôte de l'URL, vous pouvez omettre complètement le chemin d'accès du masque d'URL.

    Vous pouvez également omettre les composants d'hôte ou de sous-domaine qui précèdent le premier espace réservé, ainsi que les composants de chemin d'accès qui suivent le dernier espace réservé. Dans ce cas, l'espace réservé capture les informations requises pour le composant.

Voici quelques exemples supplémentaires illustrant ces règles :

Ce tableau part du principe que vous disposez d'un domaine personnalisé appelé example.com et que tous vos services Cloud Run sont mappés sur ce domaine.

Service, nom du tag URL du domaine personnalisé Cloud Run Masque d'URL
service : login https://login-home.example.com/web <service>-home.example.com
service : login https://example.com/login/web example.com/<service> ou /<service>
service : login, tag : test https://test.login.example.com/web <tag>.<service>.example.com
service : login, tag : test https://example.com/home/login/test example.com/home/<service>/<tag> ou /home/<service>/<tag>
service : login, tag : test https://test.example.com/home/login/web <tag>.example.com/home/<service>

Créer un NEG sans serveur avec un masque d'URL

Console

Pour un nouvel équilibreur de charge, vous pouvez utiliser le même processus de bout en bout que celui décrit précédemment dans ce document. Au lieu de sélectionner un service spécifique lors de la configuration du service de backend, saisissez un masque d'URL.

Si vous disposez déjà d'un équilibreur de charge, vous pouvez modifier la configuration du backend et faire en sorte que le NEG sans serveur pointe vers un masque d'URL au lieu d'un service spécifique.

Pour ajouter un NEG sans serveur basé sur un masque d'URL à un service de backend existant, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.
    Accéder à la page "Équilibrage de charge"
  2. Cliquez sur le nom de l'équilibreur de charge contenant le service de backend que vous souhaitez modifier.
  3. Sur la page Détails de l'équilibreur de charge, cliquez sur Modifier .
  4. Sur la page Modifier l'équilibreur de charge d'application externe global, cliquez sur Configuration du backend.
  5. Sur la page Configuration du backend, cliquez sur le bouton Modifier correspondant au service de backend que vous souhaitez modifier.
  6. Cliquez sur Ajouter un backend.
  7. Sélectionnez Créer un groupe de points de terminaison du réseau sans serveur.
    1. Dans le champ Nom, saisissez helloworld-serverless-neg.
    2. Sous Région, la région de l'équilibreur de charge s'affiche.
    3. Sous Type de groupe de points de terminaison du réseau sans serveur, Cloud Run est le seul type de groupe de points de terminaison du réseau compatible.
      1. Sélectionnez Utiliser un masque d'URL.
      2. Saisissez un masque d'URL. Pour en savoir plus sur la création d'un masque d'URL, consultez la section sur la création de masque d'URL.
      3. Cliquez sur Créer.

  8. Dans la section Nouveau backend, cliquez sur Terminé.
  9. Cliquez sur Update (Mettre à jour).

gcloud

Pour créer un NEG sans serveur avec un exemple de masque d'URL example.com/<service>, exécutez la commande suivante :

gcloud compute network-endpoint-groups create SERVERLESS_NEG_MASK_NAME \
    --region=REGION \
    --network-endpoint-type=serverless \
    --cloud-run-url-mask="example.com/<service>"

Supprimer un NEG sans serveur

Il n'est pas possible de supprimer un groupe de points de terminaison du réseau s'il est associé à un service de backend. Avant de supprimer un NEG, assurez-vous qu'il est dissocié du service de backend.

Console

  1. Pour vous assurer que le NEG sans serveur que vous souhaitez supprimer n'est actuellement utilisé par aucun service de backend, accédez à l'onglet Services de backend de la page Composants de l'équilibrage de charge.
    Accéder à la page "Services de backend"
  2. Si le NEG sans serveur est actuellement utilisé, procédez comme suit :
    1. Cliquez sur le nom du service de backend qui utilise le NEG sans serveur.
    2. Cliquez sur Modifier ().
    3. Dans la liste des Backends, cliquez sur pour supprimer le backend NEG sans serveur du service de backend.
    4. Cliquez sur Enregistrer.

  3. Accédez à la page Groupe de points de terminaison du réseau dans Google Cloud Console.
    Accéder au groupe de points de terminaison du réseau
  4. Cochez la case correspondant au NEG sans serveur que vous souhaitez supprimer.
  5. Cliquez sur Supprimer.
  6. Cliquez à nouveau sur Supprimer pour confirmer votre choix.

gcloud

Pour supprimer un NEG sans serveur d'un service de backend, vous devez spécifier la région dans laquelle le NEG a été créé.

gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=SERVERLESS_NEG_NAME \
    --network-endpoint-group-region=REGION \
    --region=REGION

Pour supprimer le NEG sans serveur, exécutez la commande suivante :

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

Étape suivante