1. 版本控制仓库使用的目录
使用基于VCS的后端(git,svn),文件会被检出或克隆到本地文件系统。默认情况下,它们放在系统临时目录中,前缀为config-repo-。例如在linux上,是/tmp/config-repo-。一些操作系统会定期清除临时目录。这可能会导致意外的行为,例如缺少属性。为避免此问题,请通过spring.cloud.config.server.git.basedir或spring.cloud.config.server.svn.basedir来更改Config Server所使用的目录,设置为不是系统临时目录的位置。
2. 使用文件系统
配置服务器中还有一个不使用Git的“本机”配置文件,它从本地类路径或文件系统加载配置文件(“spring.cloud.config.server .native.searchLocations“可以指向任何静态URL)。要使用本机配置文件,只需使用“spring.profiles.active = native”启动Config Server。
注意:
地址记住使用file:前缀(没有前缀通常是指classpath)。与任何Spring Boot配置一样,您可以嵌入 样 式 的 环 境 占 位 符 , 但 请 记 住 , W i n d o w s 中 的 绝 对 路 径 需 要 额 外 的 “ / ” , 例 如 f i l e : / / / {}样式的环境占位符,但请记住,Windows中的绝对路径需要额外的“/”,例如file:/// 样式的环境占位符,但请记住,Windows中的绝对路径需要额外的“/”,例如file:///{user.home}/config-repo
警告:
searchLocations的默认值与本地Spring Boot应用程序相同(即[classpath:/, classpath:/config, file:./, file:./config])。这不会将application.properties从服务器暴露给所有客户端,因为在发送到客户端之前,服务器中存在的任何属性源都将被删除。
提示:
文件系统 对于快速入门和测试是非常好的。要在生产中使用它,您需要确保文件系统是可靠的,并在配置服务器的所有实例中共享。
搜索位置可以包含{application},{profile}和{label}的占位符。以这种方式,您可以隔离路径中的目录,并选择一个有用的策略(例如每个应用程序一个子目录或每个profile一个子目录)。
如果您不在搜索位置使用占位符,则该存储库还是会将HTTP资源的{label}参数附加到搜索路径的后缀上,因此属性文件将从每个搜索位置和与label具有相同名称的子目录中搜索(label位置在Spring环境中优先)。因此,没有使用lable的默认url与添加以/{label}/结尾的效果一致. 比如, file:/tmp/config
结尾的搜索位置与file:/tmp/config,file:/tmp/config/{label}
相同(两个位置)。这个默认行为可以通过以下设置禁止:
spring.cloud.config.server.native.addLabelLocations=false
3. 使用Vault
Spring Cloud Config服务器还支持Vault作为后端。
Vault是安全访问秘钥的工具。一个秘钥是你想要严格控制访问的任何东西,如API密钥,密码,证书等等。Vault为任何秘钥提供统一的界面,同时提供严格的访问控制和记录详细的审核日志。
有关Vault的更多信息,请参阅Vault快速入门指南。
要使配置服务器使用Vault后端,必须使用vault配置文件运行配置服务器。例如在配置服务器的application.properties中,您可以添加spring.profiles.active=vault。
默认情况下,配置服务器将假定您的Vault服务器正在运行http://127.0.0.1:8200。它还将假设vault后端名称为secret,密钥为application。所有这些默认值都可以在配置服务器的application.properties中配置。以下是可配置的Vault属性表。所有属性前缀为spring.cloud.config.server.vault。
名称 | 默认值 |
---|---|
host | 127.0.0.1 |
port | 8200 |
scheme | http |
backend | secret |
defaultKey | application |
profileSeparator | , |
kvVersion | 1 |
skipSslValidation | false |
timeout | 5 |
namespace | null |
所有可配置的属性可以在org.springframework.cloud.config.server.environment.VaultEnvironmentRepository中找到。
提示:
Vault 0.10.0引入了一个版本化的键值后端(k/v后端版本2),它公开了与早期版本不同的API,现在它需要在装载路径和实际上下文路径之间添加一个data/,并将密钥包装在data对象中。设置spring.cloud.config.server.vault.kv-version=2将启用这一特性。
(可选)支持Vault 企业 X-Vault-Namespace header。若要将其发送到Vault,请设置namespace属性。
运行您的配置服务器,您可以向服务器发出HTTP请求,以从Vault后端检索数据。为此,您将需要一个Vault服务器的令牌。
首先将一些数据放在Vault上。例如
$ vault kv put secret/application foo=bar baz=bam
$ vault kv put secret/myapp foo=myappsbar
然后,将HTTP请求发送给您的配置服务器以检索值:
$ curl -X “GET” “http://localhost:8888/myapp/default” -H “X-Config-Token: yourtoken”
您应该会看到类似的回复:
{
"name":"myapp",
"profiles":[
"default"
],
"label":null,
"version":null,
"state":null,
"propertySources":[
{
"name":"vault:myapp",
"source":{
"foo":"myappsbar"
}
},
{
"name":"vault:application",
"source":{
"baz":"bam",
"foo":"bar"
}
}
]
}
配置服务器访问Vault时的认证方式默认是设置X-Config-Token 头。但是你也可以通过配置属性的方式达到同样的效果。对应的属性是spring.cloud.config.server.vault.authentication。其值必须是支持的几种认证方式。你可能也要设置与认证方式相对应的其它属性,其对应的前缀是spring.cloud.vault,而不是spring.cloud.config.server.vault。更多细节请看 Spring Cloud Vault指南
警告:
如果你使用配置属性的方式去认证,配置服务器需要添加额外的依赖,具体依赖请看 Spring Cloud Vault指南
3.1 多个属性来源
使用Vault时,您可以为应用程序提供多个属性源。例如,假设您已将数据写入Vault中的以下路径。
secret/myApp,dev
secret/myApp
secret/application,dev
secret/application
写入secret/application的属性可 用于使用配置服务器的所有应用程序。名称为myApp的应用程序将可以获得写入secret/myApp和secret/application的任何属性。当myApp启用dev配置文件时,所有上述路径的属性它都可访问,列表中第一个路径中的属性优先于其他路径。
4. 通过代理访问后端库
配置服务器可以通过http或https代理访问git 或 vault。只要设置proxy.http 和 proxy.https则启用代理。这些配置是每个仓库单独设置的,所以如果你使用了多个仓库,需要对每个仓库单独设置。如果网络需要单独的http和https代理,你可以为一个仓库同时配置http和https代理。
下表说明http和https代理属性,所有的属性都是以proxy.http 或 proxy.https为前缀:
Table 2. Proxy Configuration Properties
属性名 | 说明 |
---|---|
host | 代理主机 |
port | 代理端口 |
nonProxyHosts | 不需要代理的服务器列表。如果proxy.http.nonProxyHosts和proxy.https.nonProxyHosts同时都设置了,则会使用proxy.http的值 |
username | 代理服务器的认证用户名。如果同时设置了proxy.http.username和proxy.https.username,则会使用proxy.http的值 |
password | 代理服务器的认证密码。 如果同时设置了proxy.http.password和proxy.https.password,则会使用proxy.http的值 |
下面是通过https代理访问git库的例子:
spring:
profiles:
active: git
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
proxy:
https:
host: my-proxy.host.io
password: myproxypassword
port: '3128'
username: myproxyusername
nonProxyHosts: example.com
Spring Cloud Config 使用说明(1) – 快速开始
Spring Cloud Config 配置中心使用说明(2) – 服务器+git库
Spring Cloud Config 配置中心使用说明(3) – 服务器+文件存储
Spring Cloud Config 配置中心使用说明(4) – 服务器+数据库存储
Spring Cloud Config 配置中心使用说明(5) – 服务器健康与安全配置
Spring Cloud Config 配置中心使用说明(6) – 服务器 配置文件格式
Spring Cloud Config 配置中心使用说明(7) – 服务器 配置变更通知
Spring Cloud Config 配置中心使用说明(8) – 客户端