Partager via


Migrer Spring Cloud Gateway pour VMWare Tanzu vers une application de passerelle auto-hébergée dans Azure Container Apps

Remarque

Les abonnements Basic, Standard et Enterprise sont entrés dans une période de retraite le 17 mars 2025. Pour plus d’informations, consultez l’annonce de la mise hors service d’Azure Spring Apps.

Cet article s’applique à : ❎ Essentiel/Standard ✅ Entreprise

Cet article vous montre comment migrer un projet Spring Cloud Gateway pour VMWare Tanzu exécuté sur le plan Azure Spring Apps Enterprise vers un projet Spring Cloud Gateway open source auto-hébergé s’exécutant en tant qu’application Azure Container Apps.

La version OSS de Spring Cloud Gateway mentionnée dans cette page est fournie à titre d’exemple. Vous pouvez choisir d’autres distributions de Spring Cloud Gateway en fonction de vos besoins.

Remarque

Les fonctionnalités offertes par Spring Cloud Gateway pour VMWare Tanzu sont plus étendues que celles de la version OSS. Assurez-vous d’examiner les différences et de vous assurer de la compatibilité avant de passer à la production.

Prérequis

Préparation du code de l’application Spring Cloud Gateway auto-hébergée

Pour obtenir le code de l’application Spring Cloud Gateway, procédez comme suit :

  1. Accédez à https://start.spring.io.
  2. Mettez à jour les métadonnées du projet en définissant le champ Groupe sur le nom de votre organisation. Remplacez les champs Artefact et Name par gateway.
  3. Ajoutez les dépendances Reactive Gateway et Spring Boot Actuator.
  4. Laissez les autres propriétés à leurs valeurs par défaut.
  5. Sélectionnez Générer pour télécharger le projet.
  6. Une fois le projet téléchargé, extrayez-le.

Configurer l’application Spring Cloud Gateway

Maintenant que vous avez téléchargé l’application Spring Cloud Gateway, vous allez la configurer dans les sections suivantes.

Configurer le fichier de propriétés de l’application

