Configurer Cloud CDN avec Cloud Run, Cloud Functions ou App Engine

Cette page explique comment créer un équilibreur de charge HTTP(S) externe afin d'acheminer les requêtes vers des backends sans serveur. Ici, le terme "sans serveur" fait référence aux produits d'informatique sans serveur suivants :

  • App Engine
  • Cloud Functions
  • Cloud Run

L'intégration de l'équilibrage de charge HTTP(S) à API Gateway permet à vos backends sans serveur de profiter de toutes les fonctionnalités fournies par Cloud Load Balancing. Pour en savoir plus, consultez la page Équilibrage de charge HTTP(S) pour API Gateway. Pour configurer l'équilibrage de charge HTTP(S) de manière à acheminer le trafic vers API Gateway, consultez la page Premiers pas avec l'équilibrage de charge HTTP(S) pour API Gateway. Cette fonctionnalité est en version Bêta.

Les NEG sans serveur vous permettent d'utiliser des applications sans serveur Google Cloud avec équilibrage de charge HTTP(S) externe. 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 d'application sans serveur.

Pour en savoir plus sur les NEG sans serveur, consultez la présentation des NEG sans serveur.

Avant de commencer

  1. Déployez un service App Engine, Cloud Functions ou Cloud Run.
  2. Si vous ne l'avez pas déjà fait, installez Google Cloud CLI.
  3. Configurez les autorisations.
  4. Ajoutez une ressource de certificat SSL.

Déployer un service App Engine, Cloud Functions ou Cloud Run

Pour les instructions fournies sur cette page, nous partons du principe que vous disposez déjà d'un service Cloud Run, Cloud Functions ou App Engine en cours d'exécution.

Dans l'exemple de cette page, nous utilisons le guide de démarrage rapide de Cloud Run pour Python afin de déployer un service Cloud Run dans la région us-central1. Enfin, le reste de la page vous explique comment configurer un équilibreur de charge HTTP(S) externe qui utilise un backend de NEG sans serveur pour acheminer les requêtes vers ce service.

Si vous n'avez pas encore déployé d'application sans serveur ou si vous souhaitez essayer un NEG sans serveur avec un exemple d'application, reportez-vous à l'un des guides de démarrage rapide mentionnés ci-après. Vous pouvez créer une application sans serveur dans n'importe quelle région, mais vous devrez utiliser la même région ultérieurement pour créer le NEG et l'équilibreur de charge sans serveur.

Cloud Run

Pour générer une application simple de type "Hello World", intégrez l'application dans une image de conteneur, puis déployez l'image sur Cloud Run. Consultez la page Démarrage rapide : Construire et déployer.

Si vous avez déjà importé un exemple de conteneur dans Container Registry, consultez la page Démarrage rapide : Déployer un exemple de conteneur prédéfini.

Cloud Functions

Consultez la page Cloud Functions : Démarrage rapide pour Python.

App Engine

Consultez les guides de démarrage rapide d'App Engine pour Python 3 suivants :

Installer Google Cloud CLI

Installez Google Cloud CLI. Pour obtenir plus d'informations conceptuelles sur l'outil gcloud 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.

Configurer les autorisations

Pour suivre ce guide, vous devez créer un NEG sans serveur et créer un équilibreur de charge HTTP(S) externe 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é

Réserver une adresse IP externe

Maintenant que vos services sont opérationnels, configurez une adresse IP externe statique globale que vos clients utiliseront pour accéder à votre équilibreur de charge.

Console

  1. Accédez à la page Adresses IP externes de Google Cloud Console.
    Accéder à la page "Adresses IP externes"
  2. Cliquez sur Réserver une adresse statique pour réserver une adresse IPv4.
  3. Attribuez un Nom à example-ip.
  4. Définissez le niveau réseau à la valeur Premium.
  5. Définissez Version IP sur IPv4.
  6. Définissez le Type sur Global.
  7. Cliquez sur Réserver.

gcloud

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

Notez l'adresse IPv4 réservée :

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

Créer une ressource de certificat SSL

Pour créer un équilibreur de charge HTTPS, 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. Pour en savoir plus, consultez la section Premiers pas avec 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 à l'étape précédente (example-ip). Pour obtenir des instructions détaillées, consultez la page Utiliser des certificats SSL 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 exemple, 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

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. Dans cet exemple, nous avons utilisé le guide de démarrage rapide de Cloud Run pour Python afin de déployer un service Cloud Run.

