使用適用於 Tanzu 的應用程式設定服務

注意

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

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

本文說明如何使用 VMware Tanzu 的應用程式組態服務搭配 Azure Spring Apps 企業版方案。

VMware Tanzu 的應用程式組態服務是其中一個商業 VMware Tanzu 元件。 它可讓您管理 Kubernetes 原生 ConfigMap 資源,這些資源會從一或多個 Git 存放庫中定義的屬性填入。

使用應用程式組態服務,您可以集中管理所有環境之應用程式的外部屬性。 若要瞭解基本和標準方案中的 Spring Cloud Config Server 差異,請參閱將 Azure Spring Apps Basic 或 Standard 方案實例遷移至企業方案的外部設定一節。

應用程式組態服務提供兩個版本:Gen1 和 Gen2。 Gen1 版本主要為現有客戶提供回溯相容性,且僅支援到 2024 年 4 月 30 日為止。 新的服務實例應該使用 Gen2。 Gen2 版本會使用 flux 作為後端來與 Git 存放庫通訊,並比 Gen1 提供更好的效能。

下表顯示子元件關聯性:

產生應用程式組態服務 子元件
Gen1 application-configuration-service
Gen2 application-configuration-service
flux-source-controller

下表顯示您參考的一些基準檢驗數據。 不過,Git 存放庫大小是影響效能數據的重要因素。 我們建議您只將必要的組態檔儲存在 Git 存放庫中,以保持小型。

產生應用程式組態服務 100 模式下重新整理的持續時間 250 模式下重新整理的持續時間 500 模式下重新整理的持續時間
Gen1 330 秒 840 秒 1500 秒
Gen2 13 秒 100 秒 378 秒

當您連線到遠端 Git 存放庫時,Gen2 也會提供更多安全性驗證。 如果您使用 HTTPS,Gen2 需要安全連線,並在使用 SSH 連線時驗證正確的主機金鑰和主機演算法。

當您建立 Azure Spring Apps 企業版服務實例時,您可以選擇應用程式組態服務的版本。 默認版本為 Gen1。 您也可以在建立實例之後升級至 Gen2,但不支持降級。 升級為零停機時間,但仍建議您在預備環境中進行測試,再移至生產環境。

必要條件

  • 已啟用應用程式組態服務的已布建 Azure Spring Apps 企業版方案實例。 如需詳細資訊,請參閱 快速入門:使用企業方案建置和部署應用程式至 Azure Spring Apps。

管理應用程式組態服務設定

應用程式組態服務支援 Azure DevOps、GitHub、GitLab 和 Bitbucket 來儲存組態檔。

若要管理服務設定,請開啟 [設定] 區段。 在本節中,您可以設定下列重要層面:

  • 世代:升級服務產生。
  • 重新整理間隔:調整服務從 Git 存放庫檢查更新的頻率。
  • 存放庫:新增專案或修改現有的專案。 此函式可讓您控制服務監視用來提取數據的存放庫。

顯示 [應用程式組態服務] 頁面的 Azure 入口網站 螢幕快照,其中醒目提示 [設定] 索引標籤。

如果您目前的服務世代是 Gen1,您可以升級至 Gen2 以提升效能。 如需詳細資訊,請參閱 從 Gen1 升級至 Gen2 一節。

重新 整理間隔 會指定檢查存放庫中更新的頻率(以秒為單位)。 最小值為 0,這會停用自動重新整理。 為了獲得最佳效能,請將此間隔設定為最小值 60 秒。

下表描述每個存放庫項目的屬性:

