Configurer un équilibreur de charge d'application externe mondial avec un backend externe

Ce guide s'appuie sur un exemple pour expliquer les principes fondamentaux de l'utilisation d'un backend externe (parfois appelé origine personnalisée) avec un équilibreur de charge d'application externe mondial. Un backend externe est un point de terminaison externe à Google Cloud. Lorsque vous utilisez un backend externe avec un équilibreur de charge d'application externe mondial, vous pouvez améliorer les performances en utilisant la mise en cache Cloud CDN.

Ce guide vous explique comment configurer un équilibreur de charge d'application externe mondial avec un service de backend équipé de Cloud CDN et agissant comme proxy pour les requêtes adressées à un serveur backend externe.

Avant de suivre ce guide, consultez la documentation de présentation des NEG Internet, y compris les limites.

Le schéma d'architecture suivant présente une interface d'équilibreur de charge d'application externe mondial avec un backend externe.

Un équilibreur de charge d'application externe mondial avec un backend externe
Figure 1. Un équilibreur de charge d'application externe mondial avec un backend externe (cliquez pour agrandir)

Autorisations

Pour suivre ce guide, vous devez créer un NEG Internet, puis créer ou modifier un équilibreur de charge d'application externe dans un projet. Vous devez être propriétaire ou éditeur du projet (roles/owner ou roles/editor) ou disposer des deux rôles IAM Compute Engine suivants.

Tâche Rôle requis
Créer et modifier des composants d'équilibreur de charge Administrateur de réseaux Compute
(roles/compute.networkAdmin)
Créer et modifier des NEG Administrateur d'instances Compute
(roles/compute.instanceAdmin)

Configurer votre environnement backend externe en dehors de Google Cloud

Pour configurer votre environnement, consultez les sections suivantes.

Configurer des points de terminaison du réseau

Configurez un point de terminaison du réseau pour exposer votre backend externe à Google Cloud. Assurez-vous que le point de terminaison (combinaison IP:Port, nom de domaine complet et port) est accessible sur Internet. Ce point de terminaison est référencé ultérieurement depuis le NEG Internet.

Pour connaître les exigences de configuration détaillées des points de terminaison NEG Internet, consultez la présentation des NEG Internet.

Autoriser le backend externe à recevoir du trafic provenant de Google Cloud

Pour permettre aux requêtes de Google Cloud d'atteindre votre backend externe, vous devez ajouter les plages d'adresses IP utilisées par Google pour envoyer des requêtes à des backends externes. Pour rechercher les adresses IP qui doivent être autorisées à envoyer du trafic vers vos backends externes, interrogez l'enregistrement TXT DNS _cloud-eoips.googleusercontent.com à l'aide d'un outil comme dig ou nslookup.

Exemples :

  • Exécutez la commande nslookup suivante :

    nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
    

    La sortie ressemble à ceci :

    Non-authoritative answer:
    _cloud-eoips.googleusercontent.com    text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
    

    Notez les plages CIDR qui suivent ip4: et assurez-vous qu'elles sont autorisées par les règles de pare-feu ou les listes de contrôle d'accès (LCA) au cloud configurées sur votre backend externe.

  • Exécutez la commande dig suivante :

    dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
    

    Le résultat contient deux plages d'adresses IP, comme suit :

    34.96.0.0/20
    34.127.192.0/18
    

Configurer votre environnement Google Cloud

Créez l'équilibreur de charge d'application externe mondial avec un backend de NEG Internet.

Réserver une adresse IP externe

Réservez une adresse IP externe statique globale que les clients utiliseront pour accéder à votre application.

Console

  1. Dans Google Cloud Console, accédez à la page Adresses IP externes.

    Accéder à la page "Adresses IP externes"

  2. Cliquez sur Réserver une adresse statique externe pour réserver une adresse IPv4.

  3. Saisissez un nom.

  4. Pour Niveau de service réseau, sélectionnez Premium.

  5. Pour Version IP, sélectionnez IPv4.

  6. Pour le champ Type, sélectionnez Global.

  7. Cliquez sur Réserver.

