Partager via


Comment utiliser des filtres de routage VMware Spring Cloud Gateway avec le plan Azure Spring Apps Enterprise

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à :❌ De base/Standard ✔️ Entreprise

Cet article explique comment utiliser des filtres de routage VMware Spring Cloud Gateway avec le plan Azure Spring Apps Enterprise pour acheminer les demandes vers vos applications.

VMware Spring Cloud Gateway est un composant VMware Tanzu commercial basé sur le projet open source Spring Cloud Gateway. Spring Cloud Gateway gère les problèmes transversaux que rencontrent les équipes de développement d’API, comme l’authentification unique (SSO), le contrôle d’accès, la limitation du débit, la résilience, la sécurité, etc. Vous pouvez accélérer la livraison des API à l’aide de modèles modernes natifs Cloud et de n’importe quel langage de programmation pour le développement d’API.

VMware Spring Cloud Gateway propose les fonctionnalités suivantes :

  • Configuration du routage dynamique, indépendamment des applications individuelles qui peuvent être appliquées et modifiées sans recompilation.
  • Filtres d’itinéraires d’API commerciales pour le transport d’une revendication json Web Token (JWT) autorisée aux services d’application.
  • Autorisation de certificat client.
  • Approches de limitation du débit.
  • Configuration du disjoncteur.
  • Prise en charge de l’accès aux services d’application via les informations d’identification d’authentification HTTP de base.

Pour intégrer le portail API pour VMware Tanzu, VMware Spring Cloud Gateway génère automatiquement la documentation OpenAPI version 3 après les ajouts ou modifications de configuration de routage. Pour plus d’informations, consultez Utiliser le portail API pour VMware Tanzu.

Prérequis

Utiliser des filtres

Vous utilisez des filtres dans votre configuration Spring Cloud Gateway pour agir sur la demande entrante ou la réponse sortante à une configuration de routage.

Par exemple, vous pouvez utiliser un filtre pour ajouter un en-tête HTTP ou refuser l’accès en fonction d’un jeton d’autorisation.

Utiliser des filtres code source ouvert

Spring Cloud Gateway OSS comprend plusieurs GatewayFilter fabriques utilisées pour créer des filtres pour les itinéraires. Les sections suivantes décrivent ces usines.

AddRequestHeader

La AddRequestHeader fabrique ajoute un en-tête aux en-têtes de la requête en aval pour toutes les demandes correspondantes.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • value

L’exemple suivant configure une AddRequestHeader fabrique qui ajoute l’en-tête aux en-têtes X-Request-red:blue de la requête en aval pour toutes les demandes correspondantes :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue"
        ]
    }
]

La AddRequestHeader fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.

L’exemple suivant configure une AddRequestHeader fabrique qui utilise une variable :

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue-{segment}"
        ]
    }
]

AddRequestHeadersIfNotPresent

La AddRequestHeadersIfNotPresent fabrique ajoute des en-têtes s’ils ne sont pas présents dans la requête d’origine.

Cette fabrique accepte le paramètre de configuration suivant :

  • headers: liste séparée par des virgules de paires clé-valeur (nom d’en-tête, valeur d’en-tête).

L’exemple suivant configure une AddRequestHeadersIfNotPresent fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
        ]
    }
]

AddRequestParameter

La AddRequestParameter fabrique ajoute un paramètre à la chaîne de requête de la requête en aval pour toutes les demandes correspondantes.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • value

L’exemple suivant configure une AddRequestParameter fabrique qui ajoute un red=blue paramètre à la chaîne de requête de la requête en aval pour toutes les demandes correspondantes :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestParameter=red, blue"
        ]
    }
]

La AddRequestParameter fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.

L’exemple suivant configure une AddRequestParameter fabrique qui utilise une variable :

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestParameter=foo, bar-{segment}"
        ]
    }
]

AddResponseHeader

La AddResponseHeader fabrique ajoute un en-tête aux en-têtes de la réponse en aval pour toutes les demandes correspondantes.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • value

L’exemple suivant configure une fabrique qui ajoute un AddResponseHeaderX-Response-Red:Blue en-tête aux en-têtes de la réponse en aval pour toutes les demandes correspondantes :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddResponseHeader=X-Response-Red, Blue"
        ]
    }
]

La AddResponseHeader fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.

L’exemple suivant configure une AddResponseHeader fabrique qui utilise une variable :

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddResponseHeader=foo, bar-{segment}"
        ]
    }
]