屬性 是必要的嗎? 描述
Name Yes 標記每個 Git 存放庫的唯一名稱。
Patterns Yes 在 Git 存放庫中搜尋的模式。 針對每個模式,請使用 {application} 或 {application}/{profile}格式,而不是 {application}-{profile}.yml。 以逗號分隔模式。 如需詳細資訊,請參閱 本文的模式 一節。
URI Yes Git URI(例如 https://github.com/Azure-Samples/piggymetrics-configgit@github.com:Azure-Samples/piggymetrics-config
Label Yes 在 Git 存放庫中搜尋的分支名稱。
Search path No 選擇性的搜尋路徑,以逗號分隔,以搜尋 Git 存放庫的子目錄。

模式

組態是使用您在模式中定義的內容,從 Git 後端提取。 模式是 {application}/{profile} 的組合,如下列指導方針中所述。

  • {application} - 您要擷取其組態的應用程式名稱。 此值 application 會被視為預設應用程式,並包含跨多個應用程式共用的組態資訊。 任何其他值都會參考特定應用程式,並包含預設應用程式的特定應用程式和共用屬性的屬性。
  • {profile} -選。 您可以擷取其屬性的設定檔名稱。 空值或值 default包含跨配置檔共享的屬性。 非預設值包括指定設定檔的屬性,以及預設配置檔的屬性。

驗證

下列螢幕快照顯示應用程式組態服務支援的三種存放庫驗證類型。

顯示 [應用程式組態服務] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [驗證類型] 功能表。

下列清單描述三種驗證類型:

  • 公用存放庫。

    當您使用公用存放庫時,不需要任何額外的驗證設定。 在 [驗證] 窗體中選取 [公用]。

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

    屬性 是必要的嗎? 描述
    CA certificate No 只有在自我簽署憑證用於 Git 存放庫 URL 時才需要。
  • 具有基本身份驗證的私人存放庫。

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

    屬性 是必要的嗎? 描述
    username Yes 用來存取存放庫的用戶名稱。
    password Yes 用來存取存放庫的密碼。
    CA certificate No 只有在自我簽署憑證用於 Git 存放庫 URL 時才需要。
  • 具有 SSH 驗證的私人存放庫。

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

    屬性 是必要的嗎? 描述
    Private key Yes 識別 Git 使用者的私鑰。 不支援複雜密碼加密的私鑰。
    Host key 第 1 代否
    是,適用於 Gen2
    Git 伺服器的主機金鑰。 如果您在命令行上透過 Git 連線到伺服器,主機金鑰位於 .ssh/known_hosts 檔案中。 請勿包含演算法前置詞,因為它在 中 Host key algorithm指定。
    Host key algorithm 第 1 代否
    是,適用於 Gen2
    hostKey演算法:、、ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521ssh-dssssh-rsa其中一個。 (提供 時為 必要)。Host key
    Strict host key checking No 選擇性值,指出如果後端在使用提供的 Host key時遇到錯誤,是否應該忽略後端。 有效值為 truefalse。 預設值是 true

若要驗證目標 URI 的存取權,請選取 [ 驗證]。 驗證成功完成之後,選取 [ 套用 ] 以更新組態設定。

從 Gen1 升級至 Gen2

相較於 Gen1,應用程式組態服務 Gen2 提供更佳的效能,特別是當您有大量的組態檔時。 我們建議使用 Gen2,特別是因為 Gen1 即將淘汰。 從 Gen1 升級至 Gen2 是零停機,但仍建議您先在預備環境中進行測試,再移至生產環境。

Gen2 在使用 SSH 驗證時,需要比 Gen1 更多的組態屬性。 您必須更新應用程式中的組態屬性,使其可與 Gen2 搭配運作。 下表顯示使用 SSH 驗證時 Gen2 的必要屬性:

屬性 說明
Host key Git 伺服器的主機金鑰。 如果您在命令行上透過 Git 連線到伺服器,主機金鑰位於 .ssh/known_hosts 檔案中。 請勿包含演算法前置詞,因為它在 中 Host key algorithm指定。
Host key algorithm hostKey演算法:、、ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521ssh-dssssh-rsa其中一個。

使用下列步驟,從 Gen1 升級至 Gen2:

  1. 在 Azure 入口網站 中,流覽至 Azure Spring Apps 服務實例的 [應用程式組態服務] 頁面。

  2. 選取 [設定] 區段,然後在 [產生] 下拉功能表中選取 [Gen2]。

    顯示 [應用程式組態服務] 頁面的 [Azure 入口網站] 螢幕快照,其中顯示 [設定] 索引卷標,並開啟 [產生] 功能表。

  3. 選取 [驗證 ] 以驗證目標 URI 的存取權。 驗證成功完成之後,選取 [ 套用 ] 以更新組態設定。

    顯示 [應用程式組態服務] 頁面和 [設定] 索引卷標的 Azure 入口網站 螢幕快照,其中已醒目提示 [驗證] 按鈕。

Polyglot 支援

應用程式組態服務可與 Spring Boot 應用程式順暢地運作。 服務所產生的屬性會透過 Spring Boot 匯入為外部組態,並插入豆類。 您不需要撰寫額外的程式代碼。 您可以使用註釋來取用值、透過 @Value Spring 的環境抽象概念進行存取,或使用註釋將它們 @ConfigurationProperties 系結至結構化物件。

應用程式組態服務也支援polyglot應用程式,例如 dotNET、Go、Python 等等。 若要存取您在應用程式中的polyglot 應用程式部署期間指定要載入的組態檔,請嘗試存取檔案路徑,您可以透過環境變數擷取的名稱,例如 AZURE_SPRING_APPS_CONFIG_FILE_PATH。 您可以在該路徑下存取所有預定的組態檔。 若要存取組態檔中的屬性值,請使用您應用程式的現有讀取/寫入檔案連結庫。

重新整理策略

當您在 Git 存放庫中修改並認可您的設定時,在應用程式中反映這些變更之前,會先進行數個步驟。 此程式雖然自動化,但牽涉到下列不同的階段和元件,每個階段都有自己的時間和行為:

  • 依應用程式組態服務輪詢:應用程式組態服務會定期輪詢後端 Git 存放庫以偵測任何變更。 此輪詢會以重新整理間隔所定義的設定頻率進行。 偵測到變更時,應用程式組態服務會更新 Kubernetes ConfigMap
  • ConfigMap 更新與 kubelet 快取的互動:在 Azure Spring Apps 中,這會 ConfigMap 掛接為相關應用程式的數據磁碟區。 不過,由於 kubelet 重新整理快取以辨識 中的 ConfigMap變更的頻率,此程式會有自然延遲。
  • 應用程式會讀取更新的組態:在 Azure Spring Apps 環境中執行的應用程式可以存取更新的組態值。 Spring Context 中的現有豆類不會自動重新整理以使用更新的組態。

下圖摘要說明這些階段:

顯示應用程式組態服務重新整理程式生命週期的圖表。

您可以調整應用程式設定服務的輪詢重新整理間隔,以符合您的特定需求。 若要在應用程式中套用更新的組態,則需要重新啟動或重新整理動作。

在 Spring 應用程式中,屬性會保留或參考為 Spring Context 內的豆類。 若要載入新的組態,請考慮使用下列方法:

  • 重新啟動應用程式。 重新啟動應用程式一律會載入新的組態。

  • /actuator/refresh透過 Spring 執行器呼叫設定用戶端上公開的端點。

    若要使用此方法,請將下列相依性新增至組態用戶端的 pom.xml 檔案。

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    您也可以新增下列設定來啟用執行器端點:

    management.endpoints.web.exposure.include=refresh, bus-refresh, beans, env
    

    藉由呼叫/actuator/refresh端點重載屬性來源之後,系統會重新整理具有批注@RefreshScope的豆類中系結的屬性@Value

    @Service
    @Getter @Setter
    @RefreshScope
    public class MyService {
       @Value
       private Boolean activated;
    }
    

    搭配應用程式端點使用 curl 來重新整理新的組態,如下列範例所示:

    curl -X POST http://{app-endpoint}/actuator/refresh
    
  • 用來 FileSystemWatcher 監看檔案變更,並視需要重新整理內容。 FileSystemWatcher 是隨附的 spring-boot-devtools 類別,可監看特定目錄的檔案變更,或者您可以使用另一個具有類似函式的公用程式。 上述選項會要求用戶主動起始重新整理,而後者可以監視檔案變更,並在偵測更新時自動叫用重新整理。 您可以使用 環境變數 AZURE_SPRING_APPS_CONFIG_FILE_PATH來擷取檔案路徑,如 Polyglot 支援一節中所述

設定應用程式組態服務設定

使用下列步驟來設定應用程式組態服務:

  1. 選取 [應用程式組態服務]。

  2. 選取 [ 概觀 ] 以檢視配置給應用程式組態服務的執行中狀態和資源。

    顯示 [應用程式組態服務] 頁面的螢幕快照,其中已醒目提示 [概觀] 索引卷標。 Azure 入口網站

  3. 選取 [設定],然後在 [存放庫] 區段中新增具有 Git 後端資訊的專案。

  4. 選取 [驗證 ] 以驗證目標 URI 的存取權。 驗證成功完成之後,選取 [ 套用 ] 以更新組態設定。

    顯示 [應用程式組態服務] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [設定] 索引標籤和 [驗證] 按鈕。

設定 TLS 憑證,以使用 Gen2 的自我簽署憑證存取 Git 後端

此為選用步驟。 如果您使用 Git 後端的自我簽署憑證,您必須設定 TLS 憑證以存取 Git 後端。

您必須先將憑證上傳至 Azure Spring Apps。 如需詳細資訊,請參閱在 Azure Spring Apps 中使用應用程式中 TLS/SSL 憑證的匯入憑證一節。

使用下列步驟來設定 TLS 憑證:

  1. 流覽至您的服務資源,然後選取 [應用程式組態服務]。

  2. 選取 [設定],並使用 Git 後端資訊新增或更新 [存放庫] 區段中的新專案。

    顯示 [應用程式組態服務] 頁面的 Azure 入口網站 螢幕快照,其中顯示 [設定] 索引標籤。

搭配應用程式使用應用程式組態服務

當您搭配 Git 後端使用應用程式組態服務並使用集中式組態時,必須將應用程式系結至應用程式組態服務。

使用下列步驟搭配應用程式使用應用程式組態服務:

  1. 開啟 [應用程式系 ] 索引標籤。

  2. 選取 [ 系結應用程式 ],然後從下拉式清單中選擇一個應用程式。 選取 [ 套用 ] 以系結。

    顯示 [應用程式組態服務] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [應用程式系結] 索引標籤。

    注意

    當您變更系結/解除系結狀態時,您必須重新啟動或重新部署應用程式,系結才會生效。

  3. 在導覽功能表中,選取 [應用程式 ] 以檢視所有應用程式的清單。

  4. 選取目標應用程式以設定資料行的 name 模式。

  5. 在瀏覽窗格中,選取 [組態 ],然後選取 [ 一般設定]。

  6. 在 [ 組態檔模式] 下拉式 清單中,從清單中選擇一或多個模式。 如需詳細資訊,請參閱 模式 一節。

    顯示 [應用程式組態] 頁面的螢幕快照,其中已醒目提示 [一般設定] 索引卷標和 api-gateway 選項。 Azure 入口網站

  7. 選取 [儲存]。

將應用程式系結至應用程式組態服務

您現在可以選擇在建立新的應用程式時,將應用程式系結至應用程式組態服務。

使用下列步驟來建立新的應用程式,並將它系結至應用程式組態服務:

  1. 在瀏覽窗格中,選取 [ 應用程式 ] 以查看您的所有應用程式。

  2. 選取 [建立應用程式 ] 以建立新的應用程式。

  3. 輸入新應用程式的名稱。

  4. 選取 [系結] 索引卷標,然後從下拉式清單中選取 [應用程式組態服務]。

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

  5. 選取 [建立 ] 以完成建立您的應用程式,並將它系結至應用程式組態服務。

在建立服務之後啟用/停用應用程式組態服務

您可以使用 Azure 入口網站 或 Azure CLI,在建立服務之後啟用和停用應用程式組態服務。 停用應用程式設定服務之前,您必須將應用程式的所有應用程式解除系結。

使用下列步驟來啟用或停用應用程式組態服務:

  1. 流覽至您的服務資源,然後選取 [應用程式組態服務]。
  2. 選取 [管理]
  3. 選取或取消選取 [啟用應用程式組態服務 ],然後選取 [ 儲存]。
  4. 您現在可以在 [應用程式組態服務] 頁面上檢視應用程式組態服務 的狀態。

檢查 ConfigMap 中的組態檔

下一節說明如何檢查應用程式組態服務從相關 Kubernetes ConfigMap中上游 Git 存放庫提取的組態檔內容。 如需詳細資訊,請參閱本文的重新 整理策略 一節。

指派 Azure 角色

首先,您必須將 Azure 角色 Azure Spring Apps Application Configuration Service Config File Pattern Reader Role 指派給您。

使用下列步驟來指派 Azure 角色:

  1. 開啟 Azure 入口網站,然後移至您的 Azure Spring Apps 服務實例。

  2. 在瀏覽窗格中,選取 [存取控制 [IAM]。

  3. [存取控制 (IAM) 頁面上,選取 [新增],然後選取 [新增角色指派]。

    顯示 Azure Spring Apps 實例 存取控制 (IAM) 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [新增角色指派] 選項。

  4. 在 [ 新增角色指派 ] 頁面上的 [ 名稱] 清單中,搜尋並選取目標角色,然後選取 [ 下一步]。

    顯示 Azure Spring Apps 實例 [新增角色指派] 頁面的螢幕快照,其中醒目提示 Azure Spring Apps 應用程式組態服務組態檔模式讀取器角色名稱。 Azure 入口網站

  5. 選取 [ 成員 ],然後搜尋並選取您的用戶名稱。

  6. 選取檢閱+指派

使用 Azure CLI 檢查組態檔

使用下列命令依模式檢視組態檔的內容:

az spring application-configuration-service config show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --config-file-pattern <pattern>

此指令會產生類似下列範例的 JSON 輸出:

{
  "configurationFiles": {
    "application.properties": [
      "example.property.application.name: example-service",
      "example.property.cloud: Azure"
    ]
  },
  "metadata": {
    "gitRevisions": "[{\"url\":\"{gitRepoUrl}\",\"revision\":\"{revisionInfo}\"}]"
  }
}

注意

metadatagitRevisions 屬性不適用於 Application Configuration Service 的 Gen1 版本。

您也可以搭配 --export-path {/path/to/target/folder} 參數使用此命令,將組態檔匯出至指定的資料夾。 它同時支持相對路徑和絕對路徑。 如果您未指定路徑,命令預設會使用目前目錄的路徑。

檢查應用程式中的組態檔

將應用程式系結至應用程式組態服務並設定應用程式部署的模式之後,如本文的使用應用程式組態服務搭配應用程式一節所述ConfigMap應該將包含模式的組態檔掛接至應用程式容器。 使用下列步驟來檢查應用程式部署的每個實體中的組態檔:

  1. 連線 至其中一個應用程式實例。 如需詳細資訊,請參閱對應用程式實例 連線 以進行疑難解答

  2. echo $AZURE_SPRING_APPS_CONFIG_FILE_PATH使用 命令來尋找包含組態檔的資料夾。 位置清單會以逗號分隔,如下列範例所示:

      $ echo $AZURE_SPRING_APPS_CONFIG_FILE_PATH
      /etc/azure-spring-cloud/configmap/acs-default-payment-default-e9d46,/etc/azure-spring-cloud/configmap/acs-default-catalog-default-616f4
    
  3. 使用 之類的 cat命令檢查組態檔的內容。

注意

應用程式中無法使用 Git 修訂資訊。

查看記錄

下列各節說明如何使用 Azure CLI 或 Azure 入口網站 來檢視應用程式記錄。

使用即時記錄串流

您可以使用 Azure CLI 即時串流記錄。 如需詳細資訊,請參閱 即時串流 Azure Spring Apps 受控元件記錄。 下列範例示範如何使用 Azure CLI 命令,持續串流和flux-source-controller子元件的新記錄application-configuration-service

使用下列命令來串流處理 的 application-configuration-service紀錄:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name application-configuration-service \
    --all-instances \
    --follow

使用下列命令來串流處理 的 flux-source-controller紀錄:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name flux-source-controller \
    --all-instances \
    --follow

使用 Log Analytics

下列各節說明如何使用Log Analytics開啟和檢視系統記錄。

Log Analytics 的診斷設定

您必須先開啟系統記錄,並將記錄傳送至 Log Analytics 實例,才能查詢應用程式組態服務的記錄。 若要在 Azure 入口網站 中啟用系統記錄,請使用下列步驟:

  1. 開啟您的 Azure Spring Apps 實例。

  2. 在瀏覽窗格中,選取 [ 診斷設定]。

  3. 選取 [新增診斷設定 ],或選取 現有設定的 [編輯設定 ]。

  4. 在 [ 記錄] 區段中,選取 [ 系統記錄] 類別。

  5. 在 [ 目的地詳細數據] 區段中,選取 [ 傳送至 Log Analytics 工作區 ],然後選取您的工作區。

  6. 選取 [ 儲存] 以更新設定。

檢查 Log Analytics 中的記錄

若要檢查 和 的記錄application-configuration-service並使用 flux-source-controller Azure 入口網站,請使用下列步驟:

  1. 請確定您已開啟 系統記錄。 如需詳細資訊,請參閱 Log Analytics 的診斷設定一節。

  2. 開啟您的 Azure Spring Apps 實例。

  3. 在導覽功能表中,選取 [ 記錄 ],然後選取 [ 概觀]。

  4. 在查詢編輯窗格中使用下列範例查詢。 調整時間範圍,然後選取 [ 執行 ] 以搜尋記錄。

    • 若要檢視 的 application-configuration-service記錄,請使用下列查詢:

      AppPlatformSystemLogs
      | where LogType in ("ApplicationConfigurationService")
      | project TimeGenerated , ServiceName , LogType, Log , _ResourceId
      | limit 100
      

      顯示 application-configuration-service 記錄查詢結果的 Azure 入口網站 螢幕快照。

    • 若要檢視 的 flux-source-controller記錄,請使用下列查詢:

      AppPlatformSystemLogs
      | where LogType in ("Flux")
      | project TimeGenerated , ServiceName , LogType, Log , _ResourceId
      | limit 100
      

      Azure 入口網站 的螢幕快照,其中顯示 flux-source-controller 記錄的查詢結果。

注意

在 Log Analytics 中提供記錄之前,可能會有幾分鐘的延遲。

已知問題疑難排解

如果應用程式未反映最新的變更,請根據 [ 重新整理策略 ] 區段檢查下列專案:

  • 檢查下列項目,確認 Git 存放庫已正確更新:
    • 確認所需的組態檔變更分支已更新。
    • 確認應用程式組態服務中設定的模式符合更新的組態檔。
    • 確認應用程式已系結至應用程式組態服務。
  • 確認已ConfigMap更新包含應用程式所用模式之組態檔的 ,如本文的 ConfigMap 中檢查組態檔一節所述。 如果未更新,請提出票證。
  • 確認 ConfigMap 已將 掛接至應用程式作為檔案,如本文應用程式區段中的檢查組態檔中所述。 如果檔案未更新,請等候 Kubernetes 重新整理間隔 (1 分鐘),或重新啟動應用程式來強制重新整理。

檢查這些項目之後,應用程式應該能夠讀取更新的組態。 如果應用程式仍然未更新,請提出票證。

Azure Spring Apps