Utiliser Spring Cloud Gateway
Remarque
Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.
Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.
Cet article s’applique à : ❎ Essentiel/Standard ✅ Entreprise
Cet article vous montre comment utiliser VMware Spring Cloud Gateway avec le plan Entreprise d’Azure Spring Apps pour router les requêtes 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.
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 des revendications JWT (JSON Web Token) autorisées vers les 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 son intégration au portail des API pour VMware Tanzu, VMware Spring Cloud Gateway génère automatiquement la documentation d’OpenAPI version 3 après des ajouts ou des modifications à la configuration du routage.
Prérequis
- Une instance de service du plan Entreprise d’Azure Spring Apps déjà approvisionnée, avec Spring Cloud Gateway activé. Pour plus d’informations, consultez Démarrage rapide : Générer et déployer des applications sur Azure Spring Apps à l’aide du plan Enterprise.
- Azure CLI version 2.0.67 ou ultérieure. Utilisez la commande suivante pour installer l’extension Azure Spring Apps :
az extension add --name spring
.
Configurer des itinéraires
Cette section explique comment ajouter, mettre à jour et gérer des routes d’API pour les applications qui utilisent Spring Cloud Gateway.
La définition de configuration des routes comprend les éléments suivants :
- URI OpenAPI : cet URI fait référence à une spécification OpenAPI. Vous pouvez utiliser un point de terminaison d’URI public tel que
https://petstore3.swagger.io/api/v3/openapi.json
ou un URI construit tel quehttp://<app-name>/{relative-path-to-OpenAPI-spec}
, où<app-name>
est le nom d’une application dans Azure Spring Apps qui inclut la définition d’API. Les spécifications OpenAPI 2.0 et OpenAPI 3.0 sont prises en charge. La spécification s’affiche dans le portail des API si elle est activée. - routes : une liste de règles d’itinéraire pour diriger le trafic vers les applications et appliquer des filtres.
- Protocole : protocole principal de l’application vers laquelle Spring Cloud Gateway achemine le trafic. Les valeurs prises en charge du protocole sont
HTTP
ouHTTPS
, et la valeur par défaut estHTTP
. Pour sécuriser le trafic de Spring Cloud Gateway vers votre application compatible HTTPS, vous devez définir le protocole surHTTPS
dans votre configuration de routage. - routes au niveau de l’application : il existe trois propriétés de routage que vous pouvez configurer au niveau de l’application pour éviter des répétitions sur la totalité ou la plupart des routes dans la configuration des routes. La règle de routage concrète remplace la règle de routage au niveau de l’application pour la même propriété. Vous pouvez définir les propriétés suivantes au niveau de l’application :
predicates
,filters
etssoEnabled
. Si vous utilisez la fonctionnalitéOpenAPI URI
pour définir des routes, la seule propriété de routage au niveau de l’application à prendre en charge estfilters
.
Utilisez la commande suivante pour créer une configuration de routage. La valeur de --app-name
doit être le nom d’une application hébergée dans Azure Spring Apps vers laquelle les requêtes sont routées.
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app-name <app-name> \
--routes-file <routes-file.json>
L’exemple suivant montre un fichier JSON transmis au paramètre --routes-file
dans la commande de création :
{
"predicates": [
"<app-level-predicate-of-route>",
],
"ssoEnabled": false,
"filters": [
"<app-level-filter-of-route>",
],
"openApi": {
"uri": "<OpenAPI-URI>"
},
"protocol": "<protocol-of-routed-app>",
"routes": [
{
"title": "<title-of-route>",
"description": "<description-of-route>",
"predicates": [
"<predicate-of-route>",
],
"ssoEnabled": true,
"filters": [
"<filter-of-route>",
],
"tags": [
"<tag-of-route>"
],
"order": 0
}
]
}
Le tableau suivant répertorie les définitions de routes. Toutes ces propriétés sont facultatives.
Propriété | Description |
---|---|
title | Un titre à appliquer aux méthodes dans la documentation OpenAPI générée. |
description | Une description à appliquer aux méthodes dans la documentation OpenAPI générée. |
URI | L’URI complet, qui remplace le nom de l’application vers laquelle les requêtes sont routées. |
ssoEnabled | Une valeur qui indique s'il faut activer la validation d’authentification unique. Consultez Configurer l’authentification unique. |
tokenRelay | Passe le jeton d’identité de l’utilisateur actuellement authentifié à l’application. |
prédicats | Liste de prédicats. Consultez Prédicats disponibles. |
filters | Liste de filtres. Consultez Filtres disponibles. |
order | L’ordre de traitement de l’itinéraire Un ordre inférieur est traité avec une priorité plus élevée, comme dans Spring Cloud Gateway. |
tags | Des étiquettes de classification qui sont appliquées aux méthodes dans la documentation OpenAPI générée. |
Remarque
Tous les filtres ou les prédicats ne sont pas pris en charge dans Azure Spring Apps pour des raisons de sécurité et de compatibilité. Les éléments suivants ne sont pas pris en charge :
- BasicAuth
- JWTKey
Utilisez des itinéraires pour Spring Cloud Gateway.
Effectuez les étapes suivantes pour créer un exemple d’application à l’aide de Spring Cloud Gateway.
Utilisez la commande suivante pour créer une application de test nommée test-app dans Azure Spring Apps :
az spring app create \ name test-app \ resource-group <resource-group-name> \ service <Azure-Spring-Apps-instance-name>
Affectez un point de terminaison public à la passerelle pour y accéder.
Pour afficher l’état d’exécution et les ressources fournies à Spring Cloud Gateway, ouvrez votre instance d’application Azure Spring Apps dans le Portail Microsoft Azure, sélectionnez la section Spring Cloud Gateway, puis sélectionnez Vue d’ensemble.
Sélectionnez Oui en regard de Affecter un point de terminaison pour attribuer un point de terminaison public. Une URL apparaît au bout de quelques minutes. Enregistrez l’URL pour l’utiliser plus tard.
Vous pouvez également utiliser Azure CLI pour affecter les points de terminaison. Utilisez la commande suivante pour affecter le point de terminaison.
az spring gateway update \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --assign-endpoint true
Créez une règle pour accéder au point de terminaison de contrôle d’intégrité de l’application de test via Spring Cloud Gateway.
Enregistrez le contenu suivant dans un fichier test-api.json . Cette configuration inclut un filtre RateLimit, qui autorise 20 requêtes toutes les 10 secondes, et un filtre RewritePath, qui permet au point de terminaison de la requête d’atteindre le point de terminaison de contrôle d’intégrité Spring Boot standard.
{ "protocol": "HTTP", "routes": [ { "title": "Test API", "description": "Retrieve a health check from our application", "predicates": [ "Path=/test/api/healthcheck", "Method=GET" ], "filters": [ "RateLimit=20,10s", "RewritePath=/api/healthcheck,/actuator/health" ], "tags": [ "test" ] } ] }
Puis, utilisez la commande suivante pour appliquer la règle à l’application
test-app
:az spring gateway route-config create \ --name test-api-routes \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --app-name test-app \ --routes-file test-api.json
Vous pouvez également afficher les itinéraires dans le portail, comme illustré dans la capture d’écran suivante :
Utilisez la commande suivante pour accéder aux
test health check
API par le biais du point de terminaison de passerelle :curl https://<endpoint-url>/test/api/healthcheck
Utilisez les commandes suivantes pour interroger les règles d’acheminement :
az spring gateway route-config show \ --name test-api-routes \ --query '{appResourceId:properties.appResourceId, routes:properties.routes}' az spring gateway route-config list \ --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
Utiliser des filtres
Le projet open source Spring Cloud Gateway inclut de nombreux filtres intégrés à utiliser dans les itinéraires de passerelle. Spring Cloud Gateway fournit de nombreux filtres personnalisés en plus des filtres inclus dans le projet du logiciel Open Source (OSS).
L’exemple suivant montre comment appliquer le filtre AddRequestHeadersIfNotPresent
à une route :
[
{
"predicates": [
"Path=/api/**",
"Method=GET"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
Ensuite, appliquez la définition de route à l’aide de la commande Azure CLI suivante :
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name>
--routes-file <json-file-with-routes>
Pour plus d’informations sur les filtres de routes disponibles, consultez Comment utiliser les filtres de routes de VMware Spring Cloud Gateway avec le plan Entreprise d’Azure Spring Apps.