Compartilhar via


Migrar o Spring Cloud Gateway para VMWare Tanzu para um aplicativo de gateway auto-hospedado nos Aplicativos de Contêiner do Azure

Observação

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

Este artigo se aplica a: ❎ Básico/Padrão ✅ Enterprise

Este artigo mostra como migrar um projeto do Spring Cloud Gateway para VMWare Tanzu em execução no plano Enterprise dos Aplicativos Spring do Azure para um projeto do Spring Cloud Gateway auto-hospedado de software de código aberto em execução como um aplicativo dos Aplicativos de Contêiner do Azure.

A versão de software de código aberto do Spring Cloud Gateway mencionada nesta página é fornecida como exemplo para referência. Você pode escolher outras distribuições do Spring Cloud Gateway conforme seus requisitos.

Observação

Os recursos oferecidos pelo Spring Cloud Gateway para VMWare Tanzu são mais extensos do que os recursos da versão de software de código aberto. Lembre-se de analisar as diferenças e garantir a compatibilidade antes de migrar para a produção.

Pré-requisitos

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

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

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

Configurar o aplicativo do Spring Cloud Gateway

Agora que você baixou o aplicativo do Spring Cloud Gateway, configure-o 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 como 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 de CORS

Para migrar a configuração do CORS do seu projeto do Spring Cloud Gateway para VMWare Tanzu, veja Configuração do CORS para a configuração global do CORS e a configuração de rota do CORS.

Escala

Quando você migra para um aplicativo do Spring Cloud Gateway nos Aplicativos de Contêiner do Azure, o comportamento de escala deve estar alinhado com o modelo dos 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 a escala automática para o aplicativo de gateway definindo regras de escala. Para saber mais, confira Definir regras de escala nos Aplicativos de Contêiner do Azure.

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

Certificados e domínios personalizados

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

Rotas

Você pode migrar as rotas no Spring Cloud Gateway para Tanzu para o Spring Cloud Gateway, como mostra o exemplo de application.yml. A seguinte lista descreve a relação de mapeamento entre as rotas do Spring Cloud Gateway para VMWare Tanzu e as rotas do Spring Cloud Gateway:

  • A propriedade name 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 dos Aplicativos de Contêiner do Azure. Verifique se os aplicativos dos Aplicativos de Contêiner do Azure permitem a entrada.
  • Os predicados e os filtros do Spring Cloud Gateway para VMWare Tanzu são mapeados para os predicados e os filtros do Spring Cloud Gateway. Não há suporte para predicados e filtros comerciais. Para obter mais informações, veja Filtros de rota comercial no Spring Cloud Gateway para K8s.

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

{
  "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 do 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

O Spring Cloud Gateway para VMWare Tanzu é definido 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 permitir que o aplicativo do Spring Cloud Gateway acesse outros aplicativos por meio do nome do aplicativo, você precisa habilitar a entrada para seus aplicativos do Aplicativo de Contêiner do Azure. Você também pode definir o FQDN (nome de domínio totalmente qualificado) acessível do aplicativo dos Aplicativos de Contêiner do Azure como o URI da rota, seguindo o formato https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Observação

Há alguns predicados comerciais e filtros comerciais que não têm suporte no Spring Cloud Gateway.

Cache de resposta

Se você habilitar o cache de resposta globalmente no Spring Cloud Gateway para VMWare Tanzu, use a configuração a seguir no Spring Cloud Gateway. Para obter mais informações, veja 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 filtro LocalResponseCache na configuração de regra de roteamento do Gateway Gerenciado para Spring como o seguinte exemplo:

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

Integração ao APM

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

Implantar nos Aplicativos de Contêiner do Azure

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

Compilar e enviar a imagem do Docker

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

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

    Observação

    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 compilar 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. Garanta que a imagem do gateway seja criada e obtenha a marca de imagem, que usa o seguinte formato: <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT.

Implantar a imagem nos Aplicativos de Contêiner do Azure

Depois que a imagem do aplicativo de gateway estiver pronta, implante-a como um aplicativo dos Aplicativos de Contêiner do Azure usando o comando a seguir. Substitua o espaço reservado <container-image-of-gateway> pela marca de imagem recuperada 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 do Spring Cloud Gateway para verificar se ele está em execução.

Solução de problemas

Se você encontrar problemas ao executar o aplicativo do Spring Cloud Gateway, veja os logs históricos e em tempo real do aplicativo gateway nos Aplicativos de Contêiner do Azure. Para saber mais, veja Application Logging nos Aplicativos de Contêiner do Azure.

Você também pode monitorar as métricas de um aplicativo de gateway. Para obter mais informações, veja Monitorar métricas dos Aplicativos de Contêiner do Azure.

Limitações conhecidas

O Spring Cloud Gateway de software de código aberto não dá suporte nativo aos seguintes recursos comerciais:

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

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