|
此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring Cloud Config 5.0.1! |
Vault 后端
Spring Cloud Config Server 还支持 Vault 作为后端。
有关 Vault 的更多信息,请参阅 Vault 快速入门指南。
要启用配置服务器使用 Vault 后端,您可以使用 vault 配置文件运行您的配置服务器。例如,在您的配置服务器的 application.properties 中,您可以添加 spring.profiles.active=vault。
默认情况下,配置服务器假定您的 Vault 服务器运行在 127.0.0.1:8200。它还假定后端的名称为 secret,密钥为 application。所有这些默认值均可在您的配置服务器的 application.properties 中进行配置。下表描述了可配置的 Vault 属性:
| 姓名 | 默认值 |
|---|---|
主机 |
127.0.0.1 |
端口 |
8200 |
方案 |
HTTP |
后端 |
密钥 |
fullKeyPath |
false |
defaultKey |
应用程序 |
defaultLabel |
main(仅在将 |
启用标签 |
false |
个人资料分隔符 |
, |
kvVersion |
1 |
跳过SSL验证 |
false |
timeout |
5 |
命名空间 |
null |
前面表格中的所有属性都必须以 spring.cloud.config.server.vault 为前缀,或放置在复合配置的正确 Vault 部分中。 |
所有可配置的属性均可在 org.springframework.cloud.config.server.environment.VaultEnvironmentProperties 中找到。
Vault 0.10.0 引入了带版本控制的键值后端(k/v 后端版本 2),其暴露的 API 与早期版本不同,现在要求在挂载路径和实际上下文路径之间添加一个 data/,并将密钥封装在 data 对象中。设置 spring.cloud.config.server.vault.kv-version=2 将考虑此变化。 |
可选地,支持 Vault 企业版 X-Vault-Namespace 请求头。若要将该请求头发送至 Vault,请设置 namespace 属性。
在您的配置服务器运行后,您可以向该服务器发送 HTTP 请求,以从 Vault 后端检索值。要执行此操作,您需要一个用于 Vault 服务器的Tokens。
首先,将一些数据存入您的 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"
}
}
]
}
客户端向 Config Server 提供必要认证信息,以使 Config Server 能够与 Vault 进行通信的默认方式是设置 X-Config-Token 请求头。然而,您也可以选择不设置该请求头,并在服务器端进行认证配置,方法是使用与 Spring Cloud Vault 相同的配置属性。需要设置的属性是 spring.cloud.config.server.vault.authentication。该属性应设置为所支持的认证方式之一。根据所使用的认证方式,您可能还需要设置其他特定于该认证方式的属性,此时可使用与 spring.cloud.vault 文档中所述相同的属性名称,但前缀改为 spring.cloud.config.server.vault。更多详情请参见 Spring Cloud Vault 参考指南。
| 如果省略 X-Config-Token 请求头,并使用服务器属性来设置认证,则 Config Server 应用需要额外依赖 Spring Vault,以启用其他认证选项。有关如何添加该依赖的详细信息,请参阅 Spring Vault 参考指南。 |
多个属性源
在使用 Vault 时,您可以为您的应用程序提供多个属性源。例如,假设您已将数据写入 Vault 中以下路径:
secret/myApp,dev
secret/myApp
secret/application,dev
secret/application
写入 secret/application 的属性对所有使用配置服务器的应用程序均可用。所有使用配置服务器的应用程序。具有名称 myApp 的应用程序将可访问写入 secret/myApp 和 secret/application 的任何属性。当 myApp 启用了 dev 配置文件时,上述所有路径中写入的属性都将对其可用,其中列表中第一个路径的属性将优先于其他路径的属性。
disambiguating复合属性源
默认情况下,配置服务器根据 Vault 键生成属性源名称,例如上例中的vault:myApp。当复合 Vault 后端具有相同的 Vault 密钥时,配置服务器客户端会覆盖先前的属性源。
将 fullKeyPath 设置为 true,属性源将包含完整的后端路径, 例如 vault:secret/backendA/myApp 和 vault:secret/backendB/myApp,防止覆盖先前的属性源。
spring.cloud.config.server.composite:
- type: vault
fullKeyPath: true
# ...
backend: secret/backendA
- type: vault
fullKeyPath: true
# ...
backend: secret/backendB
启用按标签搜索
默认情况下,Vault 后端在搜索密钥时不会使用标签。您可以通过将 enableLabel 功能标志设置为 true 来更改此行为,并且可选地设置 defaultLabel。当 defaultLabel 未提供时,将使用 main。
当 enableLabel 特性开关开启时,Vault 中的密钥路径应始终包含三个组成部分(应用名称、配置文件和标签)。因此,前一节中的示例,在启用特性开关的情况下,将如下所示:
secret/myApp,dev,myLabel
secret/myApp,default,myLabel # default profile
secret/application,dev,myLabel # default application name
secret/application,default,myLabel # default application name and default profile.
解密 Vault 密钥在属性源中
Spring Cloud Config Server 支持通过使用特殊的占位符前缀 {vault} 从 Vault 解密属性。此功能允许在运行时直接从 Vault 动态解析敏感配置属性。
配置步骤
所有与 Vault 集成的配置设置都应放置在您的 application.yml 或 application.properties 中。以下是激活 Vault 配置文件、连接到您的 Vault 服务器以及使用 {vault} 前缀格式化属性所需的特定配置。