共用方式為


將 Tanzu 的 Spring Cloud Gateway 遷移至 Azure Container Apps 中 Spring 的受控網關

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於: ❎基本/標準 ✅ 企業

本文說明如何使用 Azure CLI,將 Azure Spring Apps 企業版中的 VMware Spring Cloud Gateway 移轉至 Azure Container Apps 中適用於 Spring 的受控網關。

必要條件

布建 Spring 的受控閘道

使用下列命令,在必要條件中建立的 Azure Container Apps 環境中布建 Spring Java 的閘道元件:

az containerapp env java-component gateway-for-spring create \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name>

成功建立元件之後,您可以看到 Spring Cloud Gateway 的布建狀態值為 Succeeded

資源管理

Azure Container Apps 中適用於 Spring 的閘道容器資源配置已修正為下列值:

  • CPU:0.5 vCPU
  • 記憶體:1 Gi

若要設定 Spring 閘道的實例計數,請使用 參數 --min-replicas--max-replicas,將兩者都設定為相同的值。 此組態可確保實例計數維持固定狀態。 系統目前不支援動態自動調整組態。

設定 Spring 的閘道

布建網關之後,下一個步驟是設定閘道以順利移轉。

您可以使用 命令來更新 Spring 元件的 update 閘道組態和路由,如下列範例所示:

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>

CORS 設定

若要移轉 VMware Spring Cloud Gateway 的全域跨原始來源資源分享 (CORS) 組態,您必須將屬性對應至 格式 <configuration-key>="<configuration-value>"。 下表顯示對應關聯:

VMware Spring Cloud Gateway 中的屬性名稱 Spring 閘道中的設定
允許的原始來源 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>]
允許的原始模式 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>]
允許的方法 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>]
允許的標題 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>]
存留期上限 spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge
允許認證 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials
公開的標頭 spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>]

例如,如果您有類似 allowedOrigins:["https://example.com","https://example1.com"] VMware Spring Cloud Gateway 的設定,您應該使用下列參數更新 Spring 的 Gateway:

--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com

針對每個路由 CORS 組態,您必須將組態索引鍵中的 “/**” 取代為路由路徑。 例如,如果您有路徑 /v1/**為 的路由,則應該設定 spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>]

路由

Spring 的閘道元件支援透過 iduripredicatesfilters 屬性定義路由,如下列範例所示:

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}"

下列清單描述 VMware Spring Cloud Gateway 路由與 Spring 網關路由之間的對應關聯性:

  • name路由的 對應至 id
  • appNameprotocol 會對應至路由的 URI,這應該是 Azure Container Apps 實例的可存取 URI。
  • Spring Cloud Gateway 述詞和篩選會對應至 Spring 述詞和篩選的網關。

例如,假設下列路由組態 json 檔案,稱為 test-api.json 會針對 VMware Spring Cloud Gateway 建立:

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddResponseHeader=X-Response-Red, Blue"
      ]
    }
  ]
}

而且,假設您使用下列命令將規則套用至 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

然後,下列範例會顯示 Azure Container Apps 上 Spring 閘道的對應路由 YAML 檔案 test-api.yml

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

而且,您會使用下列命令來更新容器應用程式:

az containerapp env java-component gateway-for-spring update \
    --route-yaml test-api.yml

您必須啟用 Azure Container App 應用程式的輸入,以取得其完整功能變數名稱 (FQDN)。 然後,將路由 URI 中的 取代 <app-FQDN-in-Azure-Container-Apps> 為應用程式的可存取端點。 URI 格式為 https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io

Azure Container Apps 上的 Spring 閘道不支援一些 商業述 詞和 商業篩選

回應快取

如果您全域啟用回應快取,您可以使用下列設定來更新 Spring 的受控閘道:

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>

如果您啟用路由的回應快取,您可以在 LocalResponseCache Spring 受控閘道的路由規則設定中使用篩選,如下所示的 YAML:

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/v1/**
      - Method=GET
    filters:
      - LocalResponseCache=3m, 1MB

疑難排解

您可以使用下列步驟來檢視 Azure Container Apps Log Analytics 中 Spring 的閘道記錄:

  1. 在 Azure 入口網站 中,流覽至您的 Azure Container Apps 環境。

  2. 在瀏覽窗格中,選取 [監視記錄>]。

  3. 若要檢視記錄,請使用查詢編輯器查詢 ContainerAppSystemLogs_CL 數據表,如下列範例所示:

    ContainerAppSystemLogs_CL
    | where ComponentType_s == "SpringCloudGateway"
    | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s
    | take 100
    

如需查詢記錄的詳細資訊,請參閱 Azure Container Apps 中受控 Java 元件的可檢視性。

已知的限制

目前,Azure Container Apps 上的 Spring 閘道不支援某些商業功能,包括用來產生 OpenAPI 檔、單一登錄 (SSO) 和應用程式效能監視 (APM) 整合的元數據。

有一個已知問題:啟用 Spring 的閘道會防止在 Azure 入口網站 中開啟 [服務] 區段。 我們預期很快就會解決此問題。