CircuitBreaker

L’usine CircuitBreaker encapsule les itinéraires dans un disjoncteur.

Cette fabrique accepte les paramètres de configuration suivants :

  • name: nom du disjoncteur.
  • fallbackUri: URI de réacheminement, qui peut être un itinéraire local ou un gestionnaire externe.
  • status codes (facultatif) : liste séparée par deux-points des codes d’état à mettre en correspondance, au format numérique ou texte.
  • failure rate (facultatif) : seuil au-dessus duquel le disjoncteur s’ouvre. La valeur par défaut est 50 %.
  • duration (facultatif) : délai d’attente avant de fermer à nouveau. La valeur par défaut est 60 secondes.

L’exemple suivant configure une CircuitBreaker fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    }
]

DeDupeResponseHeader

La DeDupeResponseHeader fabrique supprime les valeurs en double des en-têtes de réponse.

Cette fabrique accepte les paramètres de configuration suivants :

  • name: liste séparée par un espace des noms d’en-têtes.
  • strategy (facultatif) : les valeurs acceptées sont RETAIN_FIRST, RETAIN_LASTet RETAIN_UNIQUE. La valeur par défaut est RETAIN_FIRST.

L’exemple suivant configure une DeDupeResponseHeader fabrique qui supprime les valeurs en double des en-têtes de réponse et Access-Control-Allow-Origin des valeurs lorsque les deux valeurs sont ajoutées par la logique CORS de Access-Control-Allow-Credentials passerelle et la logique en aval :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
        ]
    }
]

FallbackHeaders

La FallbackHeaders fabrique ajoute toute exception disjoncteur à un en-tête. Ce filtre nécessite l’utilisation du CircuitBreaker filtre dans un autre itinéraire.

Il n’existe aucun paramètre pour cette fabrique.

L’exemple suivant configure une FallbackHeaders fabrique avec le type d’exception, le message et (si disponible) le type d’exception et le message d’exception ajoutés par le FallbackHeaders filtre à la demande :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    },
    {
        "predicates": [
            "Path=/inCaseOfFailureUseThis"
        ],
        "filters": [
            "FallbackHeaders"
        ]
    }
]

Vous pouvez remplacer les noms des en-têtes de la configuration en définissant les valeurs des paramètres suivants (mentionnées avec leurs valeurs par défaut) :

  • executionExceptionTypeHeaderName (« Execution-Exception-Type »)
  • executionExceptionMessageHeaderName (« Execution-Exception-Message »)
  • rootCauseExceptionTypeHeaderName ( » Root-Cause-Exception-Type »)
  • rootCauseExceptionMessageHeaderName (« Root-Cause-Exception-Message »)

JSONToGRPC

La JSONToGRPCFilter fabrique convertit une charge utile JSON en requête gRPC.

Cette fabrique accepte le paramètre de configuration suivant :

  • protoDescriptor: fichier de descripteur proto.

Vous pouvez générer ce fichier en utilisant protoc et en spécifiant l’indicateur --descriptor_set_out , comme illustré dans l’exemple suivant :

protoc --proto_path=src/main/resources/proto/ \
    --descriptor_set_out=src/main/resources/proto/hello.pb \
    src/main/resources/proto/hello.proto

Remarque

Le streaming paramètre n’est pas pris en charge.

L’exemple suivant configure une JSONToGRPCFilter fabrique à l’aide de la sortie à partir de protoc:

[
    {
        "predicates": [
            "Path=/json/**"
        ],
        "filters": [
            "JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
        ]
    }
]

LocalResponseCache

La LocalResponseCache fabrique remplace la configuration du cache de réponse local pour des itinéraires spécifiques lorsque le cache global est activé.

Cette fabrique accepte les paramètres de configuration suivants :

  • size: taille maximale autorisée des entrées de cache pour cette route avant le début de l’éviction du cache (en Ko, Mo et Go).
  • timeToLive: durée de vie autorisée d’une entrée de cache avant expiration. Utilisez le suffixe s de durée pendant des secondes, m pendant des minutes ou h pendant des heures.

L’exemple suivant configure une LocalResponseCache fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "LocalResponseCache=3m,1MB"
        ]
    }
]

MapRequestHeader

La MapRequestHeader fabrique ajoute un en-tête à la requête en aval avec des valeurs mises à jour à partir de l’en-tête de la requête HTTP entrante.

