Partage via


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

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, predicateset 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 et protocol 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 :

  1. Dans le portail Azure, accédez à votre environnement Azure Container Apps.

  2. Dans le volet de navigation, sélectionnez Surveillance>Journaux d'activité

  3. 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.