Sdílet prostřednictvím


Migrace brány Spring Cloud pro VMWare Tanzu do aplikace brány v místním prostředí v Azure Container Apps

Poznámka:

Plány Basic, Standard a Enterprise vstoupily do období vyřazení 17. března 2025. Další informace najdete v oznámení o vyřazení Azure Spring Apps.

Tento článek se vztahuje na: ❎ Basic/Standard ✅ Enterprise

V tomto článku se dozvíte, jak migrovat projekt Spring Cloud Gateway pro VMWare Tanzu spuštěný v plánu Azure Spring Apps Enterprise do místního opensourcového softwaru (OSS) Spring Cloud Gateway běžícího jako aplikace Azure Container Apps.

Jako příklad je k dispozici verze brány Spring Cloud uvedené na této stránce. Na základě vašich požadavků můžete zvolit další distribuce brány Spring Cloud.

Poznámka:

Funkce nabízené službou Spring Cloud Gateway pro VMWare Tanzu jsou rozsáhlejší než funkce ve verzi operačního systému. Před přechodem do produkčního prostředí nezapomeňte prozkoumat rozdíly a zajistit kompatibilitu.

Požadavky

Příprava kódu aplikace Spring Cloud Gateway v místním prostředí

Kód aplikace Spring Cloud Gateway získáte pomocí následujících kroků:

  1. Přejděte na https://start.spring.io.
  2. Aktualizujte metadata projektu nastavením pole Skupina na název vaší organizace. Změňte pole Artefakt a Název na gateway.
  3. Přidejte závislosti Reactive Gateway a Spring Boot Actuator.
  4. U ostatních vlastností ponechte výchozí hodnoty.
  5. Vyberte Možnost Generovat a stáhněte si projekt.
  6. Po stažení projektu ho extrahujte.

Konfigurace aplikace Spring Cloud Gateway

Teď, když jste stáhli aplikaci Spring Cloud Gateway, ji nakonfigurujete v dalších částech.

Konfigurace souboru vlastností aplikace

Ke konfiguraci souboru vlastností aplikace použijte následující kroky:

  1. Přejděte do adresáře gateway/src/main/resources projektu.

  2. Přejmenujte soubor application.properties na application.yml.

  3. Upravte soubor application.yml . Typický je následující soubor application.yml :

    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
    

Konfigurace CORS

Pokud chcete migrovat konfiguraci sdílení prostředků mezi zdroji (CORS) brány Spring Cloud pro projekt VMWare Tanzu, přečtěte si téma Konfigurace CORS pro globální konfiguraci CORS a konfiguraci CORS tras.

Škála

Když migrujete do aplikace Spring Cloud Gateway v Azure Container Apps, chování škálování by mělo odpovídat modelu Azure Container Apps. Počet instancí ze Spring Cloud Gateway pro VMWare Tanzu odpovídá min-replica a max-replica v Azure Container Apps. Automatické škálování pro aplikaci brány můžete nakonfigurovat definováním pravidel škálování. Další informace najdete v tématu Nastavení pravidel škálování v Azure Container Apps.

Kombinace procesoru a paměti dostupné v Azure Spring Apps se liší od kombinací dostupných v Azure Container Apps. Při mapování přidělení prostředků se ujistěte, že vybrané konfigurace procesoru a paměti ve službě Azure Container Apps odpovídají vašim potřebám výkonu i podporovaným možnostem.

Vlastní domény a certifikáty

Azure Container Apps podporuje vlastní domény a certifikáty. Další informace o migraci vlastních domén nakonfigurovaných ve službě Spring Cloud Gateway pro VMWare Tanzu najdete v tématu Certifikáty v Azure Container Apps.

Trasy

Trasy můžete migrovat z brány Spring Cloud Gateway pro Tanzu do brány Spring Cloud Gateway, jak je ukázáno na příkladu application.yml. Následující seznam popisuje vztah mapování mezi trasami brány Spring Cloud pro VMWare Tanzu a trasami brány Spring Cloud:

  • Vlastnost name trasy je mapována na id.
  • Vlastnosti appName a protocol se mapují na identifikátor URI trasy, což by měl být přístupný identifikátor URI pro instanci Azure Container Apps. Ujistěte se, že aplikace Azure Container Apps umožňují přístup zvenčí.
  • Predikáty a filtry brány Spring Cloud pro VMWare Tanzu se mapují na predikáty a filtry brány Spring Cloud. Komerční predikáty a filtry se nepodporují. Další informace naleznete v Filtrech komerčních tras v bráně Spring Cloud pro K8s.

Představte si například následující konfigurační soubor JSON trasy test-api.json, který definuje trasu test-api ve službě Spring Cloud Gateway pro VMWare Tanzu pro test aplikaci:

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

Následující soubor YAML pak zobrazí odpovídající konfiguraci trasy pro aplikaci 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

Brána Spring Cloud pro VMWare Tanzu se ve výchozím nastavení nastavuje StripPrefix=1 na každé trase. Pokud chcete migrovat na bránu Spring Cloud, musíte v konfiguraci filtru explicitně nastavit StripPrefix=1 .

Pokud chcete, aby vaše aplikace Spring Cloud Gateway mohla přistupovat k jiným aplikacím prostřednictvím názvu aplikace, musíte povolit vstupní datový tok pro vaše aplikace Azure Container Apps. Můžete také nastavit přístupný plně kvalifikovaný název domény (FQDN) aplikace Azure Container Apps tak, aby byl identifikátor URI trasy, a to podle formátu https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Poznámka:

Ve službě Spring Cloud Gateway se nepodporují některé komerční predikáty a komerční filtry .

Mezipaměť odpovědí

Pokud v bráně Spring Cloud Gateway pro VMWare Tanzu povolíte globální mezipaměť odpovědí, použijte v bráně Spring Cloud následující konfiguraci. Další informace naleznete v tématu Místní filtr mezipaměti odpovědi.

spring:
  cloud:
    gateway:
      filter:
        local-response-cache:
          enabled: true
          time-to-live: <response-cache-ttl>
          size: <response-cache-size>

Pokud pro trasu povolíte mezipaměť odpovědí, můžete použít LocalResponseCache filtr v konfiguraci pravidla směrování spravované brány pro Spring pomocí následujícího příkladu:

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

Integrace s APM

Pro aplikaci Spring Cloud Gateway můžete povolit monitorování výkonu aplikací (APM). Další informace najdete v tématu Integrace monitorování výkonu aplikací do imagí kontejnerů.

Nasazení do aplikací Azure Container Apps

Jakmile je konfigurace brány Spring Cloud připravená, sestavte image pomocí služby Azure Container Registry a nasaďte ji do Azure Container Apps.

Sestavení a nasdílení image Dockeru

K sestavení a nasdílení image Dockeru použijte následující postup:

  1. V adresáři projektu Spring Cloud Gateway vytvořte soubor Dockerfile s následujícím obsahem:

    Poznámka:

    Alternativně použijte ukázkový soubor 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. K sestavení image brány použijte následující příkazy:

    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. Ujistěte se, že je vytvořen obraz brány, a získejte štítek obrazu, který používá následující formát: <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT.

Nasazení obrazu v Azure Container Apps

Jakmile je image aplikace brány připravená, nasaďte ji jako aplikaci Azure Container Apps pomocí následujícího příkazu. Nahraďte zástupný symbol <container-image-of-gateway> značkou obrázku, která byla načtena v předchozím kroku.

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

Získejte přístup k FQDN Spring Cloud Gateway aplikace a ověřte, zda je spuštěna.

Řešení problému

Pokud při spuštění aplikace Spring Cloud Gateway narazíte na problémy, můžete zobrazit záznamy aplikace v reálném čase a historické záznamy aplikace ve službě Azure Container Apps. Další informace najdete v tématu Protokolování aplikace v Azure Container Apps.

Můžete také monitorovat metriky aplikace brány. Další informace najdete v tématu Monitorování metrik Azure Container Apps.

Známé omezení

OSS Spring Cloud Gateway nativně nepodporuje následující komerční funkce.

  • Metadata používaná k vygenerování dokumentace OpenAPI
  • Funkce jednotného přihlašování (SSO)

Pokud tyto funkce potřebujete, možná budete muset zvážit další komerční řešení, jako je Spring Cloud Gateway pro VMWare Tanzu.