Compartilhar via


Migrar o Spring Cloud Gateway para Tanzu para o Gateway gerenciado para o Spring nos Aplicativos de Contêiner do Azure

Observação

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

O plano consumo e dedicado Standard 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 mais informações, confira Migrar o plano dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica a: ❎ Básico/Padrão ✅ 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 gateway gerenciado para o Spring

Use o seguinte comando para provisionar o componente Gateway para 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ê poderá ver que o valor de Estado de provisionamento para o Spring Cloud Gateway é bem-sucedido.

Gerenciamento de recursos

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

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

Para configurar a contagem de instâncias do Gateway para 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 dá suporte a configurações dinâmicas de dimensionamento automático.

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 para Spring usando o comando update, 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 de CORS

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

Nome da propriedade no VMware Spring Cloud Gateway Configuração no Gateway para 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 para 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 de CORS por rota, você precisa substituir o "/**" na chave de configuração como o caminho de rota. Por exemplo, se você tiver uma rota com caminho /v1/**, deverá configurar spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>].

Routes

O componente Gateway para Spring dá suporte à definição de rotas por meio das propriedades id, uri, predicates e 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 para 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 os predicados e filtros do Gateway do Spring Cloud.

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 Azure Spring Apps test-app:

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 o arquivo YAML de rota correspondente test-api.yml para o Gateway para o Spring nos Aplicativos de Contêiner do Azure:

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/test/api/healthcheck
      - Method=GET
    filters:
      - AddResponseHeader=X-Response-Red, Blue

Além disso, 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 de Aplicativo de Contêiner do Azure obter seu FQDN (nome de domínio totalmente qualificado). Em seguida, substitua <app-FQDN-in-Azure-Container-Apps> no URI da rota pelo ponto de extremidade acessível do aplicativo. O formato do URI é https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Há alguns predicados comerciais e filtros comerciais que não têm suporte no Gateway para Aplicativos de Contêiner do Spring no Azure.

Cache de resposta

Se você habilitar o cache de resposta globalmente, poderá atualizar o Gateway gerenciado para o 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 filtro LocalResponseCache na configuração de 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

Solução de problemas

Você pode exibir logs do Gateway para Spring nos Aplicativos de Contêiner do Azure usando Log Analytics, seguindo as etapas a seguir:

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

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

  3. Para exibir logs, consulte a tabela ContainerAppSystemLogs_CL 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 nos Aplicativos de Contêiner do Azure.

Limitações conhecidas

Por enquanto, o Gateway para Spring nos Aplicativos de Contêiner do Azure não dá suporte a determinados recursos comerciais, incluindo metadados usados para gerar documentação do OpenAPI, SSO (logon único) e integração do APM (monitoramento de desempenho do aplicativo).

Há um problema conhecido em que habilitar o Gateway para Spring impede que a seção Services seja aberta no portal do Azure. Esperamos resolver esse problema em breve.