在 Azure Spring Apps 中設定受控 Spring Cloud Config Server
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於: ✔️ 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。
- 已布建並執行 Azure Spring Apps 服務實例。 若要設定及啟動 Azure Spring Apps 服務,請參閱 快速入門:使用企業方案建置和部署應用程式至 Azure Spring Apps。
- Git。
啟用 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:
開啟 Azure 入口網站。
在 [基本資料] 索引標籤上,選取 [定價] 區段中的 [企業層],然後指定必要資訊。 然後,選取 [下一步:受控元件]。
在 [ 受控元件] 索引 卷標上,選取 [ 啟用 Spring Cloud Config Server]。
指定其他設定,然後選取 [檢閱並建立]。
在 [ 檢閱建立] 索引卷標上,確定 [ 啟用 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-dss 、 ssh-rsa 、 ecdsa-sha2-nistp256 、 ecdsa-sha2-nistp384 或 ecdsa-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-A team-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-dss 、 ssh-rsa 、 ecdsa-sha2-nistp256 、 ecdsa-sha2-nistp384 或 ecdsa-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 應用程式。 |
針對 Config Server 設定 Git 存放庫
將組態檔儲存在存放庫中之後,請使用下列步驟將 Azure Spring Apps 連線到存放庫:
登入 Azure 入口網站。
移至您的 Azure Spring Apps 概觀 頁面。
在瀏覽窗格中選取 [Spring Cloud Config Server ]。
在 [預設存放庫] 區段中,將 URI 設定為
https://github.com/Azure-Samples/piggymetrics-config
。選取驗證。
驗證完成時,請選取 [ 套用 ] 以儲存變更。
更新設定可能需要幾分鐘的時間。 設定完成後,您應該會收到通知。
直接將存放庫資訊輸入至 Azure 入口網站
您可以輸入預設存放庫的存放庫資訊,並選擇性地輸入額外的存放庫資訊。
預設存放庫
本節說明如何輸入公用或私人存放庫的存放庫資訊。 針對私人存放庫,您可以使用基本身份驗證或 SSH。
使用下列步驟來輸入公用存放庫的存放庫資訊:
- 在 [預設存放庫] 區段的 [URI] 方塊中,貼上存放庫 URI。
- 針對 [ 卷標 ] 設定,輸入 config。
- 確定 [ 驗證 ] 設定為 [公用]。
- 選取套用。
使用下列步驟,使用基本密碼/令牌型驗證來輸入私人存放庫資訊的存放庫資訊:
在 [預設存放庫] 區段的 [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 實例。
額外的存放庫
如果您要使用選擇性的額外存放庫來設定服務,請使用下列步驟:
- 指定您針對預設存放 庫所做的 URI 和 驗證 設定。 請務必包含 模式的 [名稱 ] 設定。
- 選取 [ 套用 ] 將存放庫附加至您的實例。
匯入 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 檔案:
選取 [ 匯入設定 ],然後從專案目錄選取 YAML 檔案。 選取匯入。
[ 通知] 窗格會顯示
async
作業。 設定伺服器應該會在 1-2 分鐘後回報成功。 YAML 檔案中的資訊會顯示在 Azure 入口網站 中。選取 [ 套用 ] 以完成匯入。
針對 Config Server 設定 Azure Repos
Azure Spring 應用程式可存取由 SSH 保護,或使用 HTTP 基本驗證加以保護的公開 Git 存放庫。 HTTP 基本身份驗證是使用 Azure Repos 建立和管理存放庫的最簡單選項。
取得存放庫 URL 和認證
使用下列步驟來取得存放庫 URL 和認證:
在專案的 Azure Repos 入口網站中,選取 [ 複製]。
從文字框中複製複製 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 以供稍後使用。
選取 [產生 Git 認證 ] 以顯示使用者名稱和密碼。 儲存此使用者名稱和密碼,以用於下一節。
針對 Config Server 設定 Git 存放庫
使用下列步驟來設定存放庫:
登入 Azure 入口網站。
移至您的 Azure Spring Apps 概觀 頁面。
選取要設定的服務。
在 [設定] 底下的 [服務] 頁面左窗格中,選取 [Spring Cloud Config Server] 索引標籤。
使用下列步驟來設定您所建立的存放庫:
- 新增您稍早儲存的存放庫 URI。
- 選取 [驗證] 底下的設定,以開啟 [編輯驗證] 窗格。
- 針對 [ 驗證類型],選取 [ HTTP Basic]。
- 針對 [ 用戶名稱],指定您稍早儲存的用戶名稱。
- 針對 [ 密碼],指定您稍早儲存的密碼。
- 選取 [ 確定],然後等候作業完成。
將應用程式系結至 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:
az spring app create \
--resource-group <resource-group> \
--service <service-name> \
--name <app-name> \
--bind-config-server
您也可以從 Azure 入口網站 將應用程式系結至 Spring Cloud Config Server,如下列螢幕快照所示:
刪除您的設定
選取 [Spring Cloud Config Server] 索引標籤上的 [重設],以清除現有的設定。 如果您想要將 Config Server 實例連接到另一個來源,例如當您從 GitHub 移至 Azure DevOps Server 時,請刪除組態伺服器設定。
重新整理設定伺服器
當屬性變更時,取用這些屬性的服務必須先收到通知,才能進行變更。 Spring Cloud Config Server 的預設解決方案是手動觸發重新整理事件,如果有許多應用程式實例,可能不可行。 如需詳細資訊,請參閱 集中式設定
相反地,您可以讓設定客戶端根據重新整理內部輪詢變更,自動重新整理 Config Server 的值。
使用下列步驟,從 Config Server 自動重新整理值:
註冊排程的工作以在指定的間隔中重新整理內容,如下列範例所示:
@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); } } }
啟用自動重新整理,並在application.yml檔案中設定適當的重新整理間隔。 在下列範例中,用戶端會每隔 60 秒輪詢組態變更,這是您可以為重新整理間隔設定的最小值。
根據預設,autorefresh 會設定為
false
,而重新整理間隔會設定為60 seconds
。spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
將 新增
@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: