Eseguire la migrazione di Spring Cloud Gateway per Tanzu al gateway gestito per Spring nelle app contenitore di Azure
Nota
I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.
Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.
Questo articolo si applica a: ❎ Basic/Standard ✅ Enterprise
Questo articolo illustra come eseguire la migrazione di VMware Spring Cloud Gateway nel piano Enterprise di Azure Spring Apps al gateway gestito per Spring in App Azure Container usando l'interfaccia della riga di comando di Azure.
Prerequisiti
- Istanza del piano Enterprise di Azure Spring Apps esistente con Spring Cloud Gateway abilitato.
- Un'app contenitore di Azure esistente. Per altre informazioni, vedere Avvio rapido: Distribuire la prima app contenitore usando il portale di Azure.
- Interfaccia della riga di comando di Azure.
Effettuare il provisioning del gateway gestito per Spring
Usare il comando seguente per effettuare il provisioning del componente Gateway for Spring Java nell'ambiente app Azure Container creato nei prerequisiti:
az containerapp env java-component gateway-for-spring create \
--resource-group <resource-group-name> \
--name <gateway-name> \
--environment <azure-container-app-environment-name>
Dopo aver creato correttamente il componente, è possibile osservare che il valore Stato di provisioning per Spring Cloud Gateway è Succeeded.
Gestione delle risorse
L'allocazione delle risorse del contenitore per il gateway per Spring in App Contenitore di Azure è fissa ai valori seguenti:
- CPU: 0.5 vCPU
- Memoria: 1 Gi
Per configurare il numero di istanze per Gateway per Spring, usare i --min-replicas
parametri e --max-replicas
, impostando entrambi sullo stesso valore. Questa configurazione garantisce che il numero di istanze rimanga fisso. Il sistema attualmente non supporta le configurazioni di scalabilità automatica dinamica.
Configurare il gateway per Spring
Dopo aver effettuato il provisioning del gateway, il passaggio successivo consiste nel configurarlo per una migrazione senza problemi.
È possibile aggiornare la configurazione e le route del componente Gateway per Spring usando il update
comando , come illustrato nell'esempio seguente:
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>
Configurazione CORS
Per eseguire la migrazione della configurazione CORS (Cross-Origin Resource Sharing) globale di VMware Spring Cloud Gateway, è necessario eseguire il mapping delle proprietà nel formato <configuration-key>="<configuration-value>"
. La relazione di mapping è illustrata nella tabella seguente:
Nome della proprietà in VMware Spring Cloud Gateway | Configurazione in Gateway per Spring |
---|---|
Origini consentite | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>] |
Modelli di origine consentiti | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>] |
Metodi consentiti | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>] |
Intestazioni consentite | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>] |
Validità massima | spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge |
Consenti credenziali | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials |
Intestazioni esposte | spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>] |
Ad esempio, se si dispone di una configurazione come allowedOrigins:["https://example.com","https://example1.com"]
in VMware Spring Cloud Gateway, è necessario aggiornare Gateway per Spring con il parametro seguente:
--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com
Per ogni configurazione CORS di route, è necessario sostituire "/**" nella chiave di configurazione come percorso di route. Ad esempio, se si dispone di una route con percorso /v1/**
, è necessario configurare spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>]
.
Route
Il componente Gateway per Spring supporta la definizione di route tramite le id
proprietà , uri
, predicates
e filters
, come illustrato nell'esempio seguente:
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}"
L'elenco seguente descrive la relazione di mapping tra route di VMware Spring Cloud Gateway e route di Gateway per Spring:
- L'oggetto
name
della route viene mappato aid
. - E
appName
protocol
vengono mappati all'URI della route, che deve essere l'URI accessibile per l'istanza di App Contenitore di Azure. - I predicati e i filtri di Spring Cloud Gateway vengono mappati al gateway per predicati e filtri Spring.
Si supponga, ad esempio, che il file JSON di configurazione della route seguente, denominato test-api.json venga creato per VMware Spring Cloud Gateway:
{
"protocol": "HTTP",
"routes": [
{
"title": "Test API",
"predicates": [
"Path=/test/api/healthcheck",
"Method=GET"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
}
Si supponga di usare il comando seguente per applicare la regola all'app 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
L'esempio seguente mostra quindi il file YAML di route corrispondente test-api.yml per Gateway for Spring in App contenitore di Azure:
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/test/api/healthcheck
- Method=GET
filters:
- AddResponseHeader=X-Response-Red, Blue
Usare anche il comando seguente per aggiornare l'app contenitore:
az containerapp env java-component gateway-for-spring update \
--route-yaml test-api.yml
È necessario abilitare l'ingresso per l'applicazione app Azure Container per ottenere il nome di dominio completo (FQDN).
<app-FQDN-in-Azure-Container-Apps>
Sostituire quindi nell'URI della route con l'endpoint accessibile dell'app. Il formato URI è https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io
.
Esistono alcuni predicati commerciali e filtri commerciali che non sono supportati nel gateway per Spring nelle app contenitore di Azure.
Cache delle risposte
Se si abilita la cache delle risposte a livello globale, è possibile aggiornare il gateway gestito per Spring con la configurazione seguente:
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 si abilita la cache delle risposte per la route, è possibile usare il LocalResponseCache
filtro nella configurazione della regola di routing del gateway gestito per Spring come YAML seguente:
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/v1/**
- Method=GET
filters:
- LocalResponseCache=3m, 1MB
Risoluzione dei problemi
È possibile visualizzare i log del gateway per Spring in App Azure Container usando Log Analytics
la procedura seguente:
Nella portale di Azure passare all'ambiente App contenitore di Azure.
Nel riquadro di spostamento selezionare Log di monitoraggio>.
Per visualizzare i log, eseguire una query sulla
ContainerAppSystemLogs_CL
tabella usando l'editor di query, come illustrato nell'esempio seguente:ContainerAppSystemLogs_CL | where ComponentType_s == "SpringCloudGateway" | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s | take 100
Per altre informazioni sull'esecuzione di query sui log, vedere Observability of managed Java components in Azure Container Apps .For more information about querying logs, see Observability of managed Java components in Azure Container Apps.
Limitazione nota
Per il momento, Gateway for Spring in Azure Container Apps non supporta alcune funzionalità commerciali, inclusi i metadati usati per generare la documentazione openAPI, l'accesso Single Sign-On (SSO) e l'integrazione di Application Performance Monitoring (APM).
Si è verificato un problema noto per cui l'abilitazione del gateway per Spring impedisce l'apertura della sezione Servizi nel portale di Azure. Il problema verrà risolto a breve.