Spring Cloud - Config
用于分布式系统中基础设施和微服务应用提供集中化的外部配置支持,分为 Config Server 与 Config Client
启用
- config server
// import
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
// start
@SpringBootApplication
@EnableConfigServer
//@EnableEurekaClient
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class);
}
}
// config
server:
port: 8711
spring:
application:
name: spcd-config
cloud:
config:
server:
git:
basedir: E:\log # 本地仓库保存地址
uri: https://github.com/ZeWeStar/spring-cloud-config
search-paths: spcd-config # 目录
username: xxxx
password: xxxx
# config server join Eureka
eureka:
client:
registry-fetch-interval-seconds: 30
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
instance:
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
logging:
#level:
#xxxx: debug
path: E:\log\spcd
file: ${spring.application.name}
- config client
// import
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
// bootstrap.yml 必须配置在 bootstrap中 Config First Bootstrap
spring:
application:
name: user #对应配置文件 {application}
cloud:
config:
profile: dev #对应配置文件 {profile}
label: master #对应配置文件 {label}
uri: http://127.0.0.1:8711
fail-fast: true # can not connect server fail startup
注意
- git仓库中文件命名 {application}-{profile}.yml ,如 user-dev.yml
- 访问方式 label 为git的分支(默认 master)
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
基础架构
远程Git仓库:用来存储配置文件的地方 如:user-dev.yml
ConfigServer: 分布式配置中心,连接Git仓库
本地Git仓库:client从server请求配置信息时,server从远程Git仓库获取最新版本到本地git仓库(server在临时目录维护),然后从本地仓库读取返回,当远程无法访问时,直接返回本地仓库内容。
Service A & Service B :config client 使用 bootstrap.yml指定 config server 获取配置信息。
Security
config server 配置security
// import
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
// set config server username & password
spring:
security:
user:
name: user
password: 123456789
config client 配置username & password
spring:
cloud:
config:
username: user
password: 123456789
注意:client 未配置正确username&password ,日志出401错误
敏感信息加密解密
配置中心放入 github 中的敏感信息,进行加密处理,例如数据库密码等。
1、首先需要准备一个不限长度的JCE版本(Java Cryptography Extension (JCE) Unlimited Strength ),在ORACLE官网下载(注意jdk版本)
替换$JAVA_HOME/jre/lib/security (开发中一般使用的jdk中的jre)中的的上示2个jar包。再次启动config server 显示日志
访问 /encrypt/status
{"description":"No key was installed for encryption service","status":"NO_KEY"}
2、配置密钥
2.1、对称性密钥 配置在 bootstrap.yml
encrypt:
key: key123456
2.2、非对称密钥
通过JDK keytool 工具生成密钥对
$ keytool -genkeypair -alias mytestkey -keyalg RSA \
-dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \
-keypass changeme -keystore server.jks -storepass letmein
配置在bootstrap.yml
encrypt:
keyStore:
location: classpath:/server.jks
password: letmein
alias: mytestkey
secret: changeme
访问 /encrypt/status
{"status":"OK"}
3、配置文件中加密前缀 {cipher} 如数据库密码
spring:
datasource:
username: dbuser
password: '{cipher}f8845323019d118a2155cb86f96fb2fe6390c0e7f0811fd38686136895742c3c' #zewe123456
可通过 访问接口测验加密解密
高可用配置
config server 加入 eureka中,且config client 在boostrap.yml中配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
spring:
application:
name: user
cloud:
config:
discovery:
enabled: true
service-id: spcd-config
profile: test
label: master
#uri: http://127.0.0.1:8711
username: user
password: 123456789