共用方式為


將適用於 VMWare Tanzu 的 Spring Cloud 閘道移轉至 Azure 容器應用程式中的自我裝載閘道應用程式

附註

基本標準和企業方案於 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 閘道應用程式的程式碼

若要取得 Spring Cloud 閘道應用程式的程式碼,請使用以下步驟:

  1. 導航至 https://start.spring.io
  2. 透過將 [群組] 欄位設定為您的組織名稱來更新專案中繼資料。 將 [成品] 和 [名稱] 欄位變更為 [閘道]
  3. 新增 [回應式閘道] 和 [Spring Boot 傳動器] 相依性。
  4. 將其他屬性保留為預設值。
  5. 選取 [產生] 以下載專案。
  6. 專案下載後,將其解壓縮。

設定 Spring Cloud 閘道應用程式

現在,您已經下載了 Spring Cloud 閘道應用程式,在接下來的部分中對其進行設定。

設定應用程式屬性檔案

若要設定應用程式屬性檔案,請使用以下步驟:

  1. 巡覽至專案的 gateway/src/main/resources 目錄。

  2. application.properties 檔案重新命名為 application.yml

  3. 編輯 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-replicamax-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
  • appNameprotocol 屬性會對應到路由的 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。

附註

Spring Cloud 閘道不支援一些商業述詞商業篩選條件

回應快取

如果您在適用於 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 映像,請使用以下步驟:

  1. 在 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"]
    
  2. 使用以下命令建置閘道的映像:

    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 .
    
  3. 確保閘道映像已建立,並取得映像標籤,該標籤使用以下格式:<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 閘道。