SpringCloud Config
一、配置中心解决了什么
1.1、服务配置的现状
在微服务系统中,每个微服务不仅仅只有代码,他还需要连接其他资源,例如数据库的配置或功能性的开关等等。
但是随着微服务系统的不断迭代,整个微服务系统可能会成为一个网状结构,这个时候就要考虑整个微服务系统的扩展性、伸缩性、耦合性等等。其中一个很重要的环节就是配置管理的问题。
1.2、常见的配置类型
1.2.1、服务配置
数据库配置、MQ队列配置、redis缓存配置 … …
1.2.2、各类开关
功能开关、业务开关、服务开关 … …
1.2.3、业务配置
模块A、模块B、模块C … …
1.3、常用的配置管理解决方案的缺点
1.硬编码【缺点:需要修改代码、繁琐、风险大】
2.写在properties里面【缺点:在集群环境下,需要替换和重启】
3.写在xml配置文件中,一般和应用一起打包【缺点:需要重新打包和重启】
1.4、为什么要使用spring cloud config 配置中心?
由于常用的配置管理有很大的缺点,故spring cloud config采用了集中式的配置中心来管理每个服务的配置信息。
spring cloud config配置中心,在微服务分布式系统中,采用服务端和客户端来提供可扩展的配置服务。配置中心负责管理所有的服务的各种环境配置文件。配置服务中心默认采用Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。
1.5、spring cloud config 配置中心,它解决了什么问题?
Spring Cloud Config它解决了微服务配置的中心化、版本控制、平台独立、语言独立等问题。
其特性如下:
1.提供服务端和客户端支持(spring cloud config server和spring cloud config client)
2.集中式管理分布式环境下的应用配置
3.基于Spring环境,无缝与Spring应用集成
4.可用于任何语言开发的程序
5.默认实现基于git仓库,可以进行版本管理
二、配置中心服务端
2.1、配置文件命名规则
三、配置中心客户端
3.1、配置文件使用bootstrap.application
四、配置中心原理
五、在git端修改配置后,让客户端生效
5.1、添加jar
<!-- 在git端修改配置后,如何让客户端生效 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.2、关闭bus-refresh权限拦截
#springboot 默认开启了权限拦截 会导致 /actuator/bus-refresh 出现401,拒绝访问
management.endpoints.web.exposure.include=bus-refresh
5.3、发送POST
@RestController
@RefreshScope
public class HelloController {
@Value("${server.port}")
private int port;
@RequestMapping("index")
public String index(){
return "Hello World!,端口:"+port;
}
}
curl –X POST http://客户端url/bus-refresh
六、安全与加密
6.1、采用对称加密算法(实现敏感数据加密)
6.1.1、对称加密介绍
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
6.1.2、检查加密环境
检查URL:http://127.0.0.1:9030/encrypt/status
检查结果:{“description”:“No key was installed for encryption service”,“status”:“NO_KEY”}
没有为加密服务安装密钥。
6.1.3、加密环境3步解决方案
第一步:设计密钥KEY
encrypt.key=qixin
第二步:未配置JCE
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。
JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下
JRE:将两个jar文件放到%JRE_HOME%\lib\security下
第三步:spring cloud bug
Dalston.SR4、Dalston.SR3、Dalston.SR2版本不能对配置文件加密,若需要调整到Dalston.SR1
https://github.com/spring-cloud/spring-cloud-config/issues/767
第四步:加密/解密
加密(post请求):http://127.0.0.1:9030/encrypt
解密(post请求):http://127.0.0.1:9030/decrypt
第五步:使用
6.2、采用非对称算法(实现敏感数据加密)
6.2.1、使用keytool实现非对称加密
6.2.2、检查加密环境
http://127.0.0.1:9030/encrypt/status
6.2.3、使用
6.3、配置中心的用户安全认证
6.3.1、添加jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
6.3.2、配置文件
# 安全认证
#开启基于http basic的安全认证
management.endpoints.web.exposure.include=*
spring.security.user.name=root
spring.security.user.password=root
6.3.3、客户端配置文件
添加《安全保护》用户名与密码