美文网首页
Spring Cloud Config--配置管理中心

Spring Cloud Config--配置管理中心

作者: 一腔诗意换酒钱 | 来源:发表于2020-03-12 18:39 被阅读0次

    Spring Cloud Config

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

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

    Spring Cloud Config主要功能:

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

    准备工作

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

    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请求可对一段明文进行加密。

    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文件

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.keystore</include>
            </includes>
        </resource>
    </resources>
    

    在EndPoints中查看加密状态为OK


    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的依赖

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

    之后将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--配置管理中心

          本文链接:https://www.haomeiwen.com/subject/mebbjhtx.html