首頁 > 軟體

SpringCloud使用集中設定元件Config規避資訊洩露

2022-07-16 18:01:46

Spring Cloud Config簡介

在分散式系統中,由於應用被拆分成數量巨多的小服務,另外應用也部署在不同的環境之中,如dev、int、uat、prod等,各個環境的設定不盡相同,為了方便組態檔統一管理,所以需要分散式設定中心元件。

組態檔統一管理之後,各個環境只能獲取對應環境的設定資訊,開發人員也只能獲取到開發環境的設定資訊,就能在一定程度上避免敏感資訊的洩露。

Spring Cloud Config作為分散式設定中心元件 ,包括Config 伺服器端,和Config 使用者端。

  • Config Server是一個可橫向擴充套件、集中式的設定伺服器,它用於集中管理應用程式各個環境下的設定,預設使用Git儲存組態檔內容,也可以使用SVN儲存,或者是本地檔案儲存。
  • Config Client是Config Server的使用者端,用於操作儲存在Config Server中的設定內容。微服務在啟動時會請求Config Server獲取組態檔的內容,請求到後再啟動容器。

Config實戰

1、建立專案config伺服器端

建立子模組config-server,pom.xml引入eureka-client 和config-server的依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2、建立組態檔

新建config-server自身的組態檔application.yml

server:
  port: 8005
spring:
  application:
    name: config-server
  profiles:
    active: native #使用本地檔案
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/repo #本地設定倉庫地址
#        git:
#          uri: https://gitee.com/xxxx/xxxxx.git
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/

這裡我們以使用本地設定倉庫地址為例,spring.profiles.active設定為native,設定倉庫路徑為repo資料夾,所以我們在resources檔案下建立repo資料夾,並建立新的一個configclient-dev.yml的檔案,內容如下:

server:
  port: 8007

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
feign:
  hystrix:
    enabled: true
logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

3、新建啟動類

@EnableConfigServer //開啟設定服務
@EnableEurekaClient
@SpringBootApplication
public class ConfitServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfitServerApplication.class, args);
    }
}

注意增加@EnableConfigServer註解,表示這是個設定中心伺服器端。

4、建立設定中心使用者端

伺服器端開發完成後,我們再新建一個使用者端config-client專案,引入如下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

與伺服器端不同的是,使用者端的組態檔我們建立bootstrap.yml檔案

spring:
  cloud:
    config:
      name: configclient
      profile: dev
      label: master
      discovery:
        enabled: true
        service‐id: config-server

eureka:
  client:
    service‐url:
      defaultZone: http://localhost:8001/eureka/

注意spring.cloud.config.name與伺服器端中的檔名稱對應,spring.cloud.config.profile與檔名-後面的環境程式碼對應,組態檔的命名規則是 {application}/{profile}[/{label}]

當 Config Client 去存取 Config Server 時,spring.cloud.config.namespring.cloud.config.profile 以及 、spring.cloud.config.label 的值分別對應上面三個預留位置,如果設定了spring.cloud.config.name,那麼就取spring.cloud.config.name,如果沒有設定就取 spring.application.name,通過靈活使用 {application} {profile}{label} 三個預留位置,就可以來動態地控制 client 從 server 所存取的倉庫!

然後編寫使用者端啟動類:

@EnableDiscoveryClient
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

5、驗證

我們分別啟動registry專案以及config-server,config-client兩個服務,這時,就會發現,config-client服務拉取了config-server中對應的組態檔。

總結

這篇文章我們介紹了一下 Spring Cloud Config 的一個基本使用,包括 Spring Cloud Config Server 和 Spring Cloud Config Client 的專案搭建。通過環境的設定隔離,避免了敏感設定資訊的洩露。

有人可能就說了,我本地把拉取dev的設定改成拉取prod不一樣也能拿到其他環境的資訊嗎?下一篇文章我們介紹如何通過 Config Server 的安全管理、組態檔的加密等機制真正做到這一點,一起期待吧!

到此這篇關於SpringCloud使用集中設定元件Config規避資訊洩露的文章就介紹到這了,更多相關SpringCloud集中設定元件Config內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com