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
- Uma instância existente do plano do Azure Spring Apps Enterprise com o Spring Cloud Gateway habilitado.
- Um aplicativo de contêiner do Azure existente. Para obter mais informações, veja o Início Rápido: implementar a primeira aplicação de contentor com o portal do Azure.
- CLI do Azure.
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 id
propriedades , 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 for 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 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-app
Azure 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:
No portal do Azure, navegue até seu ambiente de Aplicativos de Contêiner do Azure.
No painel de navegação, selecione Logs de monitoramento>.
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.