在 Azure Spring Apps 中設定受控 Spring Cloud Config Server

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但是您暫時還是會在某些位置看到舊的名稱。我們正在致力更新螢幕擷取畫面、影片和圖表等資產。

本文適用於: ✔️ Java ✔️ C#

本文適用於: ✔️ 基本/標準層 ❌ 企業層

本文說明您如何在 Azure Spring Apps 服務中設定受控 Spring Cloud Config Server。

Spring Cloud Config Server 會在分散式系統中提供外部化設定的伺服器端和用戶端支援。 Config Server 執行個體會提供中央位置,跨所有環境管理應用程式的外部屬性。 如需詳細資訊,請參閱 Spring Cloud Config 檔

先決條件

限制

當您使用 Config Server 搭配 Git 後端時,會有一些限制。 下列屬性會自動插入您的應用程式環境,以存取設定伺服器和服務探索。 如果您也從 Config Server 檔案設定這些屬性,可能會發生衝突和非預期的行為。

eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.application.name
spring.jmx.enabled

警告

請勿將這些屬性放在您的 Config Server 應用程式檔中。

建立 Config Server 檔案

Azure Spring Apps 支援 Azure DevOps、GitHub、GitLab 和 Bitbucket,以儲存您的 Config Server 檔案。 當您的存放庫準備就緒時,您可以建立組態檔,並將其儲存在該處。

某些可設定的屬性僅適用于特定類型。 下列各節說明每個存放庫類型的屬性。

注意

