在 Azure Container Apps 中設定 Spring 元件的 Config Server 設定 (預覽)
Config Server for Spring 提供集中式位置,讓設定數據可供多個應用程式使用。 使用下列指引來瞭解如何設定和管理 Spring 元件的 Config Server。
顯示
您可以使用 命令,依名稱 show
檢視個別元件的詳細數據。
執行下列命令之前,請以您的值取代以 <>
括住的預留位置。
az containerapp env java-component config-server-for-spring show \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME>
清單
您可以使用 命令列出所有已註冊的 list
Java 元件。
執行下列命令之前,請以您的值取代以 <>
括住的預留位置。
az containerapp env java-component list \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP>
繫結
--bind
使用 命令的 update
參數,在 Spring 元件的 Config Server 與容器應用程式之間建立連線。
執行下列命令之前,請以您的值取代以 <>
括住的預留位置。
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--bind <JAVA_COMPONENT_NAME>
解除系結
若要中斷容器應用程式與 Spring 元件的 Config Server 之間的連線,請使用 --unbind
命令的 update
參數。
執行下列命令之前,請以您的值取代以 <>
括住的預留位置。
az containerapp update \
--name <CONTAINER_APP_NAME> \
--unbind <JAVA_COMPONENT_NAME> \
--resource-group <RESOURCE_GROUP>
設定選項
az containerapp update
命令會--configuration
使用 參數來控制如何設定 Spring 的 Config Server。 只要多個參數是以空格分隔,就可以一次使用多個參數。 您可以在 Spring Cloud Config Server 檔中找到更多詳細數據。
下表列出可用的不同組態值。
Git 後端組態
名稱 | 描述 |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
遠端存放庫的 URI。 |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
使用遠端存放庫進行驗證的用戶名稱。 |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
使用遠端存放庫進行驗證的密碼。 |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
搜尋要在本機工作複本中使用的路徑。 根據預設,只會搜尋根目錄。 |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
旗標,表示存放庫應該強制提取。 如果為 true,請捨棄任何本機變更,並從遠端存放庫取得。 |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Git 所使用的預設標籤是main。 如果您未設定 spring.cloud.config.server.git.default-label,且名為 main 的分支不存在,則組態伺服器預設也會嘗試簽出名為 master 的分支。 如果您想要停用後援分支行為,您可以將 spring.cloud.config.server.git.tryMasterBranch 設定為 false。 |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
根據預設,組態伺服器會嘗試簽出名為 master 的分支。 |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
您可以將 git.skipSslValidation 屬性設定為 true,以停用組態伺服器的 Git 伺服器 SSL 憑證驗證。 |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
旗標,表示應該在啟動時複製存放庫(而不是隨選)。 通常會導致啟動速度較慢,但第一次查詢的速度較快。 |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
取得 HTTP 或 SSH 連線的逾時(以秒為單位)(如果適用)。 預設為5秒。 |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
設定伺服器會從 Git 後端擷取更新的組態數據的頻率。 |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
有效的 SSH 私密鑰。 如果 ignore-local-ssh-settings 為 true,且 Git URI 為 SSH 格式,則必須設定 。 |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
有效的 SSH 主機金鑰。 如果同時設定 host-key-algorithm,則必須設定 。 |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
其中一個 ssh-dss、ssh-rsa、ssh-ed25519、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384 或 ecdsa-sha2-nistp521。 如果同時設定 host-key,則必須設定 。 |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true 或 false。 如果為 false,請忽略主機金鑰的錯誤。 |
spring.cloud.config.server.git.repos.{repoName} |
遠端存放庫的 URI。 |
spring.cloud.config.server.git.repos.{repoName}.pattern |
模式格式是具有通配符的 {application}/{profile} 名稱逗號分隔列表。 如果 {application}/{profile} 不符合任何模式,它會使用下定義的預設 URI。 |
一般設定
記錄相關組態
- logging.level。*
- logging.group。*
- 記錄下的任何其他設定都應該禁止。* 命名空間,例如,應該禁止使用
logging.file
寫入記錄檔。
spring.cloud.config.server.overrides
- 將屬性來源無條件傳送至所有客戶端的額外對應。
spring.cloud.config.override-none
- 您可以將用戶端中所有覆寫的優先順序變更為更像是預設值,讓應用程式在環境變數或系統屬性中提供自己的值,方法是在遠端存放庫中設定 spring.cloud.config.override-none=true 旗標(預設值為 false)。
spring.cloud.config.allow-override
- 如果您啟用組態第一次啟動程式,您可以允許用戶端應用程式在來自組態伺服器的應用程式組態中放置兩個屬性,以覆寫組態伺服器的組態。
spring.cloud.config.server.health。
- 您可以設定健全狀況指標來檢查更多應用程式以及自訂設定檔和自定義標籤
spring.cloud.config.server.accept-empty
- 如果找不到應用程式,您可以設定
spring.cloud.config.server.accept-empty
為false
,讓伺服器傳回 HTTP404
狀態。 根據預設,此旗標會設定為true
。
- 如果找不到應用程式,您可以設定
加密和解密 (對稱)
- encrypt.key
- 使用對稱密鑰很方便,因為它是要設定的單一屬性值。
- spring.cloud.config.server.encrypt.enabled
- 您可以將此設定為
false
,以停用伺服器端解密。
- 您可以將此設定為
- encrypt.key
Refresh
取用屬性的服務在發生之前必須知道變更。 適用於 Spring 的 Config Server 的預設通知方法牽涉到手動觸發重新整理事件,例如呼叫 https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
重新整理 ,如果有許多應用程式實例,則可能無法使用。
相反地,您可以讓設定客戶端根據重新整理內部輪詢變更,自動重新整理 Config Server 的值。 使用下列步驟,從 Config Server 自動重新整理值。
註冊排程的工作,以在指定的間隔中重新整理內容,如下列範例所示。
@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 final 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, Duration.ofSeconds(refreshInterval)); } } }
在application.yml檔案中啟用
autorefresh
並設定適當的重新整理間隔。 在下列範例中,用戶端每隔 60 秒輪詢一次組態變更,這是您可以針對重新整理間隔設定的最小值。根據預設,
autorefresh
會設定為false
,並將refresh-interval
設定為 60 秒。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; }
使用對稱金鑰進行加密和解密
伺服器端解密
根據預設,會啟用伺服器端加密。 使用下列步驟在應用程式中啟用解密。
在 Git 存放庫中的 .properties 檔案中新增加密的屬性。
例如,您的檔案應該類似下列範例:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
更新 Spring Java 元件的元件的元件伺服器,以使用具有加密屬性並設定加密金鑰的 Git 存放庫。
執行下列命令之前,請以您的值取代以
<>
括住的預留位置。az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
用戶端解密
您可以遵循下列步驟,使用屬性的用戶端解密:
在 Git 存放庫中的檔案中
*.properties*
新增加密屬性。更新 Config Server for Spring Java 元件,以使用具有加密屬性並停用伺服器端解密的 Git 存放庫。
執行下列命令之前,請以您的值取代以
<>
括住的預留位置。az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
在您的用戶端應用程式中,將解密金鑰
ENCRYPT_KEY=randomKey
新增為環境變數。或者,如果您在 上加入 spring-cloud-starter-bootstrap,或設定
spring.cloud.bootstrap.enabled=true
為系統屬性,請在 中bootstrap.properties
設定encrypt.key
。classpath
執行下列命令之前,請以您的值取代以
<>
括住的預留位置。az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey