我们使用Spring Cloud Config的动机除了通常所说的微服务数量太多,方便配置的统一管理外。另一个重要原因是,application.properties(或application.yml)中配置项太多,在不同环境(dev、alpha、beta、www)下配置时,调整并核对application.properties时常看得眼花缭乱,而许多配置项运维时并不关心。所以决定用Spring Cloud Config对配置管理过程做一次调整。
实验代码可从GitHub下载:https://github.com/gpleo/spring-cloud-config-demo
包含了三个项目,用于大致演示Spring Cloud Config的配置方法。
Spring Cloud Config Server负责从Git服务器下载配置并分发给Config Client,注意以下几项:
配置内容存储在Git仓库,生产环境的敏感信息须加密后存储,加密内容前使用{cipher}前缀。
获取加密内容使用Spring Cloud Cli工具,使用类似下面的命令:
~ spring encrypt securityContent --key passkey 2c65b421138fd5c69f29560f9d972ab022b0d7e764482d565d3c5e3cdfc0155c
多个环境时,除生产环境使用保护分支master外,其他开发和测试环境都使用一个分支,可以是dev分支。
在具体服务中集成Config Client处理配置,在生产环境中,Config Client需要配置密钥,以便对下载配置中的加密信息进行解密。(需要JCE完整版)
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载后,解压文件,把local_policy.jar,US_export_policy.jar拷贝并覆盖到$JAVA_HOME/jre/lib/security。
使用非对称加密对敏感数据进行加密时,比较繁琐,大致步骤如下:
ssh-keygen -t rsa -f ./config_rsa
openssl req -new -key config_rsa -out config_cert.csr
openssl x509 -req -days 3650 -in config_cert.csr -signkey config_rsa -out config_cert.crt
openssl pkcs12 -export -out config.p12 -inkey config_rsa -in config_cert.crt -name democonfig
keytool -importkeystore -deststorepass storepass -destkeypass keypass -destkeystore config.jks -srckeystore config.p12 -srcstoretype PKCS12 -srcstorepass abc123 -alias democonfig
encrypt: key-store: location: file:///root/demo/config.jks password: storepass alias: democonfig secret: keypass