共用方式為


在 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 提供分散式系統中外部化組態的伺服器和客戶端支援。 Spring Cloud Config Server 實例提供一個集中位置,可管理所有環境之應用程式的外部屬性。 如需詳細資訊,請參閱 Spring Cloud Config

注意

若要在標準取用和專用方案中使用組態伺服器,您必須先加以啟用。 如需詳細資訊,請參閱 在 Azure Spring Apps 中啟用和停用 Spring Cloud Config Server。

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶
  • 已布建並執行 Azure Spring Apps 服務實例。 若要設定及啟動 Azure Spring Apps 服務,請參閱 快速入門:使用企業方案建置和部署應用程式至 Azure Spring Apps。

啟用 Spring Cloud Config 伺服器

布建 Azure Spring Apps 企業方案服務實例時,您可以啟用 Spring Cloud Config Server。 如果您已經有 Azure Spring Apps Enterprise 方案實例,請參閱 本文中現有企業方案實例 中的管理 Spring Cloud Config Server 一節。

您可以使用 Azure 入口網站 或 Azure CLI 來啟用 Spring Cloud Config Server。

使用下列步驟來啟用 Spring Cloud Config Server:

  1. 開啟 Azure 入口網站

  2. 在 [基本] 索引標籤上,選取 [定價] 區段中的 [企業層],並指定必要資訊。 然後,選取 [下一步:受控元件]。

  3. 在 [受控元件] 索引卷標上,選取 [啟用 Spring Cloud Config Server][預覽]。

    顯示 [VMware Tanzu 設定] 索引標籤的 Azure 入口網站 螢幕快照,其中已醒目提示 [啟用 Spring Cloud Config Server] 複選框。

  4. 指定其他設定,然後選取 [ 檢閱和建立]。

  5. 在 [ 檢閱建立] 索引卷標上,確定 [ 啟用 Spring Cloud Config Server ][預覽] 已設定為 [ ]。 選取 [建立 ] 以建立企業方案實例。

限制

當您搭配 Git 後端使用 Config Server 時,有一些限制。 下列屬性會自動插入您的應用程式環境,以存取 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.config.import
  • spring.application.name
  • spring.jmx.enabled
  • management.endpoints.jmx.exposure.include

警告

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

建立您的組態伺服器檔案

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

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

注意

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

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

公用存放庫

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

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

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

具有 SSH 驗證的私人存放庫

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

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

具有基本身份驗證的私人存放庫

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

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

注意

許多 Git 存放庫伺服器都支援使用令牌,而不是使用密碼進行 HTTP 基本身份驗證。 某些存放庫允許令牌無限期保存。 不過,某些 Git 存放庫伺服器,包括 Azure DevOps Server,強制令牌在幾個小時內過期。 導致令牌過期的存放庫不應該搭配 Azure Spring Apps 使用令牌型驗證。 如果您使用這類令牌,請記得在令牌到期之前加以更新。

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

其他 Git 存放庫

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

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

下表顯示一些使用選擇性額外存放庫來設定服務的模式範例。 如需詳細資訊,請參閱本文中的額外存放庫一節和 Spring Cloud Config模式比對和多個存放庫一節。

模式 描述
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 且具有 prod 配置檔的 Spring boot 應用程式。

顯示 [設定伺服器] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [其他存放庫] 數據表的 [模式] 數據行。

顯示 [設定伺服器] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [其他存放庫] 數據表的 [模式] 數據行。

針對 Config Server 設定 Git 存放庫

將組態檔儲存在存放庫中之後,請使用下列步驟將 Azure Spring Apps 連線到存放庫:

  1. 登入 Azure 入口網站

  2. 移至您的 Azure Spring Apps 概觀 頁面。

  3. 在瀏覽窗格中選取 [Spring Cloud Config Server ]。

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

  5. 選取驗證

    顯示 [組態伺服器] 頁面之 Azure 入口網站 的螢幕快照。

    顯示 [設定伺服器] 頁面之 Azure 入口網站 的螢幕快照。

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

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

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

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

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

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

預設存放庫

本節說明如何輸入公用或私人存放庫的存放庫資訊。 針對私人存放庫,您可以使用基本身份驗證或 SSH。

使用下列步驟來輸入公用存放庫的存放庫資訊:

  1. 在 [預設存放庫] 區段的 [URI] 方塊中,貼上存放庫 URI。
  2. 針對 [ 卷標 ] 設定,輸入 config
  3. 確定 [ 驗證 ] 設定為 [公用]。
  4. 選取套用

使用下列步驟,使用基本密碼/令牌型驗證來輸入私人存放庫資訊的存放庫資訊:

  1. 在 [預設存放庫] 區段的 [URI] 方塊中,貼上存放庫 URI。

  2. 在 [驗證] 底下,選取 [編輯驗證]。

  3. 在 [編輯驗證] 窗格的 [驗證類型] 下拉式清單中,選取 [HTTP Basic]。

  4. 輸入您的使用者名稱和密碼/令牌,以授與 Azure Spring Apps 的存取權。

  5. 選取 [ 確定],然後選取 [ 套用 ] 以完成設定您的 Config Server 實例。

    Azure 入口網站 的螢幕快照,其中顯示基本身份驗證之驗證設定的預設存放庫區段。

    注意

    許多 Git 存放庫伺服器都支援使用令牌,而不是使用密碼進行 HTTP 基本身份驗證。 某些存放庫允許令牌無限期保存。 不過,某些 Git 存放庫伺服器,包括 Azure DevOps Server,強制令牌在幾個小時內過期。 導致令牌過期的存放庫不應該搭配 Azure Spring Apps 使用令牌型驗證。 如果您使用這類令牌,請記得在令牌到期之前加以更新。

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

使用下列步驟,使用 SSH 輸入私人存放庫的存放庫資訊:

  1. 在 [預設存放庫] 區段的 [URI] 方塊中,貼上存放庫 URI。

  2. 在 [驗證] 底下,選取 [編輯驗證]。

  3. 在 [編輯驗證] 窗格的 [驗證類型] 下拉式清單中,選取 [SSH]。

  4. 輸入您的私鑰。 選擇性地指定您的主機金鑰和主機金鑰演演算法。

  5. 在 Config Server 存放庫中包含您的公鑰。

  6. 選取 [ 確定],然後選取 [ 套用 ] 以完成設定您的 Config Server 實例。

    Azure 入口網站 的螢幕快照,其中顯示 SSH 驗證驗證之驗證設定的預設存放庫區段。

額外的存放庫

如果您要使用選擇性的額外存放庫來設定服務,請使用下列步驟:

  1. 指定您針對預設存放 庫所做的 URI驗證 設定。 請務必包含 模式的 [名稱 ] 設定。
  2. 選取 [ 套用 ] 將存放庫附加至您的實例。

匯入 YAML 檔案來設定 Git 存放庫

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

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

使用下列步驟匯入 YAML 檔案:

  1. 選取 [ 匯入設定 ],然後從專案目錄選取 YAML 檔案。 選取匯入

    顯示 [設定伺服器匯入設定] 窗格之 Azure 入口網站 的螢幕快照。

    顯示 [設定伺服器匯入設定] 窗格之 Azure 入口網站 的螢幕快照。

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

  2. 選取 [ 套用 ] 以完成匯入。

針對 Config Server 設定 Azure Repos

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

取得存放庫 URL 和認證

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

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

  2. 從文字框中複製複製 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 認證 ] 以顯示使用者名稱和密碼。 儲存此使用者名稱和密碼,以用於下一節。

針對 Config Server 設定 Git 存放庫

使用下列步驟來設定存放庫:

  1. 登入 Azure 入口網站

  2. 移至您的 Azure Spring Apps 概觀 頁面。

  3. 選取要設定的服務。

  4. 在 [設定] 底下的 [服務] 頁面左窗格中,選取 [Spring Cloud Config Server] 索引標籤

  5. 使用下列步驟來設定您所建立的存放庫:

    • 新增您稍早儲存的存放庫 URI。
    • 選取 [驗證] 底下的設定,以開啟 [編輯驗證] 窗格。
    • 針對 [ 驗證類型],選取 [ HTTP Basic]。
    • 針對 [ 用戶名稱],指定您稍早儲存的用戶名稱。
    • 針對 [ 密碼],指定您稍早儲存的密碼。
    • 選取 [ 確定],然後等候作業完成。

    顯示預設存放庫組態設定之 Azure 入口網站 的螢幕快照,其中已醒目提示 Uri 和驗證類型。

將應用程式系結至 Spring Cloud Config Server

使用下列命令將應用程式系結至 Spring Cloud Config Server,讓應用程式能夠從 Config Server 提取設定。

az spring config-server bind \
    --resource-group <resource-group> \
    --service <service-name> \
    --app <app-name>

您也可以從 Azure 入口網站 設定應用程式系結,如下列螢幕快照所示:

顯示 Spring Cloud Config Server 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [應用程式系結] 下拉式清單。

注意

當組態伺服器狀態變更時,這些變更需要幾分鐘的時間傳播到所有應用程式。

如果您變更系結/解除系結狀態,則必須重新啟動或重新部署應用程式。

您現在可以選擇使用下列命令,直接將應用程式系結至 Spring Cloud Config Server:

az spring app create \ 
    --resource-group <resource-group> \ 
    --service <service-name> \ 
    --name <app-name> \ 
    --bind-config-server

您也可以從 Azure 入口網站 將應用程式系結至 Spring Cloud Config Server,如下列螢幕快照所示:

顯示 [建立應用程式] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [系結] 下拉式清單。

刪除您的設定

選取 [Spring Cloud Config Server] 索引標籤上的 [重設],以清除現有的設定。 如果您想要將 Config Server 實例連接到另一個來源,例如當您從 GitHub 移至 Azure DevOps 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. 啟用自動重新整理,並在application.yml檔案中設定適當的重新整理間隔。 在下列範例中,用戶端會每隔 60 秒輪詢組態變更,這是您可以為重新整理間隔設定的最小值。

    根據預設,autorefresh 會設定為 false ,而重新整理間隔會設定為 60 seconds

    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 入口網站 或 Azure CLI,在建立服務之後啟用和停用 Spring Cloud Config Server。 停用 Spring Cloud Config Server 之前,您必須將所有應用程式解除系結。

使用下列步驟來啟用或停用 Spring Cloud Config Server:

  1. 流覽至您的服務實例,然後選取 [Spring Cloud Config Server]。

  2. 選取 [管理]

  3. 選取或取消選取 [啟用 Spring Cloud Config Server],然後選取 [ 儲存]。

    顯示 [管理] 窗格的 Azure 入口網站 螢幕快照,其中已醒目提示 [啟用組態伺服器] 選項。

  4. 您現在可以在 Spring Cloud Config Server 頁面上檢視 Spring Cloud Config Server 的狀態。

Azure Spring Apps