Pour configurer le fichier de propriétés de l’application, procédez comme suit :

  1. Accédez au répertoire gateway/src/main/resources du projet.

  2. Renommez le fichier application.properties en application.yml.

  3. Modifiez le fichier application.yml. Le fichier application.yml suivant est typique :

    spring:
      application:
        name: gateway
      cloud:
        gateway:
          globalcors:
            corsConfigurations:
              '[/**]':
                allowedOriginPatterns: "*"
                allowedMethods:
                - GET
                - POST
                - PUT
                - DELETE
                allowedHeaders:
                - "*"
                allowCredentials: true
                maxAge: 3600
          routes:
          - id: front
            uri: http://front-app
            predicates:
            - Path=/**
            - Method=GET
            order: 1000
            filters:
            - StripPrefix=0
            tags:
            - front
    

Configuration de CORS

Pour migrer la configuration CORS (Cross-Origin Resource Sharing) de votre projet Spring Cloud Gateway pour VMWare Tanzu, consultez Configuration CORS pour la configuration CORS globale et routez la configuration CORS.

Échelle

Lorsque vous migrez vers une application Spring Cloud Gateway dans Azure Container Apps, le comportement de mise à l’échelle doit s’aligner sur le modèle Azure Container Apps. Le nombre d’instances de Spring Cloud Gateway pour VMWare Tanzu est mappé à min-replica et max-replica dans Azure Container Apps. Vous pouvez configurer la mise à l’échelle automatique de l’application de passerelle en définissant des règles de mise à l’échelle. Pour plus d’informations, consultez Définir des règles de mise à l’échelle dans Azure Container Apps.

Les combinaisons de processeur et de mémoire disponibles dans Azure Spring Apps diffèrent de celles disponibles dans Azure Container Apps. Lors du mappage des allocations de ressources, assurez-vous que les configurations de processeur et de mémoire sélectionnées dans Azure Container Apps répondent à la fois à vos besoins en matière de performances et aux options prises en charge.

Domaines personnalisés et certificats

Azure Container Apps prend en charge les domaines et les certificats personnalisés. Pour plus d’informations sur la migration de domaines personnalisés configurés sur Spring Cloud Gateway pour VMWare Tanzu, consultez Certificats dans Azure Container Apps.

Itinéraires

Vous pouvez migrer les itinéraires dans Spring Cloud Gateway pour Tanzu vers Spring Cloud Gateway, comme le montre l’exemple application.yml. La liste suivante décrit la relation de mappage entre les itinéraires de Spring Cloud Gateway pour VMWare Tanzu et les itinéraires de Spring Cloud Gateway :

  • La propriété name de l’itinéraire est mappée sur id.
  • Les propriétés appName et protocol sont mappées à l’URI de l’itinéraire, qui doit être l’URI accessible pour l’instance Azure Container Apps. Assurez-vous que les applications Azure Container Apps activent l’entrée.
  • Les prédicats et les filtres de Spring Cloud Gateway pour VMWare Tanzu sont mappés aux prédicats et filtres de Spring Cloud Gateway. Les prédicats et filtres commerciaux ne sont pas pris en charge. Pour plus d’informations, consultez Filtres de routage commercial dans Spring Cloud Gateway pour K8s.

À titre d’exemple, considérons le fichier JSON de configuration d’itinéraire suivant, test-api.json, qui définit l’itinéraire test-api dans Spring Cloud Gateway pour VMWare Tanzu pour l’application test :

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddRequestHeader=X-Request-red, blue"
      ]
    }
  ]
}

Ensuite, le fichier YAML suivant affiche la configuration d’itinéraire correspondante pour l’application Spring Cloud Gateway :

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/test/api/healthcheck
        - Method=GET
        filters:
        - AddRequestHeader=X-Request-red, blue
        - StripPrefix=1

Spring Cloud Gateway pour VMWare Tanzu définit StripPrefix=1 par défaut sur chaque itinéraire. Pour migrer vers Spring Cloud Gateway, vous devez définir explicitement StripPrefix=1 dans la configuration du filtre.

Pour permettre à votre application Spring Cloud Gateway d’accéder à d’autres applications via le nom de l’application, vous devez activer l’entrée pour vos applications Azure Container App. Vous pouvez également définir le nom de domaine complet (FQDN) accessible de l’application Azure Container Apps comme URI de l’itinéraire, en suivant le format https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Remarque

Certains prédicats et filtres commerciaux ne sont pas pris en charge sur Spring Cloud Gateway.

Cache de réponse

Si vous activez le cache de réponse globalement dans Spring Cloud Gateway pour VMWare Tanzu, utilisez la configuration suivante dans Spring Cloud Gateway. Pour plus d’informations, consultez Filtre de cache de réponse locale.

spring:
  cloud:
    gateway:
      filter:
        local-response-cache:
          enabled: true
          time-to-live: <response-cache-ttl>
          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 gérée pour Spring à l’aide de l’exemple suivant :

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/resource
        filters:
        - LocalResponseCache=30m,500MB

Intégrer avec APM

Vous pouvez activer la surveillance des performances des applications (APM) pour votre application Spring Cloud Gateway. Pour plus d’informations, consultez Intégrer l’analyse des performances des applications dans des images conteneur.

Déployer sur Azure Container Apps

Une fois que la configuration de Spring Cloud Gateway est prête, créez l’image à l’aide d’Azure Container Registry et déployez-la sur Azure Container Apps.

Générer et envoyer l’image Docker

Pour générer et envoyer l’image Docker, procédez comme suit :

  1. Dans le répertoire du projet Spring Cloud Gateway, créez un fichier Dockerfile avec le contenu suivant :

    Remarque

    Vous pouvez également utiliser l’exemple de fichier Dockerfile ACME Fitness Store.

    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as build
    WORKDIR /staging
    # Install gradle
    RUN tdnf install -y wget unzip
    
    RUN wget https://services.gradle.org/distributions/gradle-8.8-bin.zip && \
        unzip -d /opt/gradle gradle-8.8-bin.zip && \
        chmod +x /opt/gradle/gradle-8.8/bin/gradle
    
    ENV GRADLE_HOME=/opt/gradle/gradle-8.8
    ENV PATH=$PATH:$GRADLE_HOME/bin
    
    COPY . .
    
    # Compile with gradle
    RUN gradle build -x test
    
    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as runtime
    
    WORKDIR /app
    
    COPY --from=build /staging/build/libs/gateway-0.0.1-SNAPSHOT.jar .
    
    ENTRYPOINT ["java", "-jar", "gateway-0.0.1-SNAPSHOT.jar"]
    
  2. Utilisez les commandes suivantes pour générer l’image de la passerelle :

    az acr login --name <azure-container-registry-name>
    az acr build \
        --resource-group <resource-group-name> \
        --image gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT \
        --registry <azure-container-registry-name> \
        --file Dockerfile .
    
  3. Assurez-vous que l’image de passerelle est générée et obtenez la balise image, qui utilise le format suivant : <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT.

Déployer l’image dans Azure Container Apps

Une fois que l’image de votre application de passerelle est prête, déployez-la en tant qu’application Azure Container Apps à l’aide de la commande suivante. Remplacez l’espace réservé <container-image-of-gateway> par la balise d’image récupérée à l’étape précédente.

az containerapp up \
    --resource-group <resource-group-name> \
    --name gateway \
    --environment <azure-container-app-environment-name> \
    --image <container-image-of-gateway> \
    --target-port 8080 \
    --ingress external

Accédez au nom de domaine complet de l’application Spring Cloud Gateway pour vérifier qu’elle est en cours d’exécution.

Dépannage

Si vous rencontrez des problèmes lors de l’exécution de l’application Spring Cloud Gateway, vous pouvez afficher les journaux en temps réel et d’historique de l’application gateway dans Azure Container Apps. Pour plus d’informations, consultez Journalisation des applications dans Azure Container Apps.

Vous pouvez également surveiller les métriques d’une application de passerelle. Pour plus d’informations, consultez Surveiller les métriques Azure Container Apps.

Limitation connue

OSS Spring Cloud Gateway ne prend pas en charge nativement les fonctionnalités commerciales suivantes :

  • Métadonnées utilisées pour générer la documentation OpenAPI.
  • Fonctionnalité d’authentification unique (SSO).

Si vous avez besoin de ces fonctionnalités, vous devrez peut-être envisager d’autres solutions commerciales, telles que Spring Cloud Gateway pour VMWare Tanzu.