Migrer Spring Cloud Gateway pour Tanzu vers une passerelle managée pour Spring dans Azure Container Apps
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 explique comment migrer VMware Spring Cloud Gateway dans Azure Spring Apps plan Enterprise vers Managed Gateway for Spring in Azure Container Apps à l’aide d’Azure CLI.
Prérequis
- Une instance de plan Azure Spring Apps Enterprise existante avec Spring Cloud Gateway activé.
- Une application conteneur Azure existante. Pour plus d’informations, consultez Démarrage rapide : Déployer votre première application de conteneur avec le portail Azure.
- Azure CLI.
Approvisionner une passerelle managée pour Spring
Utilisez la commande suivante pour approvisionner le composant Gateway pour Spring Java dans l’environnement Azure Container Apps que vous avez créé dans les conditions préalables :
az containerapp env java-component gateway-for-spring create \
--resource-group <resource-group-name> \
--name <gateway-name> \
--environment <azure-container-app-environment-name>
Une fois que vous avez créé le composant, vous pouvez voir que la valeur d’État d’approvisionnement de Spring Cloud Gateway est Réussi.
Gestion des ressources
L'allocation des ressources du conteneur pour la passerelle pour Spring dans Azure Container Apps est fixé aux valeurs suivantes :
- CPU : 0.5 vCPU
- Memory : 1 Gi
Pour configurer le nombre d’instances pour la passerelle pour Spring, utilisez les paramètres --min-replicas
et --max-replicas
; définissez les deux sur la même valeur. Cette configuration garantit que le nombre d'instances reste fixe. Actuellement, le système ne prend pas en charge les configurations de mise à l’échelle automatique dynamique.
Configurer la passerelle pour Spring
Après avoir approvisionné la passerelle, l’étape suivante consiste à la configurer pour une migration fluide.
Vous pouvez mettre à jour la configuration et les itinéraires du composant Gateway for Spring à l’aide de la commande update
, comme illustré dans l’exemple suivant :
az containerapp env java-component gateway-for-spring update \
--resource-group <resource-group-name> \
--name <gateway-name> \
--environment <azure-container-app-environment-name> \
--configuration <configuration-key>="<configuration-value>" \
--route-yaml <path-to-route-YAML-file>
Configuration de CORS
Pour migrer la configuration globale de partage de ressources cross-origin (CORS) de VMware Spring Cloud Gateway, vous devez mapper les propriétés au format <configuration-key>="<configuration-value>"
. La relation de mappage est illustrée dans le tableau suivant :
Nom de propriété dans VMware Spring Cloud Gateway | Configuration dans la passerelle pour Spring |
---|---|
Origines autorisées | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>] |
Modèles d’origine autorisés | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>] |
Méthodes autorisées | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>] |
En-têtes autorisés | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>] |
Âge maximal | spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge |
Autoriser les informations d’identification | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials |
En-têtes exposés | spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>] |
Par exemple, si vous avez une configuration comme allowedOrigins:["https://example.com","https://example1.com"]
dans VMware Spring Cloud Gateway, vous devez mettre à jour la passerelle pour Spring avec le paramètre suivant :
--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com
Pour la configuration CORS par itinéraire, vous devez remplacer « /** » dans la clé de configuration par le chemin d’accès de routage. Par exemple, si vous avez un itinéraire avec le chemin d’accès /v1/**
, vous devez configurer spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>]
.
Itinéraires
Le composant Gateway for Spring prend en charge la définition d’itinéraires par le biais des propriétés id
, uri
, predicates
et filters
, comme indiqué dans l’exemple suivant :
springCloudGatewayRoutes:
- id: "route1"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v1/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
- id: "route2"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v2/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
La liste suivante décrit la relation de mappage entre les itinéraires de VMware Spring Cloud Gateway et les itinéraires de Gateway for Spring :
- Le
name
de l’itinéraire est mappé àid
. - Les
appName
etprotocol
sont mappés à l’URI de l’itinéraire, qui doit être l’URI accessible pour l’instance Azure Container Apps. - Les prédicats et filtres Spring Cloud Gateway sont mappés à la passerelle pour les prédicats Spring et les filtres.
Par exemple, supposons que le fichier json de configuration d’itinéraire suivant, appelé test-api.json soit créé pour VMware Spring Cloud Gateway :
{
"protocol": "HTTP",
"routes": [
{
"title": "Test API",
"predicates": [
"Path=/test/api/healthcheck",
"Method=GET"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
}
Supposons que vous utilisez la commande suivante pour appliquer la règle à l’application Azure Spring Apps test-app
:
az spring gateway route-config create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name test-api \
--app-name test-app \
--routes-file test-api.json
Ensuite, l’exemple suivant montre le fichier YAML de routage correspondant test-api.yml pour Gateway for Spring sur Azure Container Apps :
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/test/api/healthcheck
- Method=GET
filters:
- AddResponseHeader=X-Response-Red, Blue
Vous devez également utiliser la commande suivante pour mettre à jour l’application conteneur :
az containerapp env java-component gateway-for-spring update \
--route-yaml test-api.yml
Vous devez activer l’entrée de votre application Azure Container App pour obtenir son nom de domaine complet (FQDN). Ensuite, remplacez <app-FQDN-in-Azure-Container-Apps>
dans l’URI de l’itinéraire par le point de terminaison accessible de l’application. Le format d’URI est https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io
.
Il existe des prédicats commerciaux et des filtres commerciaux qui ne sont pas pris en charge sur Gateway for Spring sur Azure Container Apps.
Cache de réponse
Si vous activez le cache de réponse globalement, vous pouvez mettre à jour la passerelle managée pour Spring avec la configuration suivante :
spring.cloud.gateway.filter.local-response-cache.enabled=true
spring.cloud.gateway.filter.local-response-cache.time-to-live=<response-cache-ttl>
spring.cloud.gateway.filter.local-response-cache.size=<response-cache-size>
Si vous activez le cache de réponse pour l’itinéraire, vous pouvez utiliser le filtre LocalResponseCache
dans la configuration de la règle de routage de la passerelle managée pour Spring en tant que YAML suivant :
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/v1/**
- Method=GET
filters:
- LocalResponseCache=3m, 1MB
Dépannage
Vous pouvez afficher les journaux d’activité de Gateway for Spring dans Azure Container Apps à l’aide de Log Analytics
en procédant comme suit :
Dans le portail Azure, accédez à votre environnement Azure Container Apps.
Dans le volet de navigation, sélectionnez Surveillance>Journaux d'activité
Pour afficher les journaux, interrogez la table
ContainerAppSystemLogs_CL
à l’aide de l’éditeur de requête, comme illustré dans l’exemple suivant :ContainerAppSystemLogs_CL | where ComponentType_s == "SpringCloudGateway" | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s | take 100
Pour plus d’informations sur l’interrogation des journaux, consultez Observabilité des composants Java gérés dans Azure Container Apps.
Limitation connue
Pour l’instant, Gateway for Spring sur Azure Container Apps ne prend pas en charge certaines fonctionnalités commerciales, notamment les métadonnées utilisées pour générer la documentation OpenAPI, l’authentification unique (SSO) et l’intégration de l’analyse des performances des applications (APM).
Il existe un problème connu où l’activation de Gateway for Spring empêche l’ouverture de la section Services dans le portail Azure. Nous prévoyons bientôt de résoudre ce problème.