Spring Cloud Config--配置管理中心

Spring Cloud Config

在微服务项目下,随着服务越来越多,所需要的配置文件也越来越多,因此若需要将这些文件集中管理,可以通过Spring Cloud Config实现。

Spring Cloud Config是一个分布式系统配置管理解决方案,它包含了Client和Server,配置文件放在Server端,通过接口的形式提供给Client。

Spring Cloud Config主要功能:

  • 集中管理各个环境、各个微服务的配置文件
  • 提供服务端和客户端的支持
  • 配置文件修改后可以快速生效
  • 配置文件通过Git/SVN进行管理,天然支持版本回退
  • 支持高并发,也支持多种开发语言

准备工作

在本地准备好相应配置文件,文件命名规则如下

Spring Cloud Config--配置管理中心_第1张图片
image

提交至github的自建仓库。

Config Server

通过Config Server自动从Github上加载配置文件,并以接口的形式提供给Config Client。

首先创建config-server模块,添加时加入Web、Config Server依赖

项目创建成功后在启动类上添加@EnableConfigServer注解

在配置中添加github仓库的相关信息

spring.application.name=config-server
server.port=8081
#配置github仓库地址
spring.cloud.config.server.git.uri=https://github.com/zby981207/configRepo.git
#仓库中配置文件目录
spring.cloud.config.server.git.search-paths={application}
#仓库用户名密码
spring.cloud.config.server.git.username=zby981207
spring.cloud.config.server.git.password=xxxxx

配置完成后启动config server,访问http://localhost:8081/client1/dev/master,就可以看到配置文件信息,同时在控制台也可以看到配置文件被保存在了一个临时目录中。

访问地址有如下规则:

/{application}/{profile}/[{label}]

/{label}/{application}-{profile}.properties

  • application:表示配置文件名
  • profile:表示配置文件的profile,如test、dev
  • label:表示git分值,该参数可选,默认为master

接下来可以修改配置文件并重新提交到github,刷新ConfigServer接口,就可以及时看到最新的配置内容。

Config Client

首先创建config-client模块,添加时加入Web、Config Client依赖

项目创建成功后在resources目录下添加bootstrap.properties,做如下配置

#服务名要和配置文件的application.name保持一致
spring.application.name=client1
#对应config-server中的{profile}
spring.cloud.config.profile=dev
#对应config-server中的{label}
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8081
server.port=8082

之后添加测试接口,将配置文件中的值注入到接口中,访问接口就可以看到配置文件可以获取到

@RestController
public class HelloController {
    @Value("${config}")
    String config;
    @GetMapping("/hello")
    public String hello(){
        return config;
    }
}

配置文件加密

Spring Cloud Config支持对配置文件中的私密信息进行加密。

常见加密方案有两种:1.不可逆加密 2.可逆加密

不可逆加密就是理论上不可根据加密后的秘文推算出明文。常见的有MD5算法、SHA安全散列等,一般用于密码的加密。

可逆加密就是可以根据加密后的秘文推断出明文的加密方式。可逆加密又分为对称加密非对称加密。对称加密指加密秘钥和解密秘钥是一样的,常见算法有des、3des、aes。非对称加密指加密秘钥和解密秘钥不同,加密的叫做公钥,可公开,解密使用私钥,自己保存,多用于一对多的通讯使用,常用的算法是RSA。

对称加密

首先下载不限长度的JCE,下载地址

下载完成后解压文件,将文件中的两个jar包放入jdk(jre)/lib目录下的security文件夹中。

在config-server中添加bootstrap.properties配置文件,在配置文件中配置秘钥:encrypt.key=security

然后启动模块,访问http://localhost:8081/encrypt/status,查看加密状态是否为“OK”。

在postman中向http://localhost:8081/encrypt发送post请求可对一段明文进行加密。

Spring Cloud Config--配置管理中心_第2张图片
image

把加密后的明文存储到git仓库中,存储时记得加一个{ciper}前缀

非对称加密

进行非对称加密首先要生成密钥对。

执行如下命令,生成keystore

keytool -genkeypair -alias config-server -keyalg RSA -keystore D:\workspace\config-server.keystore
  • genkeypair: 生成密钥对
  • alias:密钥对别名
  • keyalg:加密算法
  • keystore:密钥对存放位置

然后将生成的密钥对放在config-server的resources目录下,然后在config-server中的bootstrap.properties配置文件中做如下配置:

encrypt.key-store.location=config-server.keystore
encrypt.key-store.alias=config-server
encrypt.key-store.password=789456
encrypt.key-store.secret=789456

在pom中设置加载.keystore文件


    
        src/main/resources
        
            **/*.properties
            **/*.keystore
        
    

在EndPoints中查看加密状态为OK


Spring Cloud Config--配置管理中心_第3张图片
image

安全管理

为防止通过config-server修改配置文件,可以使用Spring Security来保护接口。

首先在config-server中添加spring security依赖。添加依赖后接口就会被自动保护起来。

在config-server的bootstrap.application文件中配置spring security登录的用户名和密码:

spring.security.user.name=admin
spring.security.user.password=123

再在config-client的bootstrap.application文件中做如下配置:

spring.cloud.config.username=admin
spring.cloud.config.password=123

配置文件服务化

将config-server和config-client注册到Eureka上,这样就可以实现配置文件的自动获取,不必在client配置中写死server的地址。

首先启动Eureka,并在server和client中添加Eureka的依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

之后将config-server注册到Eureka上

eureka.client.service-url.defaultZone=http://localhost:1111/eureka

开启config-client中服务发现功能,并将client也注册到eureka

#开启通过eureka获取config-server的功能
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=config-server
#暴露refresh端点
management.endpoints.web.exposure.include=refresh
eureka.client.service-url.defaultZone=http://localhost:1111/eureka

最后再给config-client使用了配置文件的地方加上@RefreshScope注解

@RestController
@RefreshScope
public class HelloController {
    @Value("${config}")
    String config;
    @GetMapping("/hello")
    public String hello(){
        return config;
    }
}

重启server和client就可以将他们俩注册到eureka上,client也可以从eureka上读取server中的配置文件信息,在配置文件更新时,client也会自动刷新

当配置文件发生变化时,向http://localhost:8082/actuator/refresh发送post请求,即可自动刷新配置文件

你可能感兴趣的:(Spring Cloud Config--配置管理中心)