Partilhar via


Migrar o Spring Cloud Gateway para VMWare Tanzu para uma aplicação de gateway auto-hospedada nos Azure Container Apps

Nota

Os planos Basic, Standard e Enterprise entraram em um período de aposentadoria em 17 de março de 2025. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

Este artigo aplica-se a: ❎ Basic/Standard ✅ Enterprise

Este artigo mostra como migrar um projeto do Spring Cloud Gateway para VMWare Tanzu em execução no plano do Azure Spring Apps Enterprise para um projeto Spring Cloud Gateway auto-hospedado e de software de código aberto (OSS) em execução como um aplicativo do Azure Container Apps.

A versão OSS do Spring Cloud Gateway mencionada nesta página é fornecida como um exemplo para referência. Você pode escolher outras distribuições do Spring Cloud Gateway com base em suas necessidades.

Nota

Os recursos oferecidos pelo Spring Cloud Gateway para VMWare Tanzu são mais extensos do que os recursos na versão OSS. Certifique-se de examinar as diferenças e garantir a compatibilidade antes de passar para a produção.

Pré-requisitos

Preparar o código do aplicativo Spring Cloud Gateway auto-hospedado

Para obter o código do aplicativo Spring Cloud Gateway, use as seguintes etapas:

  1. Navegue até https://start.spring.io.
  2. Atualize os metadados do projeto definindo o campo Grupo com o nome da sua organização. Altere os campos Artefato e Nome para gateway.
  3. Adicione as dependências Reative Gateway e Spring Boot Actuator .
  4. Deixe as outras propriedades em seus valores padrão.
  5. Selecione Gerar para baixar o projeto.
  6. Após o download do projeto, extraia-o.

Configurar o aplicativo Spring Cloud Gateway

Agora que você baixou o aplicativo Spring Cloud Gateway, você o configura nas próximas seções.

Configurar o arquivo de propriedades do aplicativo

Para configurar o arquivo de propriedades do aplicativo, use as seguintes etapas:

  1. Navegue até o diretório gateway/src/main/resources do projeto.

  2. Renomeie o arquivo application.properties para application.yml.

  3. Edite o arquivo application.yml . O seguinte arquivo application.yml é típico:

    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
    

Configuração do CORS

Para migrar a configuração de compartilhamento de recursos entre origens (CORS) do seu projeto Spring Cloud Gateway para VMWare Tanzu, consulte Configuração de CORS para configuração global de CORS e configuração de CORS de rota.

Escala

Quando você migra para um aplicativo Spring Cloud Gateway em Aplicativos de Contêiner do Azure, o comportamento de dimensionamento deve se alinhar com o modelo de Aplicativos de Contêiner do Azure. A contagem de instâncias do Spring Cloud Gateway para VMWare Tanzu é mapeada para min-replica e max-replica nos Aplicativos de Contêiner do Azure. Você pode configurar o dimensionamento automático para o aplicativo de gateway definindo regras de dimensionamento. Para obter mais informações, consulte Definir regras de dimensionamento em Aplicativos de Contêiner do Azure.

As combinações de CPU e memória disponíveis nos Aplicativos Azure Spring diferem das combinações disponíveis nos Aplicativos de Contêiner do Azure. Ao mapear alocações de recursos, certifique-se de que as configurações de CPU e memória selecionadas nos Aplicativos de Contêiner do Azure atendam às suas necessidades de desempenho e às opções com suporte.

Domínios personalizados e certificados

Os Aplicativos de Contêiner do Azure dão suporte a domínios e certificados personalizados. Para obter mais informações sobre como migrar domínios personalizados configurados no Spring Cloud Gateway para VMWare Tanzu, consulte Certificados em aplicativos de contêiner do Azure.

Rotas

Pode migrar as rotas do Spring Cloud Gateway for Tanzu para o Spring Cloud Gateway, como mostra o exemplo application.yml. A lista a seguir descreve a relação de mapeamento entre as rotas do Spring Cloud Gateway para VMWare Tanzu e as rotas do Spring Cloud Gateway:

  • A name propriedade da rota é mapeada para id.
  • As propriedades appName e protocol são mapeadas para o URI da rota, que deve ser o URI acessível para a instância das Aplicações de Contentor do Azure. Verifique se os aplicativos de Aplicativos de Contêiner do Azure habilitam a entrada.
  • Predicados e filtros do Spring Cloud Gateway para VMWare Tanzu são mapeados para predicados e filtros do Spring Cloud Gateway. Não há suporte para predicados e filtros comerciais. Para obter mais informações, consulte Filtros de rota comercial no Spring Cloud Gateway for K8s.

Como exemplo, considere o seguinte arquivo JSON de configuração de rota, test-api.json, que define a test-api rota no Spring Cloud Gateway para VMWare Tanzu para o test aplicativo:

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

Em seguida, o seguinte arquivo YAML mostra a configuração de rota correspondente para o aplicativo 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 para VMWare Tanzu define StripPrefix=1 por padrão em todas as rotas. Para migrar para o Spring Cloud Gateway, você precisa definir StripPrefix=1 explicitamente na configuração do filtro.

Para habilitar o seu aplicativo Spring Cloud Gateway para aceder a outras aplicações através do nome da aplicação, precisa de habilitar o ingresso para as suas aplicações Azure Container Apps. Você também pode definir o FQDN (nome de domínio totalmente qualificado) acessível do aplicativo Aplicativos de Contêiner do Azure como o URI da rota, seguindo o formato https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Nota

Existem alguns predicados comerciais e filtros comerciais que não são suportados no Spring Cloud Gateway.

Cache de resposta

Se você habilitar o cache de resposta globalmente no Spring Cloud Gateway para VMWare Tanzu, use a seguinte configuração no Spring Cloud Gateway. Para obter mais informações, consulte O filtro de cache de resposta local.

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

Se você habilitar o cache de resposta para a rota, poderá usar o LocalResponseCache filtro na configuração da regra de roteamento do Gateway gerenciado para Spring usando o exemplo a seguir:

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

Integrar com APM

Você pode habilitar o monitoramento de desempenho de aplicativos (APM) para seu aplicativo Spring Cloud Gateway. Para obter mais informações, consulte Integrar o monitoramento de desempenho do aplicativo em imagens de contêiner.

Implantar em aplicativos de contêiner do Azure

Depois que a configuração do Spring Cloud Gateway estiver pronta, crie a imagem usando o Registro de Contêiner do Azure e implante-a nos Aplicativos de Contêiner do Azure.

Crie e envie por push a imagem do Docker

Para criar e enviar por push a imagem do Docker, use as seguintes etapas:

  1. No diretório do projeto do Spring Cloud Gateway, crie um Dockerfile com o seguinte conteúdo:

    Nota

    Como alternativa, use o Dockerfile de exemplo da 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. Use os seguintes comandos para criar a imagem do gateway:

    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. Verifique se a imagem do gateway foi criada e obtenha a tag da imagem, que usa o seguinte formato: <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT.

Implantar a imagem em Aplicativos de Contêiner do Azure

Depois que a imagem do aplicativo de gateway estiver pronta, implante-a como um aplicativo de Aplicativos de Contêiner do Azure usando o comando a seguir. Substitua o espaço reservado <container-image-of-gateway> pelo tag de imagem recuperado na etapa anterior.

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

Acesse o FQDN do aplicativo Spring Cloud Gateway para verificar se ele está em execução.

Resolução de Problemas

Se você encontrar problemas ao executar o aplicativo Spring Cloud Gateway, poderá exibir logs históricos e em tempo real do gateway aplicativo nos Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Registo de Aplicações em Aplicações de Contentores do Azure.

Você também pode monitorar as métricas de um aplicativo de gateway. Para obter mais informações, consulte Monitorar métricas de aplicativos de contêiner do Azure.

Limitação conhecida

O OSS Spring Cloud Gateway não suporta nativamente os seguintes recursos comerciais:

  • Metadados usados para gerar documentação OpenAPI.
  • Funcionalidade de logon único (SSO).

Se você precisar desses recursos, talvez seja necessário considerar outras soluções comerciais, como o Spring Cloud Gateway para VMWare Tanzu.