Architecture d'équilibrage de charge HTTPS externe pour une application Cloud Run
Architecture d'équilibrage de charge HTTPS externe pour une application Cloud Run (cliquez pour agrandir)

Étant donné que les vérifications d'état ne sont pas disponibles pour les services de backend avec des backends de NEG sans serveur, vous n'avez pas besoin de créer de règle de pare-feu autorisant les vérifications d'état si l'équilibreur de charge ne dispose que de backends de NEG 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. Dans la section Équilibrage de charge HTTP(S), cliquez sur Démarrer la configuration.
  3. Dans la section Web ou interne uniquement, sélectionnez D'Internet vers mes VM.
  4. Sous Global ou régional, sélectionnez Équilibreur de charge HTTP(S) global (classique).
  5. Cliquez sur Continuer.
  6. Pour le nom de l'équilibreur de charge, saisissez serverless-lb.
  7. Laissez la fenêtre ouverte pour continuer.

Configurer les services de backend

  1. Cliquez sur Backend configuration (Configuration du backend).
  2. Dans le menu déroulant Créer ou sélectionner un service de backend, maintenez le pointeur de la souris sur Services de backend, puis sélectionnez Créer un service de backend.
  3. 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, dans la fenêtre Nouveau backend, sélectionnez Créer un groupe de points de terminaison du réseau sans serveur.
  7. Saisissez un nom.
  8. Cliquez sur Create (Créer).
  9. Dans la fenêtre Nouveau backend, cliquez sur Terminé.
  10. Sélectionnez Activer Cloud CDN.
  11. (Facultatif) Modifiez les paramètres du mode cache et la valeur TTL.
  12. Cliquez sur Create (Créer).

Configurer des règles d'hôte et des outils de mise en correspondance des chemins

Les règles d'hôte et les outils de mise en correspondance des chemins sont les composants de configuration d'un mappage d'URL de l'équilibreur de charge HTTP(S) externe.

  1. Cliquez sur Host and path rules (Règles d'hôte et de chemin d'accès).
  2. Conservez les hôtes et les chemins d'accès par défaut. Pour cet exemple, toutes les requêtes sont transmises au service de backend créé à l'étape précédente.

Configurer l'interface

  1. Cliquez sur Configuration du frontend.
  2. Saisissez un nom.
  3. Pour créer un équilibreur de charge HTTPS, vous devez disposer d'un certificat SSL (gcloud compute ssl-certificates list).

    Nous vous recommandons d'utiliser un certificat géré par Google, comme décrit précédemment.

  4. Pour configurer un équilibreur de charge HTTP(S) externe, renseignez les champs comme suit.

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

    Valeur 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 example-ip
    Port 443
    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). Il est recommandé d'utiliser des certificats gérés par Google, car Google Cloud obtient, gère et renouvelle automatiquement ces certificats. Si vous ne détenez pas de domaine, vous pouvez utiliser un certificat SSL autosigné pour les tests.
    (Facultatif) Activer la redirection HTTP vers HTTPS Cochez cette case pour activer les redirections du port 80 vers le port 443.

    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.

  5. Cliquez sur OK.

Vérifier la configuration

  1. Cliquez sur Vérifier et finaliser.
  2. Examinez le backend, les règles d'hôte et de chemin d'accès, ainsi que l'interface.
  3. Cliquez sur Créer.
  4. 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. Elle est désignée par l'élément IP_ADDRESS.