Cette fabrique accepte les paramètres de configuration suivants :

  • fromHeader
  • toHeader

Cette fabrique crée un en-tête nommé (toHeader) et la valeur est extraite d’un en-tête nommé existant (fromHeader) à partir de la requête HTTP entrante. Si l’en-tête d’entrée n’existe pas, le filtre n’a aucun effet. Si le nouvel en-tête nommé existe déjà, ses valeurs sont augmentées avec les nouvelles valeurs.

L’exemple suivant configure une MapRequestHeader fabrique qui ajoute l’en-tête X-Request-Red:<values> à la requête en aval avec des valeurs mises à jour à partir de l’en-tête de Blue la requête HTTP entrante :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "MapRequestHeader=Blue, X-Request-Red"
        ]
    }
]

PrefixPath

La PrefixPath fabrique ajoute un préfixe au chemin d’accès de toutes les requêtes.

Cette fabrique accepte le paramètre de configuration suivant :

  • prefix

L’exemple suivant configure une PrefixPath fabrique qui ajoute le préfixe /api au chemin d’accès de toutes les requêtes, afin qu’une demande soit /catalog envoyée à /api/catalog:

[
    {
        "predicates": [
            "Path=/catalog/**"
        ],
        "filters": [
            "PrefixPath=/api"
        ]
    }
]

PreserveHostHeader

La PreserveHostHeader fabrique définit un attribut de requête que le filtre de routage inspecte pour déterminer s’il faut envoyer l’en-tête d’hôte d’origine ou l’en-tête hôte déterminé par le client HTTP.

Il n’existe aucun paramètre pour cette fabrique.

L’exemple suivant configure une PreserveHostHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "PreserveHostHeader"
        ]
    }
]

RedirectTo

La RedirectTo fabrique ajoute une redirection à l’URL d’origine.

Cette fabrique accepte les paramètres de configuration suivants :

  • status: une série 300 redirige le code HTTP, tel que 301.
  • url: valeur de l’en-tête Location . Doit être un URI valide. Pour les redirections relatives, vous devez utiliser uri: no://op l’URI de votre définition de route.

L’exemple suivant configure une fabrique qui envoie un RedirectTo état 302 avec un Location:https://acme.org en-tête pour effectuer une redirection :

[
    {
        "uri": "https://example.org",
        "filters": [
            "RedirectTo=302, https://acme.org"
        ]
    }
]

RemoveJsonAttributesResponseBody

La RemoveJsonAttributesResponseBody fabrique supprime les attributs JSON et leurs valeurs des corps de réponse JSON.

Cette fabrique accepte les paramètres de configuration suivants :

  • attribute names: liste séparée par des virgules des noms d’attributs à supprimer d’une réponse JSON.
  • delete recursively (facultatif, booléen) : configuration qui supprime les attributs uniquement au niveau racine (false) ou récursivement (true). La valeur par défaut est false.

L’exemple suivant configure une RemoveJsonAttributesResponseBody fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveJsonAttributesResponseBody=origin,foo,true"
        ]
    }
]

RemoveRequestHeader

La RemoveRequestHeader fabrique supprime un en-tête de la requête en aval.

Cette fabrique accepte le paramètre de configuration suivant :

  • name: nom de l’en-tête à supprimer.

La liste suivante configure une RemoveRequestHeader fabrique qui supprime l’en-tête X-Request-Foo avant son envoi en aval :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestHeader=X-Request-Foo"
        ]
    }
]

RemoveRequestParameter

La RemoveRequestParameter fabrique supprime un paramètre avant son envoi en aval.

Cette fabrique accepte le paramètre de configuration suivant :

  • name: nom du paramètre de requête à supprimer.

L’exemple suivant configure une RemoveRequestParameter fabrique qui supprime le red paramètre avant son envoi en aval :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestParameter=red"
        ]
    }
]

RemoveResponseHeader

La RemoveResponseHeader fabrique supprime un en-tête de la réponse avant son retour au client de passerelle.

Cette fabrique accepte le paramètre de configuration suivant :

  • name: nom de l’en-tête à supprimer.

La liste suivante configure une RemoveResponseHeader fabrique qui supprime l’en-tête X-Response-Foo de la réponse avant son retour au client de passerelle :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveResponseHeader=X-Response-Foo"
        ]
    }
]

RequestHeaderSize

La RequestHeaderSize fabrique détermine la taille de l’en-tête de requête.