gcloud

gcloud compute addresses create LB_IP_ADDRESS_NAME \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Notez l'adresse IPv4 réservée :

gcloud compute addresses describe LB_IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

Configurer le NEG Internet

Console

  1. Dans la console Google Cloud, accédez à la page Groupes de points de terminaison du réseau.

    Accéder à la page Groupes de points de terminaison du réseau

  2. Cliquez sur Créer un groupe de points de terminaison du réseau.

  3. Saisissez un nom.

  4. Pour le type de groupe de points de terminaison du réseau, sélectionnez Groupe de points de terminaison du réseau Internet.

  5. Pour le port par défaut, saisissez 443.

  6. Pour le nouveau point de terminaison du réseau, sélectionnez Nom de domaine complet et port.

  7. Saisissez le nom de domaine complet.

  8. Pour le type de port, sélectionnez Par défaut et vérifiez que le numéro de port est 443.

  9. Cliquez sur Créer.

gcloud

  1. Créez un NEG Internet et définissez --network-endpoint-type sur internet-fqdn-port (le nom d'hôte et le port où votre backend externe peut être atteint) :

    gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type="internet-fqdn-port" \
        --global
    
  2. Ajoutez votre point de terminaison au NEG. Si aucun port n'est spécifié, le port est défini par défaut sur 80 (HTTP) ou 443 (HTTPS, HTTP/2) en fonction du protocole configuré dans le service de backend. Veillez à inclure l'option --global :

    gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \
        --global
    

Créer l'équilibreur de charge

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 mondial ou dans une seule région, sélectionnez Recommandé pour les charges de travail à l'échelle mondiale, puis cliquez sur Suivant.
  6. Pour Génération de l'équilibreur de charge, sélectionnez Équilibreur de charge d'application externe global, puis cliquez sur Suivant.
  7. Cliquez sur Configurer.

Configuration du frontend

  1. Cliquez sur Configuration de l'interface.
  2. Saisissez un nom.
  3. Pour créer un équilibreur de charge HTTPS, vous devez disposer d'un certificat SSL. Nous vous recommandons d'utiliser un certificat géré par Google.

    Vérifiez que les options suivantes sont configurées avec ces valeurs.

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTPS
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP Sélectionnez l'adresse IP créée à l'étape Réserver une adresse IP externe.
    Port 443
    Facultatif: délai d'expiration du message keepalive HTTP Saisissez une valeur de délai avant expiration comprise entre 5 et 1 200 secondes. La valeur par défaut est de 610 secondes.
    Certificat

    Sélectionnez un certificat SSL existant ou créez-en un.

    Pour créer un équilibreur de charge HTTPS, vous devez disposer d'une ressource de certificat SSL à utiliser dans le proxy HTTPS. 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é.

    Pour créer un certificat géré par Google, vous devez disposer d'un domaine. L'enregistrement A du domaine doit correspondre à l'adresse IP de l'équilibreur de charge (dans cet exemple, example-ip). Nous vous recommandons d'utiliser des certificats gérés par Google, car Google Cloud obtient et gère et renouvelle automatiquement ces certificats. Si ce n'est pas le cas, vous pouvez utiliser un certificat SSL autosigné pour les tests.

    Facultatif : Activer la redirection HTTP vers HTTPS

    Cochez cette case pour activer les redirections HTTP vers HTTPS.

    Cochez cette case pour créer un équilibreur de charge HTTP partiel supplémentaire qui utilise la même adresse IP que votre équilibreur de charge HTTPS et redirige les requêtes HTTP vers l'interface HTTPS de votre équilibreur de charge.

    Cette case ne peut être cochée que lorsque le protocole HTTPS est sélectionné et qu'une adresse IP réservée est utilisée.

    Si vous souhaitez tester ce processus sans configurer une ressource de certificat SSL (ou un domaine comme requis par les certificats gérés par Google), vous pouvez configurer un équilibreur de charge HTTP.

    Pour créer un équilibreur de charge HTTP, vérifiez que les options suivantes sont configurées avec ces valeurs :

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTP
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP Sélectionnez l'adresse IP créée à l'étape Réserver une adresse IP externe.
    Port 80
    Facultatif: délai d'expiration du message keepalive HTTP Saisissez une valeur de délai avant expiration comprise entre 5 et 1 200 secondes. La valeur par défaut est de 610 secondes.
  4. Cliquez sur OK.

Configuration du backend

  1. Cliquez sur Configuration du backend.
  2. Cliquez sur Services de backend et buckets backend.
  3. Cliquez sur Créer un service backend.
  4. Saisissez un nom.
  5. Pour le type de backend, sélectionnez Groupe de points de terminaison du réseau Internet.
  6. Pour le champ Protocole, sélectionnez le protocole que vous souhaitez utiliser depuis l'équilibreur de charge vers le NEG Internet. Pour cet exemple, sélectionnez HTTP/2.
  7. Pour les Backends, dans la fenêtre Nouveau backend, sélectionnez le NEG Internet créé à l'étape précédente.
  8. Cliquez sur Créer.

Vérifier et finaliser

  1. Cliquez sur Vérifier et finaliser.
  2. Si tout semble correct, cliquez sur Créer.

gcloud

  1. Créez un service de backend :
      gcloud compute backend-services create BACKEND_SERVICE \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      
  2. Ajoutez le NEG Internet au service de backend :
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --global-network-endpoint-group \
          --global
       
  3. Créez un mappage d'URL pour acheminer les requêtes entrantes vers le service de backend :
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. N'effectuez cette étape que si vous souhaitez créer un équilibreur de charge HTTPS. Cette opération n'est pas requise pour les équilibreurs de charge HTTP.

    Pour créer un équilibreur de charge HTTPS, vous devez disposer d'une ressource de certificat SSL à utiliser dans le proxy cible HTTPS. 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, car Google Cloud obtient, gère et renouvelle automatiquement ces certificats.

    Pour créer un certificat géré par Google, vous devez disposer d'un domaine. Si ce n'est pas le cas, vous pouvez utiliser un certificat SSL autogéré pour effectuer 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, qui va rediriger les requêtes vers votre mappage d'URL.

    Pour un équilibreur de charge HTTP, créez un proxy HTTP cible :

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

    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 \
          --global
      

    Remplacez les éléments suivants :

    • TARGET_HTTP_PROXY_NAME: nom du proxy HTTP cible.
    • TARGET_HTTPS_PROXY_NAME : nom du proxy HTTPS cible.
    • SSL_CERTIFICATE_NAME : nom du certificat SSL.
    • URL_MAP_NAME : nom du mappage d'URL.
    Facultatif : pour les équilibreurs de charge d'application externes globaux, vous pouvez définir un délai d'expiration du message keepalive HTTP du client à l'aide de l'option --http-keep-alive-timeout-sec. La valeur de ce délai doit être comprise entre 5 et 1 200 secondes. La valeur par défaut est de 610 secondes.
  6. Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy.

    Pour un équilibreur de charge HTTP, utilisez ce qui suit :

      gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=LB_IP_ADDRESS_NAME \
          --target-http-proxy=TARGET_HTTP_PROXY_NAME \
          --global \
          --ports=80
      

    Pour un équilibreur de charge HTTPS, utilisez ce qui suit :

      gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=LB_IP_ADDRESS_NAME \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
      

Connecter un domaine à votre équilibreur de charge

Une fois l'équilibreur de charge créé, notez l'adresse IP associée à celui-ci (par exemple, 30.90.80.100). Pour faire pointer votre domaine vers votre équilibreur de charge, créez un enregistrement A à l'aide de votre service d'enregistrement de domaine. Si vous avez ajouté plusieurs domaines à votre certificat SSL, vous devez ajouter un enregistrement A à chacun d'eux, tous pointant vers l'adresse IP de l'équilibreur de charge. Par exemple, pour créer des enregistrements A pour www.example.com et example.com, utilisez le code suivant :

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Si vous utilisez Cloud DNS comme fournisseur DNS, consultez la section Ajouter, modifier et supprimer des enregistrements.

Tester l'équilibreur de charge

Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP. Si vous avez configuré un domaine, vous pouvez également envoyer du trafic vers le nom de domaine. Toutefois, la propagation DNS peut prendre un certain temps. Vous pouvez donc commencer à utiliser l'adresse IP à des fins de test.

Console

  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. Envoyez du trafic vers l'équilibreur de charge.

    • Si vous avez créé un équilibreur de charge HTTP, vous pouvez le tester en accédant à http://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers l'application que vous exécutez sur le backend externe.

    • Si vous avez créé un équilibreur de charge HTTPS, vous pouvez le tester en accédant à https://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers l'application que vous exécutez sur le backend externe.

    Si cela ne fonctionne pas et que vous utilisez un certificat géré par Google, vérifiez que l'état de votre ressource de certificat est ACTIF. Pour plus d'informations, consultez la section État des ressources de certificat SSL géré par Google.

    Vous pouvez également utiliser curl depuis l'interface de ligne de commande de votre machine locale. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge. Si vous utilisez un certificat géré par Google, testez le domaine qui pointe vers l'adresse IP de l'équilibreur de charge. Exemple :

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

  5. Facultatif : Si vous utilisez un domaine personnalisé, vous devrez peut-être attendre la propagation des paramètres DNS mis à jour. Testez ensuite votre domaine dans le navigateur Web.

    Pour obtenir de l'aide concernant le dépannage, consultez la section Résoudre les problèmes liés aux backends externes et aux NEG Internet.

Configuration supplémentaire

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.

Enable Cloud CDN

Lorsque Cloud CDN est activé, l'équilibreur de charge d'application externe n'envoie des requêtes au backend NEG Internet qu'en cas de défaut de cache (miss) Cloud CDN.

Console

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

    Accédez à la page "Équilibrage de charge".

  2. Cliquez sur le nom de l'équilibreur de charge que vous souhaitez modifier.

  3. Cliquez sur Modifier ().

  4. Cliquez sur Configuration du backend.

  5. Pour le service de backend avec le backend NEG Internet, cliquez sur Modifier.

  6. Sélectionnez Activer Cloud CDN.

  7. (Facultatif) Modifiez les paramètres du mode cache et TTL.

  8. Cliquez sur Mettre à jour.

  9. Pour vérifier vos modifications, cliquez sur Vérification et finalisation, puis sur Mettre à jour.

gcloud

  • Pour activer Cloud CDN sur le service de backend, exécutez la commande suivante :
      gcloud compute backend-services update BACKEND_SERVICE \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global \
          --enable-cdn \
          --cache-mode=CACHE_MODE
      

    Définissez le mode cache en remplaçant CACHE_MODE par l'un des éléments suivants :

    • CACHE_All_STATIC : met automatiquement en cache le contenu statique.
    • USE_ORIGIN_HEADERS (par défaut) : exige que l'origine définisse des en-têtes de mise en cache valides pour mettre en cache le contenu.
    • FORCE_CACHE_ALL : met en cache tout le contenu, en ignorant les directives private, no-store ou no-cache dans les en-têtes de réponse Cache-Control.

Utiliser un en-tête personnalisé pour authentifier les requêtes

Pour authentifier les requêtes envoyées à votre backend externe, vous pouvez définir un en-tête personnalisé pour indiquer qu'elles proviennent d'un équilibreur de charge Google Cloud. Par exemple, vous pouvez configurer le backend externe pour qu'il attende une valeur particulière pour l'en-tête Host de la requête HTTP. Vous pouvez également configurer le service de backend pour définir l'en-tête Host sur cette valeur attendue.

Procédez comme suit pour configurer le service de backend afin d'ajouter un en-tête Host personnalisé à chaque requête.

Console

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

    Accédez à la page "Équilibrage de charge".

  2. Cliquez sur le nom de l'équilibreur de charge que vous souhaitez modifier.

  3. Cliquez sur Modifier ().

  4. Cliquez sur Configuration du backend.

  5. Pour le service de backend avec le backend NEG Internet, cliquez sur Modifier.

  6. Cliquez sur Configurations avancées.

  7. Pour En-têtes de requêtes personnalisés, cliquez sur Ajouter un en-tête.

    1. Dans le champ Nom de l'en-tête, saisissez Host.
    2. Dans le champ Valeur d'en-tête, saisissez FQDN_NEG_ENDPOINT.
  8. Cliquez sur Mettre à jour.

  9. Pour vérifier vos modifications, cliquez sur Vérification et finalisation, puis sur Mettre à jour.

gcloud

  • Exécutez la commande suivante pour configurer le service de backend afin d'ajouter un en-tête `Host` personnalisé à chaque requête.
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      

Assurez-vous également que vous avez configuré le backend externe pour qu'il attende un en-tête Host afin qu'il puisse authentifier les requêtes entrantes.

Pour obtenir des informations générales sur les en-têtes de requête personnalisés, consultez la page Configurer des en-têtes de requête personnalisés. Pour connaître les autres méthodes d'authentification, consultez la page Authentifier les requêtes sur le backend externe.

Activer IAP sur l'équilibreur de charge d'application externe

Remarque : IAP n'est pas compatible avec Cloud CDN.

Vous pouvez configurer IAP pour l'activer ou le désactiver (par défaut). Si cette option est activée, vous devez fournir des valeurs pour oauth2-client-id et oauth2-client-secret.

Pour activer IAP, mettez à jour le service de backend afin d'inclure l'indicateur --iap=enabled avec oauth2-client-id et oauth2-client-secret.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

Vous pouvez également activer l'IAP pour une ressource Compute Engine à l'aide de la console Google Cloud, de la gcloud CLI ou de l'API.

Mettre à jour le délai d'expiration du message keepalive HTTP client

L'équilibreur de charge créé lors des étapes précédentes a été configuré avec une valeur par défaut pour le délai d'expiration du message keepalive HTTP du client.

Pour mettre à jour le délai d'expiration du message HTTP du client, suivez les instructions ci-dessous.

Console

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

    Accédez à la page "Équilibrage de charge".

  2. Cliquez sur le nom de l'équilibreur de charge que vous souhaitez modifier.
  3. Cliquez sur Modifier ().
  4. Cliquez sur Configuration de l'interface.
  5. Développez Fonctionnalités avancées. Dans le champ Délai avant expiration du message keepalive HTTP, saisissez une valeur de délai avant expiration.
  6. Cliquez sur Mettre à jour.
  7. Pour vérifier vos modifications, cliquez sur Vérification et finalisation, puis sur Mettre à jour.

gcloud

Pour un équilibreur de charge HTTP, mettez à jour le proxy HTTP cible à l'aide de la commande gcloud compute target-http-proxies update :

    gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

Pour un équilibreur de charge HTTPS, mettez à jour le proxy HTTPS cible à l'aide de la commande gcloud compute target-https-proxies update :

    gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

Remplacez les éléments suivants :

  • TARGET_HTTP_PROXY_NAME: nom du proxy HTTP cible.
  • TARGET_HTTPS_PROXY_NAME : nom du proxy HTTPS cible.
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: valeur du délai avant expiration du message keepalive HTTP comprise entre 5 et 600 secondes.

Étape suivante