Configurer une extension en périphérie

Les extensions de service permettent aux équilibreurs de charge d'application compatibles d'utiliser des plug-ins pour insérer un traitement personnalisé dans le chemin de traitement. Les extensions en périphérie s'exécutent dans le chemin de traitement des requêtes lorsque l'équilibreur de charge reçoit des en-têtes de requêtes et avant qu'il n'évalue le mappage d'URL ou n'appelle Cloud CDN, ce qui vous permet d'influencer la mise en cache et le routage. Cette page explique comment configurer des extensions en périphérie.

Pour obtenir une présentation des extensions d'équilibreur de charge d'application, consultez la page Présentation des extensions Cloud Load Balancing.

Une extension pour un équilibreur de charge d'application pointe vers les ressources suivantes :

  • Une règle de transfert à associer
  • Un plug-in

L'extension fait référence à la règle de transfert de l'équilibreur de charge à associer. Une fois la ressource configurée, l'équilibreur de charge commence à envoyer les requêtes correspondantes aux services d'extension. Vous ne pouvez associer qu'une seule extension en périphérie à une règle de transfert et n'inclure qu'un seul plug-in dans une chaîne d'extension en périphérie.

Pour en savoir plus sur les limites liées aux extensions d'équilibreur de charge d'application, consultez la page Quotas et limites.

Configurer à l'aide de plug-ins

Cette section utilise un exemple pour vous montrer comment configurer une extension en périphérie à l'aide d'un plug-in qui réécrit l'en-tête de requête :host en service-extensions.com lorsque le chemin correspond à /extensions. L'hôte précédent et le nouvel hôte configuré sont mappés à des services de backend dans différentes régions, ce qui illustre le comportement de routage.

Toutes les ressources d'extension qui font référence à un plug-in donné doivent être du même type. Les extensions doivent également avoir le même schéma d'équilibrage de charge. Vous ne pouvez pas configurer les extensions Cloud Load Balancing avec des plug-ins déjà utilisés dans les extensions Media CDN.

Avant de commencer

  1. Créez un plug-in contenant votre code personnalisé.

  2. Créez et configurez un équilibreur de charge d'application compatible avec les plug-ins d'extension en périphérie.

    Suivez les instructions de la page Configurer un équilibreur de charge d'application externe global avec des backends de groupe d'instances de VM pour toutes les étapes, à l'exception des suivantes :

    • Nommez le service de backend service-one.
    • Faites pointer service-one vers une instance de machine virtuelle (VM) dans la région A.
    • Faites pointer gl7-gxlb-url-map vers service-one par défaut.
  3. Configurez un service de backend supplémentaire, service-two, et faites-le pointer vers une VM dans la région B.

  4. Ajoutez au mappage d'URL un outil de mise en correspondance des chemins d'accès pointant vers service-two. Utilisez la gcloud compute url-maps add-path-matcher commande avec les exemples de valeurs suivants :

    gcloud compute url-maps add-path-matcher gl7-gxlb-url-map \
        --path-matcher-name=rewrite-host \
        --default-service=service-two \
        --new-hosts=service-extensions.com \
        --location=global
    
  5. Configurez un moyen d'envoyer des requêtes de test à votre service (par exemple, en exécutant curl).