Cette fabrique accepte les paramètres de configuration suivants :

  • maxSize: taille maximale des données autorisée par l’en-tête de requête, y compris la clé et la valeur.
  • errorHeaderName: nom de l’en-tête de réponse contenant un message d’erreur. Par défaut, le nom de l’en-tête de réponse est errorMessage.

La liste suivante configure une fabrique qui envoie un RequestHeaderSize état 431 si la taille d’un en-tête de requête est supérieure à 1 000 octets :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RequestHeaderSize=1000B"
        ]
    }
]

RewriteLocationResponseHeader

La RewriteLocationResponseHeader fabrique modifie la valeur de l’en-tête Location de réponse, généralement pour se débarrasser des détails spécifiques au back-end.

Cette fabrique accepte les paramètres de configuration suivants :

  • stripVersionMode: ce paramètre a les valeurs possibles suivantes : NEVER_STRIP, AS_IN_REQUESTet ALWAYS_STRIP. La valeur par défaut est AS_IN_REQUEST.

    • NEVER_STRIP: la version n’est pas supprimée, même si le chemin de requête d’origine ne contient aucune version.
    • AS_IN_REQUEST: la version est supprimée uniquement si le chemin de requête d’origine ne contient aucune version.
    • ALWAYS_STRIP: la version est toujours supprimée, même si le chemin de requête d’origine contient la version.
  • hostValue: ce paramètre est utilisé pour remplacer la host:port partie de l’en-tête de réponse Location lorsqu’il est fourni. S’il n’est pas fourni, la valeur de l’en-tête Host de demande est utilisée.

  • protocolsRegex: expression régulière Stringvalide, par rapport à laquelle le nom du protocole est mis en correspondance. S’il n’est pas mis en correspondance, le filtre ne fonctionne pas. La valeur par défaut est http|https|ftp|ftps.

  • locationHeaderName

La liste suivante configure une RewriteLocationResponseHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
        ]
    }
]

Dans cet exemple, pour une valeur de demande de POSTapi.example.com/some/object/name, la Location valeur d’en-tête de réponse est object-service.prod.example.net/v2/some/object/id réécrite en tant que api.example.com/some/object/id.

RewritePath

La RewritePath fabrique utilise des expressions régulières Java pour un moyen flexible de réécrire le chemin de la requête.

Cette fabrique accepte les paramètres de configuration suivants :

  • regexp
  • replacement

La liste suivante configure une RewritePath fabrique :

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewritePath=/red/?(?<segment>.*), /$\\{segment}"
        ]
    }
]

Dans cet exemple, pour un chemin de requête de /red/blue, cette configuration définit le chemin d’accès /blue avant d’effectuer la requête en aval.

RewriteResponseHeader

La RewriteResponseHeader fabrique utilise des expressions régulières Java pour un moyen flexible de réécrire la valeur d’en-tête de réponse.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • regexp
  • replacement

L’exemple suivant configure une RewriteResponseHeader fabrique :

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
        ]
    }
]

Dans cet exemple, pour une valeur d’en-tête de /42?user=ford&password=omg!what&flag=true, la configuration est définie /42?user=ford&password=***&flag=true après avoir effectué la requête en aval.

SetPath

La SetPath fabrique offre un moyen simple de manipuler le chemin de requête en autorisant les segments modinés du chemin d’accès. Ce filtre utilise les modèles d’URI de Spring Framework et autorise plusieurs segments correspondants.

Cette fabrique accepte le paramètre de configuration suivant :

  • template

L’exemple suivant configure une SetPath fabrique :

[
    {
        "predicates": [
            "Path=/red/{segment}"
        ],
        "filters": [
            "SetPath=/{segment}"
        ]
    }
]

Dans cet exemple, pour un chemin de requête de /red/blue, cette configuration définit le chemin d’accès /blue avant d’effectuer la requête en aval.

SetRequestHeader

La SetRequestHeader fabrique remplace (au lieu d’ajouter) tous les en-têtes par le nom donné.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • value

La liste suivante configure une SetRequestHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetRequestHeader=X-Request-Red, Blue"
        ]
    }
]

Dans cet exemple, le serveur en aval a répondu par X-Request-Red:1234, et il est remplacé par X-Request-Red:Blue.

La SetRequestHeader fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.

L’exemple suivant configure une SetRequestHeader fabrique qui utilise une variable :

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetRequestHeader=foo, bar-{segment}"
        ]
    }
]

SetResponseHeader

