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 d'évaluer le mappage d'URL ou d'appeler Cloud CDN, ce qui vous permet d'influencer la mise en cache et le routage. Cette page explique comment configurer les extensions Edge.
Pour obtenir une présentation des extensions de l'équilibreur de charge d'application, consultez Présentation des extensions Cloud Load Balancing.
Une extension pour un équilibreur de charge d'application pointe vers les ressources suivantes :
- Règle de transfert à associer
- Un plug-in
L'extension fait référence à la règle de transfert de l'équilibreur de charge à laquelle s'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 Edge à une règle de transfert et n'inclure qu'un seul plug-in dans une chaîne d'extension Edge.
Pour en savoir plus sur les limites liées aux extensions de l'é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 Edge à l'aide d'un plug-in qui réécrit l'en-tête de requête :host en service-extensions.com lorsque le chemin d'accès correspond à /extensions. L'ancien hôte et celui nouvellement 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
Créez un plug-in contenant votre code personnalisé.
Créez et configurez un équilibreur de charge d'application compatible avec les plug-ins d'extension Edge.
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. - Pointez
service-onevers une instance de machine virtuelle (VM) dans la régionA. - Le point
gl7-gxlb-url-mapest défini surservice-onepar défaut.
- Nommez le service de backend
Configurez un service de backend supplémentaire,
service-two, et pointez-le vers une VM dans la régionB.Ajoutez un outil de mise en correspondance des chemins d'accès au mappage d'URL, en pointant vers
service-two. Utilisez la commandegcloud compute url-maps add-path-matcheravec 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=globalConfigurez 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
Vérifiez le comportement avant la configuration d'une extension.
Vérifiez qu'une requête sans chemin d'accès explicite est envoyée à la région
A:curl FORWARDING_RULE_IP
Remplacez
FORWARDING_RULE_IPpar l'adresse IP de la règle de transfert. Pour trouver l'adresse IP, utilisez la commandegcloud compute forwarding-rules describe.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-vmVérifiez qu'il n'y a aucune correspondance pour
/extensionsdans le mappage d'URL :curl FORWARDING_RULE_IP/extensions
Remplacez
FORWARDING_RULE_IPpar l'adresse IP de la règle de transfert. Pour trouver l'adresse IP, utilisez la commandegcloud compute forwarding-rules describe.Le résultat indique qu'il n'y a aucune correspondance pour
/extensionsdans 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> ...
Configurez l'extension Edge.
Console
Dans la console Google Cloud , accédez à la page Extensions de service.
Cliquez sur Créer une extension.
Un assistant s'ouvre pour vous guider à travers les premières étapes.
Pour le produit, sélectionnez Équilibrage de charge. Cliquez ensuite sur Continuer.
Une liste des équilibreurs de charge d'application compatibles s'affiche.
Pour le type d'équilibreur de charge, sélectionnez "Équilibreur de charge d'application externe global". Cliquez ensuite sur Continuer.
Pour le type d'extension, sélectionnez Extensions Edge, puis cliquez sur Continuer.
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.
Dans la section Informations de base, procédez comme suit :
Spécifiez un nom unique pour l'extension.
Le nom doit commencer par une lettre minuscule suivie d'un maximum de 62 caractères (lettres minuscules, chiffres ou traits d'union) et ne doit pas se terminer par un trait d'union.
Facultatif : Saisissez une brève description de l'extension (1 024 caractères maximum).
Facultatif : Dans la section Libellés, cliquez sur Ajouter un libellé. Ensuite, dans la ligne qui s'affiche, procédez comme suit :
- Dans le champ Clé, saisissez le nom d'une 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 Créer et mettre à jour des libellés pour les projets.
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 comme désactivées.
Pour les chaînes d'extensions, ajoutez une ou plusieurs chaînes d'extensions à exécuter pour une requête correspondante.
Pour ajouter une chaîne d'extension, procédez comme suit, puis cliquez sur OK :
Pour Nouvelle chaîne d'extension, spécifiez un nom unique.
Le nom doit être conforme à la norme RFC-1034, ne doit comporter que des lettres minuscules, des chiffres et des traits d'union, et ne doit 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.
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) dans Condition de correspondance, par exemple
request.path.startsWith("/extensions").Les extensions Edge 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.
Ajoutez une extension à exécuter pour une requête correspondante. Pour les extensions Edge, vous ne pouvez spécifier qu'une seule extension.
Sous Extensions, procédez comme suit, puis cliquez sur OK :
Pour Type de programmabilité, sélectionnez Plug-ins.
Dans le champ Nom de l'extension, spécifiez un nom unique.
Le nom doit être conforme à la norme RFC-1034, ne doit comporter que des lettres minuscules, des chiffres et des traits d'union, et ne doit 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.
Pour Plug-in, sélectionnez un plug-in créé à l'aide des extensions de service pour le même type de produit et d'extension.
Pour Transférer les en-têtes, cliquez sur Ajouter un en-tête, puis ajoutez les en-têtes HTTP à transférer à l'extension (depuis le client ou le backend). Si aucun en-tête n'est spécifié, tous les en-têtes sont envoyés.
Facultatif : Pour É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. Toutes les extensions suivantes de la chaîne d'extension sont également exécutées.
Par défaut, le champ É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
500gé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é.
Cliquez sur Créer une extension.
gcloud
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 EOFRemplacez les éléments suivants :
PROJECT_ID: ID du projet.WASM_PLUGIN: ID ou nom complet du plug-in
Les extensions Edge ne vous permettent d'utiliser qu'une seule expression régulière par expression CEL.
Importez l'extension Edge. Utilisez la commande
gcloud service-extensions lb-edge-extensions importavec les exemples de valeurs suivants :gcloud service-extensions lb-edge-extensions import edge-ext \ --source=edge-plugin.yaml \ --location=global
Une fois l'extension Edge créée, il faut un certain temps pour que le nouveau plug-in soit distribué dans tous les emplacements. L'heure peut varier selon les zones géographiques, car le plug-in n'est pas distribué simultanément dans toutes les zones.
Pour vérifier que l'extension Edge 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-vmPour 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 commandecurlsans chemin.curl FORWARDING_RULE_IP
Le résultat ressemble à ce qui suit :
Page served from region-A-vm
Limites pour les extensions Edge
- Vous ne pouvez associer qu'une seule extension Edge à une règle de transfert.
- Les extensions Edge ne sont pas compatibles avec le traitement du corps HTTP.
- Les extensions Edge 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 Limites pour les extensions.
Étapes suivantes
- Consultez les exemples de plug-ins Rust, Go et C++, ainsi que les outils de test dans le dépôt GitHub Service Extensions pour les plug-ins.
- Gérer les extensions