Condividi tramite


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

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 idproprietà , uri, predicatese 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 a id.
  • E appNameprotocol 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-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

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:

  1. Nella portale di Azure passare all'ambiente App contenitore di Azure.

  2. Nel riquadro di spostamento selezionare Log di monitoraggio>.

  3. 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.