La SetResponseHeader fabrique remplace (au lieu d’ajouter) tous les en-têtes par le nom donné.

Cette fabrique accepte les paramètres de configuration suivants :

  • name
  • value

La liste suivante configure une SetResponseHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetResponseHeader=X-Response-Red, Blue"
        ]
    }
]

Dans cet exemple, le serveur en aval a répondu par X-Response-Red:1234, et il est remplacé par X-Response-Red:Blue.

La SetResponseHeader fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.

L’exemple suivant configure une SetResponseHeader fabrique qui utilise une variable :

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetResponseHeader=foo, bar-{segment}"
        ]
    }
]

SetStatus

La SetStatus fabrique configure l’état de réponse de la demande de serveur.

Cette fabrique accepte le paramètre de configuration suivant :

  • status: valeur Spring HttpStatus valide, qui peut être une valeur entière telle que 404, ou la représentation sous forme de chaîne de l’énumération, telle que NOT_FOUND.

La liste suivante configure une SetStatus fabrique :

[
    {
        "predicates": [
            "Path=/experimental/**"
        ],
        "filters": [
            "SetStatus=UNAUTHORIZED"
        ]
    },
    {
        "predicates": [
            "Path=/unknown/**"
        ],
        "filters": [
            "SetStatus=401"
        ]
    }
]

StripPrefix

La StripPrefix fabrique supprime le préfixe de la requête avant de l’envoyer en aval.

Cette fabrique accepte le paramètre de configuration suivant :

  • parts: nombre de parties dans le chemin d’accès à supprimer de la requête avant de l’envoyer en aval. La valeur par défaut est 1.

L’exemple suivant configure une StripPrefix fabrique :

[
    {
        "predicates": [
            "Path=/name/**"
        ],
        "filters": [
            "StripPrefix=2"
        ]
    }
]

Dans cet exemple, une requête est effectuée via la passerelle vers /name/blue/red. La demande faite pour nameservice apparaître en tant que nameservice/red.

Réessayer

La Retry fabrique détermine le nombre de nouvelles tentatives tentées.

Cette fabrique accepte les paramètres de configuration suivants :

  • retries: nombre de nouvelles tentatives qui doivent être tentées.
  • statuses: codes d’état HTTP qui doivent être retentés, représentés à l’aide org.springframework.http.HttpStatusde .
  • methods: méthodes HTTP qui doivent être retentées, représentées à l’aide org.springframework.http.HttpMethodde .
  • series: série de codes d’état à retener, représentée à l’aide org.springframework.http.HttpStatus.Seriesde .
  • exceptions: liste des exceptions levées qui doivent être retentées.
  • backoff: interruption exponentielle configurée pour les nouvelles tentatives. Les nouvelles tentatives sont effectuées après un intervalle d’interruption de firstBackoff * (factor ^ n), où n est l’itération. Si maxBackoff elle est configurée, l’interruption maximale appliquée est limitée à maxBackoff. Si basedOnPreviousValue la valeur est true, la backoff valeur est calculée à l’aide prevBackoff * factorde .

Les valeurs par défaut suivantes sont configurées pour le Retry filtre, lorsqu’elles sont activées :

  • retries: trois fois.
  • series: série 5XX.
  • methods: méthode GET.
  • exceptions: IOException et TimeoutException.
  • backoff:Handicapés.

L’exemple suivant configure une Retry fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
        ]
    }
]

RequestSize

La RequestSize fabrique peut restreindre une demande d’atteindre le service en aval lorsque la taille de la demande est supérieure à la limite autorisée.

Cette fabrique accepte le paramètre de configuration suivant :

  • maxSize: type DataSize où les valeurs sont définies comme un nombre suivi d’un suffixe facultatif DataUnit tel que KB ou MB. La valeur de suffixe par défaut est B pour les octets. Il s’agit de la limite de taille autorisée de la requête définie en octets.

L’exemple suivant configure une RequestSize fabrique :

[
    {
        "predicates": [
            "Path=/upload"
        ],
        "filters": [
            "RequestSize=5000000"
        ]
    }
]

Dans cet exemple, lorsque la requête est rejetée en raison de la taille, la RequestSize fabrique définit l’état 413 Payload Too Large de la réponse avec un autre en-tête errorMessage.

L’exemple suivant montre un errorMessage:

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB

TokenRelay

