將 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 Cloud Gateway 的現有 Azure Spring Apps 企業方案實例。
- 現有的 Azure 容器應用程式。 如需詳細資訊,請參閱快速入門:使用 Azure 入口網站部署您的第一個容器應用程式。
- Azure CLI。
布建 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 的閘道元件支援透過 id
、 uri
、 predicates
和 filters
屬性定義路由,如下列範例所示:
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
。 -
appName
和protocol
會對應至路由的 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 的閘道記錄:
在 Azure 入口網站 中,流覽至您的 Azure Container Apps 環境。
在瀏覽窗格中,選取 [監視記錄>]。
若要檢視記錄,請使用查詢編輯器查詢
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 入口網站 中開啟 [服務] 區段。 我們預期很快就會解決此問題。