Comprendre F5 · LTM

F5 iRules : événements, routage HTTP et data groups

Lire une iRule, choisir les profils nécessaires et distinguer chemin, URI, requête et événements de connexion.

Thomas SAUTIER · Publié le · Révisions de certification

Références et objectifs de certification (5)
  • Certification : F5 301A · Référence consultée le · Objectifs abordés : F5 301A 1.10.
  • Certification : F5 301B · Référence consultée le · Objectifs abordés : F5 301B 2.01, F5 301B 2.02, F5 301B 2.03.
  • Certification : F5CAB3 · Référence consultée le · Objectifs abordés : F5CAB3 F5CAB3.01.
  • Certification : F5CABR · Référence consultée le · Objectifs abordés : F5CABR 3.01.
  • Certification : F5CTSLTMR · Référence consultée le · Objectifs abordés : F5CTSLTMR 3.01, F5CTSLTMR 3.02, F5CTSLTMR 3.03, F5CTSLTMR 3.04, F5CTSLTMR 3.05, F5CTSLTMR 3.06, F5CTSLTMR 3.07.

Ce guide concerne BIG-IP sur TMOS. Vérifiez les noms et les options dans la documentation de votre version.

Comprendre en imageiRule HTTP : séparer l’événement, le chemin et les branches
iRule HTTP : séparer l’événement, le chemin et les branches L’événement HTTP_REQUEST rend les informations HTTP disponibles. Dans l’exemple du guide, le chemin /api/* choisit le pool API et les autres chemins le pool web. La query string ne fait pas partie de HTTP::path. Oui Non VS Standard avec profil HTTP HTTPS : terminer TLS pour lire HTTPPools /Common/pool_api et pool_webexistants HTTP_REQUEST En-têtes HTTP analysésExemple : /api/status?x=1HTTP::path renvoie /api/status switch -glob Motifs du guide : /api et /api/*Casse conservéeQuery séparée du chemin Motif API reconnu ? Pool API pool /Common/pool_apiLa sélection du membre reste ensuitesoumise à ses propres règles Pool web default → pool /Common/pool_webPrévoir explicitement le comportementdes autres chemins Objets et conditions La logique représente l’iRule du guide, pas l’ordrecomplet des événements BIG-IP. Une commande HTTPn’est pas disponible uniquement parce que le portvaut 80 ou 443. Comparer les frontières du motif /api, /api/ et /api/status correspondent ici à la branche API. /API/status et /apix restent différents dans cet exemple sensible àla casse.

L’événement HTTP_REQUEST rend les informations HTTP disponibles. Dans l’exemple du guide, le chemin /api/* choisit le pool API et les autres chemins le pool web. La query string ne fait pas partie de HTTP::path.

Télécharger le schéma en SVG · version claire

L’événement définit les informations disponibles

Une iRule exécute une logique à un moment du traitement. CLIENT_ACCEPTED concerne l’acceptation de la connexion ; HTTP_REQUEST intervient lorsque les en-têtes HTTP de la requête sont analysés. Une commande HTTP n’est pas rendue disponible par le seul fait que le port est 80 ou 443.

Avant de lire les conditions, vérifiez l’événement, les profils et le côté du flux. Pour HTTPS, le traitement HTTP suppose que le contenu soit accessible après terminaison TLS. Une commande correcte placée dans un événement inadapté peut produire une erreur plutôt que le routage attendu.

Sources : F5, ltm profile http ; F5, ltm virtual.

Chemin, URI et query ne sont pas identiques

HTTP::path renvoie le chemin ; la query correspond à la partie de paramètres ; l’URI inclut le contexte de requête plus large selon la commande utilisée. Une condition visant /api/ ne doit pas être écrite comme si un paramètre de query était un répertoire.

Avec Tcl switch, -exact compare une chaîne entière, -glob interprète les motifs et -regexp utilise des expressions régulières. L’ordre des motifs compte. Un astérisque dans un switch exact ne devient pas automatiquement un wildcard.

Sources : F5, HTTP::path ; F5, Tcl switch.

Un routage par préfixe lisible

Cette iRule pédagogique suppose un VS Standard avec profil HTTP, et des pools existants dans Common. Elle distingue le répertoire API, son chemin racine sans slash et le reste. La casse est volontairement conservée.

Routage pédagogique par cheminTcl · iRule F5
when HTTP_REQUEST {
    switch -glob -- [HTTP::path] {
        "/api" -
        "/api/*" {
            pool /Common/pool_api
        }
        default {
            pool /Common/pool_web
        }
    }
}

Sources : F5, HTTP::path ; F5, Tcl switch.

Data groups : séparer les valeurs de la logique

Un data group évite de multiplier les valeurs en dur dans une règle. Son type, le mode de comparaison et la forme de ses entrées doivent correspondre au besoin. Pour des réseaux IP, ne comparez pas les adresses comme de simples sous-chaînes.

Vérifiez aussi comment les chemins sont comparés : le préfixe /admin peut englober /administrator si la condition est trop large. Pour une décision de sécurité, la normalisation et le comportement de l’application doivent être étudiés ensemble.

Sources : F5, class, data groups ; F5, HTTP::path.

Comprendre return, redirect et les règles associées

Une redirection renvoie une réponse au client ; un choix de pool oriente la requête serveur. Ce ne sont pas deux formes équivalentes de navigation. Dans une iRule, return termine le traitement courant, mais ne constitue pas une garantie qu’aucune autre iRule associée ne s’exécutera.

Inventoriez les policies et les autres règles du VS. Si plusieurs objets tentent de sélectionner un pool ou de produire une réponse, leur combinaison doit être analysée avant d’attribuer un symptôme à une seule ligne.

Sources : F5, HTTP::redirect ; F5, ltm policy ; F5, return et commandes globales.

Prévoir les cas limites

En laboratoire, contrôlez /api, /api/commande, /apiculture, une query, une différence de casse et une URL encodée. Notez la destination attendue avant l’essai. Vérifiez les erreurs dans les journaux sans laisser une journalisation par requête à fort volume en production.

Sources : F5, sys log.

Lire les logs et les erreurs d’une iRule

Une trace doit associer l’événement, l’iRule et une tentative précise. Le journal local /var/log/ltm peut montrer les messages produits par log ainsi que des erreurs Tcl. Une erreur peut provenir d’un objet absent, d’une commande appelée hors de son événement ou d’une information pas encore disponible.

Si une trace attendue dans HTTP_REQUEST manque, vérifiez le VS, le profil HTTP, la terminaison TLS et les règles associées. Un trafic passthrough TLS ne produit pas une lecture de chemin HTTP comme un flux déchiffré. Un return quitte la logique Tcl courante ; une redirection envoie une réponse et impose de considérer les actions des autres iRules.

L’exemple limite la trace à une route de recette. Il ne journalise ni corps, ni cookie, ni query string. Après investigation, retirez la trace temporaire ; une journalisation sur chaque requête peut charger la plateforme. Si une erreur mentionne un pool, comparez son chemin complet et la branche réellement exécutée avant de changer le monitor.

Trace limitée à une route de recetteExemple pédagogique : nécessite un profil HTTP et un chemin de recette dédié.
when HTTP_REQUEST {
    if { [HTTP::path] eq "/revision/health" } {
        log local0.notice "revision event=HTTP_REQUEST route=health"
    }
}

Sources : F5, iRules log ; F5, HTTP::path ; F5, return et commandes globales ; F5, HTTP::redirect.

Sources et portée

Les dates de consultation et les versions applicables sont précisées pour chaque référence ci-dessous. Les exemples utilisent des noms et adresses de documentation à remplacer. Les commandes de lecture affichent l’existant ; les captures et requêtes de diagnostic sont à limiter au périmètre autorisé.

Retrouver le parcours de lecture F5 LTM

Continuer la série F5

Explorer tous les guides du parcours F5 LTM

Découvrir l’expertise F5 de Samhan

Échange

Besoin d’éclaircir votre architecture F5 ?

Échangeons sur vos flux, vos contraintes de disponibilité et vos services applicatifs.