La TokenRelay fabrique transfère un jeton d’accès OAuth2 aux ressources en aval. Ce filtre est configuré comme valeur boolean dans la définition d’itinéraire plutôt qu’un filtre explicite.

L’exemple suivant configure une TokenRelay fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "tokenRelay": true
    }
]

Utilisez des filtres commerciaux

Spring Cloud Gateway pour Kubernetes fournit également de nombreuses fabriques personnalisées GatewayFilter . Les sections suivantes décrivent ces usines.

AllowedRequestCookieCount

La AllowedRequestCookieCount fabrique détermine si une demande correspondante est autorisée à continuer en fonction du nombre de cookies.

Cette fabrique accepte le paramètre de configuration suivant :

  • amount: nombre de cookies autorisés.

L’exemple suivant configure une AllowedRequestCookieCount fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestCookieCount=2"
        ]
    }
]

AllowedRequestHeadersCount

La AllowedRequestHeadersCount fabrique détermine si une demande correspondante est autorisée à continuer en fonction du nombre d’en-têtes.

Cette fabrique accepte le paramètre de configuration suivant :

  • amount: nombre d’en-têtes autorisés.

L’exemple suivant configure une AllowedRequestHeadersCount fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestHeadersCount=4"
        ]
    }
]

AllowedRequestQueryParamsCount

La AllowedRequestQueryParamsCount fabrique détermine si une demande correspondante est autorisée à continuer en fonction des paramètres de requête nombre.

Cette fabrique accepte le paramètre de configuration suivant :

  • amount: nombre de paramètres autorisés.

L’exemple suivant configure une AllowedRequestQueryParamsCount fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestQueryParamsCount=3"
        ]
    }
]

BasicAuth

La BasicAuth fabrique ajoute un BasicAuthAuthorization en-tête aux requêtes.

Il n’existe aucun paramètre pour cette fabrique.

L’exemple suivant configure une BasicAuth fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "BasicAuth"
        ]
    }
]

ClaimHeader

La ClaimHeader fabrique copie les données d’une revendication JWT dans un en-tête HTTP.

Cette fabrique accepte les paramètres de configuration suivants :

  • Claim name: nom sensible à la casse de la revendication à passer.
  • Header name: nom de l’en-tête HTTP.

L’exemple suivant configure une ClaimHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClaimHeader=sub,X-Claim-Sub"
        ]
    }
]

ClientCertificateHeader

La ClientCertificateHeader fabrique valide le certificat d’en-tête X-Forwarded-Client-Cert .

Cette fabrique accepte les paramètres de configuration suivants :

  • domain patternX-Forwarded-Client-Cert: valeur en fonction de la capacité de Kubernetes à reconnaître l’autorité de certification du certificat client.
  • certificate fingerprint(facultatif) : empreinte digitale du certificat TLS/SSL.

L’exemple suivant configure une ClientCertificateHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
        ]
    }
]

Cors

La Cors fabrique active les validations CORS sur un itinéraire.

Cette fabrique accepte les paramètres de configuration suivants qui sont organisés en tant que paires clé-valeur pour les options CORS :

  • allowedOrigins
  • allowedMethods
  • allowedHeaders
  • maxAge
  • allowCredentials
  • allowedOriginPatterns

L’exemple suivant configure une Cors fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
        ]
    }
]

JsonToXml

La fabrique transforme le JsonToXml corps de la réponse JSON en corps de réponse XML.

Cette fabrique accepte le paramètre de configuration suivant :

  • wrapper: nom de balise racine de la réponse XML si une autre balise racine est requise pour générer du code XML valide. La valeur par défaut est response.

L’exemple suivant configure une JsonToXml fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "JsonToXml=custom-response"
        ]
    }
]

RateLimit

La RateLimit fabrique détermine si une demande correspondante est autorisée à continuer en fonction du volume de la demande.

Cette fabrique accepte les paramètres de configuration suivants :

  • request limit: nombre maximal de demandes acceptées pendant la fenêtre.
  • window duration: durée de la fenêtre en millisecondes. Vous pouvez également utiliser les sm suffixes ou h les suffixes pour spécifier la durée en secondes, en minutes ou en heures.
  • partition source (facultatif) : emplacement de la clé de partition (claim, headerou IPs).
  • partition key (facultatif) : valeur utilisée pour partitionner les compteurs de requête.

L’exemple suivant configure une RateLimit fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RateLimit=1,10s"
        ]
    }
]

Les exemples suivants montrent d’autres RateLimit configurations :

RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}