Configurer une extension en périphérie à l'aide d'un plug-in

  1. Vérifiez le comportement avant de configurer une extension.

    1. Vérifiez qu'une requête sans chemin explicite est envoyée à la région A :

      curl FORWARDING_RULE_IP
      

      Remplacez FORWARDING_RULE_IP par l'adresse IP de la règle de transfert. Pour trouver l'adresse IP, utilisez la gcloud compute forwarding-rules describe commande.

      Le résultat ressemble à ce qui suit et indique que la page est diffusée à partir d'une VM dans region A :

      Page served from region-A-vm
      
    2. Vérifiez qu'il n'y a aucune correspondance pour /extensions dans le mappage d'URL :

      curl FORWARDING_RULE_IP/extensions
      

      Remplacez FORWARDING_RULE_IP par l'adresse IP de la règle de transfert. Pour trouver l'adresse IP, utilisez la gcloud compute forwarding-rules describe commande.

      Le résultat indique qu'il n'y a aucune correspondance pour /extensions dans le mappage d'URL. Le résultat ressemble à ce qui suit :

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html><head>
      <title>404 Not Found</title>
      </head><body>
      ...
      
  2. Configurez l'extension en périphérie.

    Console

    1. Dans la Google Cloud console, accédez à la page Extensions de service.

      Accéder aux extensions de service

    2. Cliquez sur Créer une extension.

      Un assistant s'ouvre pour vous guider dans les premières étapes.

    3. Pour le produit, sélectionnez Équilibrage de charge. Cliquez ensuite sur Continuer.

      La liste des équilibreurs de charge d'application compatibles s'affiche.

    4. Pour le type d'équilibreur de charge, sélectionnez Équilibreur de charge d'application externe global. Cliquez ensuite sur Continuer.

    5. Pour le type d'extension, sélectionnez Extensions en périphérie, puis cliquez sur Continuer.

    6. Pour ouvrir le formulaire Créer une extension, cliquez sur Continuer.

      Dans le formulaire Créer une extension, notez que les sélections précédentes ne sont pas modifiables.

    7. Dans la section Informations de base, procédez comme suit :

      1. Spécifiez un nom unique pour l'extension.

        Le nom doit commencer par une lettre minuscule suivie de 1 à 62 caractères (lettres minuscules, chiffres ou traits d'union). Il ne doit pas se terminer par un trait d'union.

      2. Facultatif : Saisissez une brève description de l'extension en utilisant 1 024 caractères maximum.

    8. Facultatif : Dans la section Libellés, cliquez sur Ajouter un libellé. Ensuite, dans la ligne qui s'affiche, procédez comme suit :

      • Pour Clé, saisissez un nom de clé.
      • Pour Valeur, saisissez une valeur pour la clé.

      Pour ajouter d'autres paires clé-valeur, cliquez sur Ajouter un libellé. Vous pouvez ajouter jusqu'à 64 paires clé-valeur.

      Pour en savoir plus sur les libellés, consultez la page Créer et mettre à jour des libellés pour les projets.

    9. Pour Règles de transfert, sélectionnez une ou plusieurs règles de transfert à associer à l'extension, par exemple cr-xlb-forwarding-rule.

      Les règles de transfert déjà associées à une autre extension ne peuvent pas être sélectionnées et apparaissent désactivées.

    10. Pour Extension, afin d'ajouter une extension à exécuter pour une requête correspondante, procédez comme suit :

      • Pour faire correspondre les requêtes pour lesquelles la chaîne d'extension est exécutée, spécifiez une expression CEL (Common Expression Language) pour Condition de correspondance, par exemple request.path.startsWith("/extensions").

        Les extensions en périphérie ne vous permettent d'utiliser qu'une seule expression régulière par expression CEL.

        Pour en savoir plus sur les expressions CEL, cliquez sur Obtenir de l'aide sur la syntaxe ou consultez la documentation de référence sur le langage de correspondance CEL.

      • Pour Type de programmabilité, sélectionnez Plug-ins.

      • Pour Plug-in, sélectionnez un plug-in créé à l'aide des extensions de service ou du même produit et du même type d'extension. Vous ne pouvez inclure qu'un seul plug-in dans une extension en périphérie.

      • Pour Transférer les en-têtes, cliquez sur Ajouter un en-tête, puis ajoutez les en-têtes HTTP à transférer vers l'extension (à partir du client ou du backend). Si aucun en-tête n'est spécifié, tous les en-têtes sont envoyés.

      • Facultatif : Pour Fail open (Échec ouvert), si vous souhaitez que l'extension échoue en mode ouvert, sélectionnez Activé. Dans ce cas, si l'appel à l'extension échoue ou expire, le traitement des requêtes ou des réponses se poursuit sans erreur.

        Par défaut, le champ Fail open (Échec ouvert) n'est pas sélectionné. Dans ce cas, si les en-têtes de réponse n'ont pas été transmis au client en aval, un code d'état HTTP 500 générique lui est renvoyé. Si des en-têtes de réponse ont été fournis, le flux HTTP vers le client en aval est réinitialisé.

      Pour une extension en périphérie, vous ne pouvez spécifier qu'une seule extension par chaîne d'extension.

      Si vous souhaitez spécifier plusieurs extensions ou chaînes d'extension plutôt qu'une seule extension, cliquez sur le bouton Passer au mode avancé à la fin du formulaire, puis spécifiez les extensions et les chaînes requises. Les extensions s'exécutent dans l'ordre dans lequel elles sont listées.

      Spécifiez des noms uniques pour chaque extension et chaque chaîne d'extension. Les noms doivent être conformes à la norme RFC-1034, ne comporter que des lettres minuscules, des chiffres et des traits d'union, et ne pas dépasser 63 caractères. De plus, le premier caractère doit être une lettre et le dernier doit être une lettre ou un chiffre.

    11. Cliquez sur Créer une extension.

    gcloud

    1. Définissez le plug-in dans un fichier YAML et associez-le à une règle de transfert globale, par exemple cr-xlb-forwarding-rule.

      cat >edge-plugin.yaml <<EOF
          name: edge-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.path.startsWith("/extensions")'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - REQUEST_HEADERS
      EOF
      

      Remplacez les éléments suivants :

      • PROJECT_ID : l' ID du projet
      • WASM_PLUGIN: ID ou nom complet du plug-in.

      Les extensions en périphérie ne vous permettent d'utiliser qu'une seule expression régulière par expression CEL.

      Pour en savoir plus sur les champs du fichier YAML, consultez ExtensionChain dans la documentation de l'API.

    2. Importez l'extension en périphérie. Utilisez la gcloud service-extensions lb-edge-extensions import commande avec les exemples de valeurs suivants :

      gcloud service-extensions lb-edge-extensions import edge-ext \
          --source=edge-plugin.yaml \
          --location=global
      

    Une fois qu'une extension en périphérie est créée, la distribution du nouveau plug-in dans tous les emplacements prend un peu de temps. Ce délai peut varier d'un emplacement à l'autre, car le plug-in n'est pas distribué simultanément dans tous les emplacements.

  3. Pour vérifier que l'extension en périphérie fonctionne comme prévu, utilisez la même commande curl :

    curl FORWARDING_RULE_IP/extensions
    

    Le résultat ressemble à ce qui suit et indique que la page est diffusée à partir d'une VM dans region B :

    Page served from region-B-vm
    

    Pour vérifier que le plug-in ne s'exécute que pour les requêtes avec le préfixe de chemin /extension, répétez la commande curl sans chemin.

    curl FORWARDING_RULE_IP
    

    Le résultat ressemble à ce qui suit :

    Page served from region-A-vm
    

Limites concernant les extensions en périphérie

  • Vous ne pouvez associer qu'une seule extension en périphérie à une règle de transfert.
  • Les extensions en périphérie ne sont pas compatibles avec le traitement du corps HTTP.
  • Les extensions en périphérie ne vous permettent d'utiliser qu'une seule expression régulière par expression CEL.

Pour connaître les limites applicables à toutes les extensions, consultez la section Limites concernant les extensions.

Étape suivante