附註
基本、標準和企業方案於 2025 年 3 月 17 日進入淘汰期。 如需詳細資訊,請參閱 Azure Spring 應用程式淘汰公告。
本文適用於: ❎基本/標準✅企業版
本文介紹如何將 Azure Spring 應用程式企業方案上執行的適用於 VMWare Tanzu 的 Spring Cloud 閘道方案移轉至作為 Azure 容器應用程式應用程式執行的自我裝載開放原始碼軟體 (OSS) Spring Cloud 閘道專案。
本頁提及的 Spring Cloud 閘道的 OSS 版本作為範例提供,以供參考。 您可以根據需要選擇 Spring Cloud 閘道的其他發行版本。
附註
適用於 VMWare Tanzu 的 Spring Cloud 閘道提供的功能比 OSS 版本中的功能更廣泛。 在移轉至生產環境之前,請務必檢查差異並確保相容性。
先決條件
- 啟用了 Spring Cloud 閘道的 Azure Spring 應用程式企業方案執行個體。
- Azure 容器應用程式執行個體。 如需詳細資訊,請參閱快速入門:使用 Azure 入口網站部署您的第一個容器應用程式。
- Azure CLI
- 一個 Azure Container Registry 執行個體,具有足夠的權限來建置和推送 Docker 映像。 如需詳細資訊,請參閱快速入門:使用 Azure CLI 建立私人容器登錄。
準備自我裝載 Spring Cloud 閘道應用程式的程式碼
若要取得 Spring Cloud 閘道應用程式的程式碼,請使用以下步驟:
- 導航至 https://start.spring.io。
- 透過將 [群組] 欄位設定為您的組織名稱來更新專案中繼資料。 將 [成品] 和 [名稱] 欄位變更為 [閘道]。
- 新增 [回應式閘道] 和 [Spring Boot 傳動器] 相依性。
- 將其他屬性保留為預設值。
- 選取 [產生] 以下載專案。
- 專案下載後,將其解壓縮。
設定 Spring Cloud 閘道應用程式
現在,您已經下載了 Spring Cloud 閘道應用程式,在接下來的部分中對其進行設定。
設定應用程式屬性檔案
若要設定應用程式屬性檔案,請使用以下步驟:
巡覽至專案的 gateway/src/main/resources 目錄。
將 application.properties 檔案重新命名為 application.yml。
編輯 application.yml 檔案。 以下 application.yml 檔案是典型的:
spring: application: name: gateway cloud: gateway: globalcors: corsConfigurations: '[/**]': allowedOriginPatterns: "*" allowedMethods: - GET - POST - PUT - DELETE allowedHeaders: - "*" allowCredentials: true maxAge: 3600 routes: - id: front uri: http://front-app predicates: - Path=/** - Method=GET order: 1000 filters: - StripPrefix=0 tags: - front
CORS 設定
若要移轉適用於 VMWare Tanzu 的 Spring Cloud 閘道專案的跨原始資源共用 (CORS) 設定,請參閱 CORS 設定以了解全域 CORS 設定和路由 CORS 設定。
規模
移轉至 Azure 容器應用程式中的 Spring Cloud 閘道應用程式時,縮放行為應與 Azure 容器應用程式模型保持一致。 來自適用於 VMWare Tanzu 的 Spring Cloud 閘道的執行個體計數對應至 Azure 容器應用程式中的 min-replica 和 max-replica。 您可以透過定義縮放規則為閘道應用程式設定自動縮放。 如需詳細資訊,請參閱在 Azure 容器應用程式中設定調整規則 (機器翻譯)。
Azure Spring 應用程式中可用的 CPU 和記憶體組合與 Azure 容器應用程式中可用的組合不同。 對應資源配置時,請確保 Azure 容器應用程式中所選的 CPU 和記憶體設定符合您的性能需求和支援的選項。
自訂網域與憑證
Azure 容器應用程式支援自訂網域和憑證。 如需移轉在適用於 VMWare Tanzu 的 Spring Cloud 閘道上設定的自訂網域的詳細資訊,請參閱 Azure 容器應用程式中的憑證。
路由
您可以將適用於 Tanzu 的 Spring Cloud 閘道的路由移轉至 Spring Cloud 閘道,如 application.yml 範例所示。 適用於 VMWare Tanzu 的 Spring Cloud 閘道的路由與 Spring Cloud 閘道的路由之間的對應關係如下:
- 路由的
name屬性會對應到id。 -
appName和protocol屬性會對應到路由的 URI,該 URI 應該是 Azure 容器應用程式執行個體的可存取 URI。 確保 Azure 容器應用程式應用程式啟用輸入。 - 適用於 VMWare Tanzu 的 Spring Cloud 閘道的述詞和篩選條件會對應到 Spring Cloud 閘道的述詞和篩選條件。 不支援商業述詞和篩選條件。 如需詳細資訊,請參閱適用於 K8s 的 Spring Cloud 閘道中的商業路由篩選條件。
例如,請考慮以下路由設定 JSON 檔案 test-api.json,該檔案針對 test 應用程式定義了適用於 VMWare Tanzu 的 Spring Cloud 閘道中的 test-api 路由:
{
"protocol": "HTTP",
"routes": [
{
"title": "Test API",
"predicates": [
"Path=/test/api/healthcheck",
"Method=GET"
],
"filters": [
"AddRequestHeader=X-Request-red, blue"
]
}
]
}
然後,以下 YAML 檔案顯示了 Spring Cloud 閘道應用程式的相應路由設定:
spring:
cloud:
gateway:
routes:
- id: test-api
uri: http://test
predicates:
- Path=/test/api/healthcheck
- Method=GET
filters:
- AddRequestHeader=X-Request-red, blue
- StripPrefix=1
預設情況下,適用於 VMWare Tanzu 的 Spring Cloud 閘道會在每個路由上設定 StripPrefix=1。 若要移轉至 Spring Cloud 閘道,您需要在篩選設定中明確設定 StripPrefix=1。
若要讓您的 Spring Cloud 閘道應用程式能夠透過應用程式名稱存取其他應用程式,您需要為 Azure 容器應用程式應用程式啟用輸入。 您也可以按照格式 https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io,將 Azure 容器應用程式應用程式的可存取完整網域名稱 (FQDN) 設定為路由的 URI。
回應快取
如果您在適用於 VMWare Tanzu 的 Spring Cloud 閘道中全域啟用回應快取,請在 Spring Cloud 閘道中使用以下設定。 如需詳細資訊,請參閱本機回應快取篩選條件。
spring:
cloud:
gateway:
filter:
local-response-cache:
enabled: true
time-to-live: <response-cache-ttl>
size: <response-cache-size>
如果您啟用路由的回應快取,您可以使用下列範例,在適用於 Spring 的受控閘道的路由規則設定中使用 LocalResponseCache 篩選:
spring:
cloud:
gateway:
routes:
- id: test-api
uri: http://test
predicates:
- Path=/resource
filters:
- LocalResponseCache=30m,500MB
與 APM 整合
您可以為 Spring Cloud 閘道應用程式啟用應用程式效能監視 (APM)。 如需詳細資訊,請參閱 將應用程式效能監視整合到容器映像中。
部署至 Azure 容器應用程式
Spring Cloud 閘道設定準備就緒後,使用 Azure Container Registry 建置映像,並將其部署到 Azure 容器應用程式。
建置和推送 Docker 映像
若要建置和推送 Docker 映像,請使用以下步驟:
在 Spring Cloud 閘道專案目錄中,建立一個包含以下內容的 Dockerfile:
附註
或者,使用 ACME Fitness 商店範例 Dockerfile。
FROM mcr.microsoft.com/openjdk/jdk:17-mariner as build WORKDIR /staging # Install gradle RUN tdnf install -y wget unzip RUN wget https://services.gradle.org/distributions/gradle-8.8-bin.zip && \ unzip -d /opt/gradle gradle-8.8-bin.zip && \ chmod +x /opt/gradle/gradle-8.8/bin/gradle ENV GRADLE_HOME=/opt/gradle/gradle-8.8 ENV PATH=$PATH:$GRADLE_HOME/bin COPY . . # Compile with gradle RUN gradle build -x test FROM mcr.microsoft.com/openjdk/jdk:17-mariner as runtime WORKDIR /app COPY --from=build /staging/build/libs/gateway-0.0.1-SNAPSHOT.jar . ENTRYPOINT ["java", "-jar", "gateway-0.0.1-SNAPSHOT.jar"]使用以下命令建置閘道的映像:
az acr login --name <azure-container-registry-name> az acr build \ --resource-group <resource-group-name> \ --image gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT \ --registry <azure-container-registry-name> \ --file Dockerfile .確保閘道映像已建立,並取得映像標籤,該標籤使用以下格式:
<azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT。
在 Azure 容器應用程式中部署映像
閘道應用程式映像準備就緒後,使用以下命令將其部署為 Azure 容器應用程式應用程式。 將 <container-image-of-gateway> 預留位置取代為在上一步中擷取到的映像標籤。
az containerapp up \
--resource-group <resource-group-name> \
--name gateway \
--environment <azure-container-app-environment-name> \
--image <container-image-of-gateway> \
--target-port 8080 \
--ingress external
存取 Spring Cloud 閘道應用程式的 FQDN,以確認它是否正在執行。
疑難排解
如果您在執行 Spring Cloud 閘道應用程式時遇到問題,可以在 Azure 容器應用程式中檢視 gateway 應用程式的即時和歷史記錄。 如需詳細資訊,請參閱 Azure Container Apps 中的應用程式記錄。
您也可以監視閘道應用程式的計量。 如需詳細資訊,請參閱監視 Azure 容器應用程式計量。
已知的限制
OSS Spring Cloud 閘道並不原生支援以下商業功能:
- 用來產生 OpenAPI 文件的中繼資料。
- 單一登入 (SSO) 功能。
如果您需要這些功能,則可能需要考慮其他商業解決方案,例如適用於 VMWare Tanzu 的 Spring Cloud 閘道。