RestrictRequestHeaders

La RestrictRequestHeaders fabrique détermine si une demande correspondante est autorisée à continuer en fonction des en-têtes.

S’il existe des en-têtes HTTP qui ne sont pas dans la configuration sans respect headerList de la casse, une réponse 431 Forbidden error est retournée au client.

Cette fabrique accepte le paramètre de configuration suivant :

  • headerList: liste sans respect de la casse des noms d’en-têtes autorisés.

L’exemple suivant configure une RestrictRequestHeaders fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RestrictRequestHeaders=Content-Type,x-request-temp"
        ]
    }
]

RewriteAllResponseHeaders

La RewriteAllResponseHeaders fabrique réécrit plusieurs en-têtes de réponse à la fois.

Cette fabrique accepte les paramètres de configuration suivants :

  • pattern to match: expression régulière à mettre en correspondance avec les valeurs d’en-tête.
  • replacement: valeur de remplacement.

L’exemple suivant configure une RewriteAllResponseHeaders fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteAllResponseHeaders=\\d,0"
        ]
    }
]

RewriteResponseBody

La RewriteResponseBody fabrique modifie le corps d’une réponse.

Cette fabrique accepte les paramètres de configuration suivants qui sont organisés sous forme de liste séparées par des virgules de paires clé-valeur, où chaque paire accepte le formulaire pattern to match:replacement:

  • pattern to match: expression régulière à mettre en correspondance avec le texte dans le corps de la réponse.
  • replacement: valeur de remplacement.

L’exemple suivant configure une RewriteResponseBody fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteResponseBody=foo:bar,/path-one/:/path-two/"
        ]
    }
]

RewriteJsonAttributesResponseBody

La RewriteJsonAttributesResponseBody fabrique réécrit les attributs JSON à l’aide JSONPath de la notation.

Cette fabrique accepte les paramètres de configuration suivants qui sont organisés sous forme de liste séparées par des virgules de paires clé-valeur, où chaque paire accepte le formulaire jsonpath:replacement:

  • jsonpathJSONPath: expression à mettre en correspondance avec le corps de la réponse.
  • replacement: valeur de remplacement.

L’exemple suivant configure une RewriteJsonAttributesResponseBody fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
        ]
    }
]

Rôles

La Roles fabrique autorise les requêtes qui contiennent l’un des rôles configurés.

Cette fabrique accepte le paramètre de configuration suivant :

  • roles: liste séparée par des virgules des rôles autorisés.

L’exemple suivant configure une Roles fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Roles=role_01,role_02"
        ]
    }
]

Étendues

La Scopes fabrique autorise les requêtes qui contiennent l’une des étendues configurées OAuth .

Cette fabrique accepte le paramètre de configuration suivant :

  • scopes: liste séparée par des virgules des étendues autorisées OAuth .

L’exemple suivant configure une Scopes fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Scopes=api.read,api.write,user"
        ]
    }
]

StoreIpAddress

La StoreIPAddress fabrique est utilisée uniquement pour le développement d’extensions et dans le contexte de l’application.

Cette fabrique accepte le paramètre de configuration suivant :

  • attribute name: nom utilisé pour stocker l’adresse IP en tant qu’attribut d’échange.

L’exemple suivant configure une StoreIPAddress fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreIpAddress=ip"
        ]
    }
]

Connexion de l’authentification unique

La SSO login fabrique redirige vers l’authentification s’il n’existe aucun jeton d’autorisation valide. Cette fabrique est configurée comme valeur boolean dans la définition de route plutôt qu’un filtre explicite.

L’exemple suivant configure une SSO login fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "ssoEnabled": true
    }
]

StoreHeader

La StoreHeader fabrique stocke une valeur d’en-tête dans le contexte de l’application. Ce filtre est utilisé uniquement pour le développement d’extensions.

Cette fabrique accepte les paramètres de configuration suivants :

  • headers: liste d’en-têtes à case activée. Le premier trouvé est utilisé.
  • attribute name: nom utilisé pour stocker la valeur d’en-tête en tant qu’attribut d’échange.

L’exemple suivant configure une StoreHeader fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
        ]
    }
]

XmlToJson

La fabrique transforme le XmlToJson corps de la réponse XML en corps de réponse JSON.

Il n’existe aucun paramètre pour cette fabrique.

L’exemple suivant configure une XmlToJson fabrique :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "XmlToJson"
        ]
    }
]

Étapes suivantes