Partilhar via


Migrar o Spring Cloud Gateway for Tanzu para o Gateway gerenciado para Spring em aplicativos de contêiner do Azure

Nota

Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

O plano de consumo padrão e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.

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

Este artigo mostra como migrar o VMware Spring Cloud Gateway no plano do Azure Spring Apps Enterprise para o Gateway gerenciado para o Spring nos Aplicativos de Contêiner do Azure usando a CLI do Azure.

Pré-requisitos

Provisionar o Gateway gerenciado para o Spring

Use o comando a seguir para provisionar o componente Gateway for Spring Java no ambiente de Aplicativos de Contêiner do Azure que você criou nos pré-requisitos:

az containerapp env java-component gateway-for-spring create \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name>

Depois de criar o componente com êxito, você pode ver que o valor de Estado de provisionamento para o Spring Cloud Gateway foi bem-sucedido.

Gestão de recursos

A alocação de recursos de contêiner para o Gateway for Spring nos Aplicativos de Contêiner do Azure é fixada com os seguintes valores:

  • CPU: 0.5 vCPU
  • Memória: 1 Gi

Para configurar a contagem de instâncias para o Gateway for Spring, use os parâmetros --min-replicas e --max-replicas, definindo ambos com o mesmo valor. Essa configuração garante que a contagem de instâncias permaneça fixa. Atualmente, o sistema não suporta configurações de dimensionamento automático dinâmico.

Configurar o gateway para o Spring

Depois de provisionar o gateway, a próxima etapa é configurá-lo para uma migração suave.

Você pode atualizar a configuração e as rotas do componente Gateway for Spring usando o update comando, conforme mostrado no exemplo a seguir:

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>

Configuração do CORS

Para migrar a configuração global do Cross-Origin Resource Sharing (CORS) do VMware Spring Cloud Gateway, você precisa mapear as propriedades para o formato <configuration-key>="<configuration-value>". A relação de mapeamento é mostrada na tabela a seguir:

Nome da propriedade em VMware Spring Cloud Gateway Configuração no Gateway for Spring
Origens permitidas spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>]
Padrões de origem permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>]
Métodos permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>]
Cabeçalhos permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>]
Idade máxima spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge
Permitir credenciais spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials
Cabeçalhos expostos spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>]

Por exemplo, se você tiver uma configuração como allowedOrigins:["https://example.com","https://example1.com"] no VMware Spring Cloud Gateway, deverá atualizar o Gateway for Spring com o seguinte parâmetro:

--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com

Para a configuração CORS por rota, você precisa substituir o "/**" na chave de configuração como o caminho da rota. Por exemplo, se você tiver uma rota com caminho /v1/**, você deve configurar spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>].

Rotas

O componente Gateway for Spring oferece suporte à definição de rotas por meio das idpropriedades , uri, predicatese filters , conforme mostrado no exemplo a seguir:

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}"

A lista a seguir descreve a relação de mapeamento entre rotas do VMware Spring Cloud Gateway e rotas do Gateway for Spring:

  • O name da rota é mapeado para id.
  • Os appName e protocol são mapeados para o URI da rota, que deve ser o URI acessível para a instância dos Aplicativos de Contêiner do Azure.
  • Os predicados e filtros do Spring Cloud Gateway são mapeados para predicados e filtros do Gateway for Spring.

Por exemplo, suponha que o seguinte arquivo json de configuração de rota, chamado test-api.json seja criado para o VMware Spring Cloud Gateway:

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddResponseHeader=X-Response-Red, Blue"
      ]
    }
  ]
}

E, suponha que você use o seguinte comando para aplicar a regra ao aplicativo test-appAzure Spring Apps:

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

Em seguida, o exemplo a seguir mostra a rota correspondente test-api.yml do arquivo YAML para o Gateway for Spring on 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

E você usaria o seguinte comando para atualizar o aplicativo de contêiner:

az containerapp env java-component gateway-for-spring update \
    --route-yaml test-api.yml

Você precisa habilitar a entrada para seu aplicativo Aplicativo de Contêiner do Azure para obter seu FQDN (nome de domínio totalmente qualificado). Em seguida, substitua <app-FQDN-in-Azure-Container-Apps> o URI da rota pelo ponto de extremidade acessível do aplicativo. O formato URI é https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Há alguns predicados comerciais e filtros comerciais que não são suportados no Gateway for Spring on Azure Container Apps.

Cache de resposta

Se você habilitar o cache de resposta globalmente, poderá atualizar o Gateway gerenciado para Spring com a seguinte configuração:

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>

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 como o seguinte YAML:

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/v1/**
      - Method=GET
    filters:
      - LocalResponseCache=3m, 1MB

Resolução de Problemas

Você pode exibir logs do Gateway for Spring em Aplicativos de Contêiner do Azure usando Log Analytics as seguintes etapas:

  1. No portal do Azure, navegue até seu ambiente de Aplicativos de Contêiner do Azure.

  2. No painel de navegação, selecione Logs de monitoramento>.

  3. Para exibir logs, consulte a ContainerAppSystemLogs_CL tabela usando o editor de consultas, conforme mostrado no exemplo a seguir:

    ContainerAppSystemLogs_CL
    | where ComponentType_s == "SpringCloudGateway"
    | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s
    | take 100
    

Para obter mais informações sobre como consultar logs, consulte Observabilidade de componentes Java gerenciados em Aplicativos de Contêiner do Azure.

Limitação conhecida

Por enquanto, o Gateway for Spring on Azure Container Apps não oferece suporte a determinados recursos comerciais, incluindo metadados usados para gerar documentação OpenAPI, logon único (SSO) e integração de monitoramento de desempenho de aplicativos (APM).

Há um problema conhecido em que habilitar o Gateway for Spring impede que a seção Serviços seja aberta no portal do Azure. Esperamos resolver este problema em breve.