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
- Uma instância de plano do Azure Spring Apps Enterprise existente com o Spring Cloud Gateway habilitado.
- Um Aplicativo de Contêiner do Azure existente. Para obter mais informações, confira Guia de Início Rápido: implantar seu primeiro aplicativo de contêiner usando o portal do Azure.
- CLI do Azure.
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 paraid
. - Os
appName
eprotocol
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:
No portal do Azure, navegue até seu ambiente de Aplicativos de Contêiner do Azure.
No painel de navegação, selecione Monitoramento>Logs.
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.