如果未指定,設定伺服器會在 Git) 上採用 master (作為預設標籤。 不過,GitHub 最近已將預設分支從 master 變更為 main 。 若要避免 Azure Spring Apps Config Server 失敗,請務必注意使用 GitHub 設定 Config Server 時的預設標籤,特別是針對新建立的存放庫。

公用存放庫

當您使用公用存放庫時,可設定的屬性會比私人存放庫更有限。

下表列出可用來設定公用 Git 存放庫的可設定屬性。

注意

使用連字號 (-) 來分隔字組是目前唯一支援的命名慣例。 例如,您可以使用 default-label,但不能使用 defaultLabel

屬性 必要 功能
uri 作為 Config Server 後端使用的 Git 存放庫 URI。 應該以 http://https://git@ssh:// 開頭。
default-label Git 存放庫的預設標籤。 應該是存放庫的分支名稱、標記名稱或認可識別碼。
search-paths 用來搜尋 Git 存放庫子目錄的字串陣列。

使用 SSH 驗證的私人存放庫

下表列出您可以使用 SSH 設定私人 Git 存放庫的可設定屬性。

注意

使用連字號 (-) 來分隔字組是目前唯一支援的命名慣例。 例如,您可以使用 default-label,但不能使用 defaultLabel

屬性 必要 功能
uri 用來作為設定伺服器後端之 Git 存放庫的 URI。 應該以 http://https://git@ssh:// 開頭。
default-label Git 存放庫的預設標籤。 應該是存放庫的分支名稱、標記名稱或認可識別碼。
search-paths 用來搜尋 Git 存放庫子目錄的字串陣列。
private-key 用來存取 Git 存放庫的 SSH 私密金鑰。 URI 開頭為 git@ssh:// 時的必要專案。
host-key Git 存放庫伺服器的主機金鑰。 不應包含演算法前置詞,如 所 host-key-algorithm 涵蓋。
host-key-algorithm 主機金鑰演算法。 應該是 ssh-dssssh-rsaecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521。 只有在 host-key 存在時才需要。
strict-host-key-checking 指出在使用私人 host-key 時,Config Server 執行個體是否無法啟動。 應為 true (預設值) 或 false

注意

設定伺服器尚未支援 SHA-2 簽章。 在新增支援之前,請改用 SHA-1 簽章或基本驗證。

使用基本驗證的私人存放庫

下表列出可用來設定具有基本驗證的私人 Git 存放庫的可設定屬性。

注意

使用連字號 (-) 來分隔字組是目前唯一支援的命名慣例。 例如,請使用 default-label,而不是 defaultLabel

屬性 必要 功能
uri 作為 Config Server 後端使用的 Git 存放庫 URI。 應該以 http://https://git@ssh:// 開頭。
default-label Git 存放庫的預設標籤。 應該是存放庫的 分支名稱標記名稱認可識別碼
search-paths 用來搜尋 Git 存放庫子目錄的字串陣列。
username 用來存取 Git 存放庫伺服器的使用者名稱。 Git 存放庫伺服器支援 HTTP 基本驗證時需要。
password 用來存取 Git 存放庫伺服器的密碼或個人存取權杖。 Git 存放庫伺服器支援 HTTP 基本驗證時需要。

注意

許多 Git 存放庫伺服器都支援使用權杖,而不是使用密碼進行 HTTP 基本驗證。 某些存放庫可讓權杖無限期保存。 不過,有些 Git 存放庫伺服器 (包括 Azure DevOps Server) 會強制權杖在數小時內過期。 導致權杖過期的存放庫不應使用權杖型驗證搭配 Azure Spring Apps。

GitHub 已移除對密碼驗證的支援,因此您必須針對 GitHub 使用個人存取權杖,而不是密碼驗證。 如需詳細資訊,請參閱 Git 作業的權杖驗證需求

其他 Git 存放庫

下表列出您可以使用模式設定 Git 存放庫的可設定屬性。

注意

使用連字號 (-) 來分隔字組是目前唯一支援的命名慣例。 例如,請使用 default-label,而不是 defaultLabel

屬性 必要 功能
repos 包含具名 Git 存放庫設定的對應。
repos."uri" repos 上為 [是] 作為 Config Server 後端使用的 Git 存放庫 URI。 應該以 http://https://git@ssh:// 開頭。
repos."name" repos 上為 [是] 用來識別存放庫的名稱;例如 team-Ateam-B。 只有在 repos 存在時才需要。
repos."pattern" 用來比對應用程式名稱的字串陣列。 針對每個模式,請使用 格式 {application}/{profile} 格式搭配萬用字元。
repos."default-label" Git 存放庫的預設標籤。 應該是存放庫的分支名稱、標籤名稱或認可 IOD。
repos."search-paths" 用來搜尋 Git 存放庫子目錄的字串陣列。
repos."username" 用來存取 Git 存放庫伺服器的使用者名稱。 Git 存放庫伺服器支援 HTTP 基本驗證時需要。
repos."password" 用來存取 Git 存放庫伺服器的密碼或個人存取權杖。 Git 存放庫伺服器支援 HTTP 基本驗證時需要。
repos."private-key" 用來存取 Git 存放庫的 SSH 私密金鑰。 URI 開頭為 git@ssh:// 時的必要專案。
repos."host-key" Git 存放庫伺服器的主機金鑰。 不應包含演算法前置詞,如 所 host-key-algorithm 涵蓋。
repos."host-key-algorithm" 主機金鑰演算法。 應該是 ssh-dssssh-rsaecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521。 只有在 host-key 存在時才需要。
repos."strict-host-key-checking" 指出在使用私人 host-key 時,Config Server 執行個體是否無法啟動。 應為 true (預設值) 或 false

下表顯示一些使用選擇性其他存放庫來設定服務的模式範例。 For more information, see the Additional repositories section and the Pattern Matching and Multiple Repositories section of the Spring documentation.

模式 描述
test-config-server-app-0/* 模式和存放庫 URI 會比對具有任何設定檔的 test-config-server-app-0 Spring boot 應用程式。
test-config-server-app-1/dev 模式和存放庫 URI 會比對名為 test-config-server-app-1 的 Spring boot 應用程式與開發設定檔。
test-config-server-app-2/prod 模式和存放庫 URI 會比對名為 test-config-server-app-2 的 Spring boot 應用程式與 Prod 設定檔。

Azure 入口網站 顯示 [設定伺服器] 頁面的螢幕擷取畫面,其中已醒目提示 [其他存放庫] 資料表的 [模式] 資料行。

將 Config Server 存放庫連結至 Azure Spring Apps

現在您的組態檔已儲存在存放庫中,請使用下列步驟將 Azure Spring Apps 連線到存放庫。

  1. 登入 Azure 入口網站

  2. 移至 Azure Spring Apps [概觀] 頁面。

  3. 選取左側瀏覽窗格中的 [Config Server]。

  4. [預設存放庫] 區段中,將 [URI] 設定為 https://github.com/Azure-Samples/piggymetrics-config

  5. 選取 [驗證]。

    顯示 [設定伺服器] 頁面Azure 入口網站螢幕擷取畫面。

  6. 在驗證完成時,選取 [套用] 以儲存您的變更。

    Azure 入口網站 顯示 [設定伺服器] 頁面的螢幕擷取畫面,其中已醒目提示 [套用] 按鈕。

更新設定可能需要幾分鐘的時間。 設定完成後,您應該會收到通知。

將存放庫資訊直接輸入至 Azure 入口網站

您可以輸入預設存放庫的存放庫資訊,並選擇性地輸入其他存放庫的存放庫資訊。

預設存放庫

使用本節中的步驟來輸入公用或私人存放庫的存放庫資訊。

  • 公用存放庫:在 [預設存放庫] 區段的 [URI] 方塊中,貼上存放庫 URI。 輸入 [標籤] 設定的態。 確定 [ 驗證 ] 設定為 [公用],然後選取 [ 套用]。

  • 私人存放庫:Azure Spring Apps 支援基本密碼/權杖型驗證和 SSH。

    • 基本驗證:在 [預設存放庫 ] 區段的 [ URI ] 方塊中,貼上存放庫 URI,然後選取 [ 驗證 ] 底下的設定,以開啟 [ 編輯驗證 ] 窗格。 在 [ 驗證類型 ] 下拉式清單中,選取 [ HTTP Basic],然後輸入您的使用者名稱和密碼/權杖,以授與 Azure Spring Apps 的存取權。 依序 [確定] 和 [套用],以完成 Config Server 執行個體的設定。

    [預設存放庫] 區段的螢幕擷取畫面,其中顯示基本驗證的驗證設定。

    注意

    許多 Git 存放庫伺服器都支援使用權杖,而不是使用密碼進行 HTTP 基本驗證。 某些存放庫可讓權杖無限期保存。 不過,有些 Git 存放庫伺服器 (包括 Azure DevOps Server) 會強制權杖在數小時內過期。 導致權杖過期的存放庫不應使用權杖型驗證搭配 Azure Spring Apps。

    GitHub 已移除對密碼驗證的支援,因此您必須針對 GitHub 使用個人存取權杖,而不是密碼驗證。 如需詳細資訊,請參閱 Git 作業的權杖驗證需求

    • SSH:在 [預設存放庫] 區段的 [ URI ] 方塊中,貼上存放庫 URI,然後選取 [ 驗證 ] 底下的設定,以開啟 [ 編輯驗證 ] 窗格。 在 [ 編輯驗證] 窗格中的 [ 驗證類型 ] 下拉式清單中,選取 [SSH],然後輸入您的私密金鑰。 您可以選擇性地指定主機金鑰和主機金鑰演算法。 在 Config Server 存放庫中包含您的公開金鑰。 依序 [確定] 和 [套用],以完成 Config Server 執行個體的設定。

    [預設存放庫] 區段的螢幕擷取畫面,其中顯示 SSH 驗證的驗證設定。

其他存放庫

如果您想要使用選擇性的其他存放庫來設定服務,請指定預設存放庫的 Uri驗證 設定。 請務必包含模式的 [名稱 ] 設定,然後選取 [ 套用 ] 將其附加至您的實例。

在 YAML 檔案中輸入存放庫資訊

如果您已使用存放庫設定來撰寫 YAML 檔案,您可以將該檔案直接從本機電腦匯入至 Azure Spring Apps。 下列範例示範具有基本驗證之私人存放庫的簡單 YAML 檔案。

spring:
    cloud:
        config:
            server:
                git:
                    uri: https://github.com/azure-spring-cloud-samples/config-server-repository.git
                    username: <username>
                    password: <password/token>

選取 [匯入設定] 按鈕,然後從您的專案目錄中選取 YAML 檔案。 選取 [匯入] 。

[設定伺服器匯入設定] 窗格的螢幕擷取畫面。

您的 通知 會顯示 async 作業。 設定伺服器應該會在 1-2 分鐘後回報成功。 YAML 檔案中的資訊會顯示在Azure 入口網站中。 選取 [套用 ] 以完成匯入。

針對 Azure Spring Apps 設定使用Azure Repos

Azure Spring Apps 可存取由 SSH 保護,或使用 HTTP 基本驗證加以保護的公用 Git 存放庫。 HTTP 基本驗證是使用 Azure Repos 建立和管理存放庫的最簡單選項。

取得存放庫 URL 和認證

使用下列步驟來取得存放庫 URL 和認證。

  1. 在專案的 Azure Repos 入口網站中,選取 [複製] 按鈕:

  2. 從文字方塊中複製複製 URL。 此 URL 通常採用下列格式:

    https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    移除 之後和之前 https://dev.azure.com 的所有專案,包括 @ 符號。 產生的 URL 格式應如下:

    https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    儲存此 URL 以供下一節使用。

  3. 選取 [產生 Git 認證 ] 以顯示使用者名稱和密碼,這應該儲存以供下一節使用。

設定 Azure Spring Apps 以存取 Git 存放庫

  1. 登入 Azure 入口網站

  2. 移至 Azure Spring Apps [概觀] 頁面。

  3. 選取要設定的服務。

  4. 在 [設定] 底下的 [服務] 頁面左 窗格中,選取[設定伺服器] 索引 標籤。設定您所建立的存放庫,如下所示:

    • 新增您在上一節中儲存的存放庫 URI。
    • 選取 [ 驗證 ] 底下的設定,以開啟 [ 編輯驗證 ] 窗格。
    • 針對 [驗證類型],選取 [HTTP 基本]。
    • 針對 [使用者名稱],指定您在上一節中儲存的使用者名稱。
    • 針對 [密碼],指定您在上一節中儲存的密碼。
    • 選取 [確定],然後等候作業完成。

    存放庫組態設定的螢幕擷取畫面。

檢查您的設定

選取[設定伺服器] 索引標籤上的[重設],以清除您現有的設定。 如果您想要將 Config Server 實例連線到另一個來源,例如當您從 GitHub 移至 Azure DevOps 時,請刪除設定伺服器設定。

Config Server 重新整理

變更屬性時,取用這些屬性的服務必須先收到通知,才能進行變更。 Spring Cloud Config Server 的預設解決方案是手動觸發重新整理事件,如果有許多應用程式實例,可能無法執行此事件。 如需詳細資訊,請參閱 集中式設定

相反地,您可以讓設定用戶端根據內部重新整理來輪詢變更,以自動重新整理 Config Server 的值。 使用下列步驟,從 Config Server 自動重新整理值。

  1. 註冊排程的工作以指定間隔重新整理內容,如下列範例所示。

    @ConditionalOnBean({RefreshEndpoint.class})
    @Configuration
    @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
    @EnableScheduling
    public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
        @Value("${spring.cloud.config.refresh-interval:60}")
        private long refreshInterval;
        @Value("${spring.cloud.config.auto-refresh:false}")
        private boolean autoRefresh;
        private RefreshEndpoint refreshEndpoint;
        public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
            this.refreshEndpoint = refreshEndpoint;
        }
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            if (autoRefresh) {
                // set minimal refresh interval to 5 seconds
                refreshInterval = Math.max(refreshInterval, 5);
                scheduledTaskRegistrar.addFixedRateTask(() -> refreshEndpoint.refresh(), refreshInterval * 1000);
            }
        }
    }
    
  2. 啟用自動重新整理,並在 您的應用程式.yml 檔案中設定適當的重新整理間隔。 在下列範例中,用戶端會每隔 60 秒輪詢一次設定變更,這是您可以針對重新整理間隔設定的最小值。

    根據預設,自動重新整理會設定為 false ,而重新整理間隔會設定為 60 秒

    spring:
        cloud:
             config:
              auto-refresh: true
              refresh-interval: 60
    management:
        endpoints:
             web:
              exposure:
                include:
                  - refresh
    
  3. 在您的程式碼中新增 @RefreshScope。 在下列範例中,變數 connectTimeout 每隔 60 秒會自動重新整理一次。

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

如需詳細資訊,請參閱 config-client-polling 範例

後續步驟

在本文中,您已了解如何啟用和設定 Spring Cloud Config Server 執行個體。 若要深入了解如何管理應用程式,請參閱在 Azure Spring Apps 中調整應用程式