SpringCloud配置中心
本篇講解Spring Cloud Config採用Vault作為數據後臺的方案,以SpringCloud-Hoxton.RELEASE、SpringBoot-2.2.1.RELEASE版本為基礎,Vault採用1.3.1。
項目基礎採用Eureka作為註冊中心,啟動和發現都依賴它。
樣例託管在Github: ====>> cloud-service-config-vault
config-vault配置
pom.xml
<code><dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-config-server/<artifactid> /<dependency>/<code>
applicatin.yml
<code>spring: cloud: config: server: vault: backend: secret default-key: application #公共配置屬性,所有應用共享 host: localhost port: 8200 scheme: http kv-version: 2 timeout: 5 skip-ssl-validation: true/<code>
注意:
- backend參數對應vault中具體一個secrets,且只能配置一個secrets。
- default-key參數對於某個secrets中的對象,所有訪問配置中心的應用都能使用該對象內的配置數據,但只能配置一個默認key(親測)。
app-demo配置
pom.xml
<code><dependency> <groupid>org.springframework.cloud/<groupid> <artifactid>spring-cloud-starter-config/<artifactid> /<dependency>/<code>
application.yml
<code>spring: cloud: config: uri: http://localhost:8888/ profile: default name: service-demo1 token: s.F8qMMcRze19KpKq7E #每個應用可以分別設置不同權限的token/<code>
代碼中使用配置
<code>@Configuration public class DataSoucesCfg {@Value("${mysql_address}") String driver; @Value("${jdbc.url}") String url;}/<code>
注意:
- token參數是vault生成的token,可根據不同應用配置不同token,也可配置同一個。
- 對於vault作為後臺情況下profile和label是沒有什麼用,他們只在Git下有用,都可採用默認方式。
vault中數據
注意:
- vault本身對secrets下的secret是支持key-value和json兩種結構的,這兩種在項目中都可以使用,看上面圖片。 推薦採用json方式 ,數據存儲結構更加豐富。
- 不能在vault的key-value中用value存json字符串,這樣是無法使用的。
數據關係
SpringCloudConfig支持多個配置中心同時運行,也就是說Config-Vault與Config-Git可以並行,只要將 配置服務名定義相同 即可。
下圖介紹Config架構:
總結
從後臺帶WEB管理系統這點考慮,只有GitLab&Vault作為數據後臺是靠譜的,它們兩個都可以通過 權限分配 來管理配置。Vault可以通過Policies將不同權限配置按token進行非常細緻的綁定訪問,比如可以讀不可寫、不可訪問等。這點 Gitlab需要進行二次開發 才能達到Vault的效果。
Demo樣例源碼: https://github.com/owen-jia/cloud-parent
作者:Owen Jia,博客: https://blog.shareworld.vip
閱讀更多 木子莫 的文章