gcloud

  1. Créez un NEG sans serveur pour votre application sans serveur.

    Pour plus d'options, consultez le guide de référence gcloud sur gcloud compute network-endpoint-groups create.

  2. Créez un service de backend.
       gcloud compute backend-services create BACKEND_SERVICE_NAME \
           --load-balancing-scheme=LOAD_BALANCING_SCHEME \
           --global \
           --enable-cdn \
           --cache-mode=CACHE_MODE \
           --custom-response-header='Cache-Status: {cdn_cache_status}' \
           --custom-response-header='Cache-ID: {cdn_cache_id}'
       

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

    • CACHE_All_STATIC (par défaut) : met automatiquement en cache le contenu statique.
    • USE_ORIGIN_HEADERS : 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 instructions private, no-store ou no-cache dans les en-têtes de réponse Cache-Control.

    Pour en savoir plus sur les instructions de cache acceptées par Cloud CDN et sur les éléments non mis en cache par ce service, consultez les sections Contenu pouvant être mis en cache et Contenu ne pouvant pas être mis en cache.

  3. Ajoutez le NEG sans serveur en tant que backend au service de backend :

       gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
           --global \
           --network-endpoint-group=SERVERLESS_NEG_NAME \
           --network-endpoint-group-region=us-central1
       
  4. 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_NAME
       

    Cet exemple de mappage d'URL ne cible qu'un 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. Si vous disposez de plusieurs services 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. Vous pouvez également configurer un outil 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.

  5. Pour créer un équilibreur de charge HTTPS, vous devez disposer d'une ressource de certificat SSL à utiliser dans le proxy HTTPS cible. 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, 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 auto-signé 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
       
  6. Créez un proxy HTTP(S) cible, qui va rediriger les requêtes vers votre mappage d'URL.

    Pour un équilibreur de charge HTTPS, créez un proxy cible HTTPS. Le 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
       
  7. Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy.

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

       gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
           --load-balancing-scheme=EXTERNAL \
           --network-tier=PREMIUM \
           --address=example-ip \
           --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, procédez comme suit :

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Si vous utilisez Google Domains, consultez la page d'aide Google Domains pour obtenir plus d'informations.

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.

  1. Accédez à la page "Équilibrage de charge" dans Google Cloud Console.
    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 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 helloworld.
    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 en savoir plus, consultez la section Vérifier l'état du certificat SSL géré par Google.
    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.
  5. Pour vérifier les réponses du cache, utilisez curl depuis la ligne de commande de votre machine locale. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge.

    curl -v -o/dev/null https://IP_ADDRESS
    

    Si vous utilisez un certificat géré par Google, testez le domaine pointant vers l'adresse IP de l'équilibreur de charge. Exemple :

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    Si vous utilisez un certificat autosigné, vous devez également spécifier l'option -k. L'option curl -k permet à curl de fonctionner si vous disposez d'un certificat autosigné. Vous ne devez utiliser le paramètre -k que pour tester votre propre site. Dans des circonstances normales, un certificat valide est une mesure de sécurité importante. Souvenez-vous que vous ne devez pas ignorer les avertissements relatifs aux certificats.

    Le résultat doit contenir les en-têtes personnalisés Cache-ID et Cache-Status que vous avez configurés pour indiquer si la réponse a été diffusée à partir du cache :

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    Le résultat contient les en-têtes de réponse qui indiquent un succès de cache (hit), ce qui signifie que l'élément statique de l'application sans serveur a été diffusé à l'utilisateur depuis un cache périphérique Cloud CDN.

    L'en-tête cache-status présente la valeur disabled pour les réponses qui ne sont pas mises en cache dans Cloud CDN. Pour les réponses mises en cache, la valeur de l'en-tête cache-status correspond à hit, miss ou revalidated.

Désactiver Cloud CDN

Console

Désactiver Cloud CDN pour un seul service de backend

  1. Dans Google Cloud Console, accédez à la page Cloud CDN.

    Accéder à Cloud CDN

  2. Sur le côté droit de la ligne concernant l'origine, cliquez sur Menu , puis sélectionnez Modifier.
  3. Décochez les cases des services de backend qui ne doivent plus utiliser Cloud CDN.
  4. Cliquez sur Mettre à jour.

Supprimer Cloud CDN pour tous les services de backend d'une origine

  1. Dans Cloud Console, accédez à la page Cloud CDN.

    Accéder à Cloud CDN

  2. Sur le côté droit de la ligne concernant l'origine, cliquez sur Menu , puis sélectionnez Supprimer.
  3. Cliquez sur Supprimer pour confirmer votre choix.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME 
--no-enable-cdn

La désactivation de Cloud CDN n'invalide pas et ne purge pas les caches. Si vous désactivez puis réactivez Cloud CDN, tout ou partie du contenu mis en cache peut rester en cache. Pour empêcher les caches d'utiliser un contenu, vous devez invalider ce contenu.

Étape suivante