使用Spring Cloud Config进行分布式配置:Vault 后端
Posted jinggege795
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spring Cloud Config进行分布式配置:Vault 后端相关的知识,希望对你有一定的参考价值。
Vault 后端
前文已经介绍过,Vault 是一种工具,它可以通过统一的接口对机密信息进行安全访问。为了使Config Server 能够使用该类型的后端,开发人员必须使用Vault 配置文件--spring.profiles.active=vault运行它。当然,在运行Config Server之前, 还需要安装并启动Vault实例。建议开发人员使用Docker来完成该任务。
由于这是本书第一次介绍与Docker相关的内容,并不是每个人都知道该工具,在本书第14章“Docker支持”中简要介绍了Docker, 并提供了它的基本命令和用例,因此,如果这是你第一次接触该技术,则不妨先跳到第14 章翻看一下其内容。对于那些熟悉Docker的人来说,则应该很容易理解以下命令示例,它将在开发模式下运行Vault 容器。开发人员可以使用VAULT_DEV_ LISTEN ADDRESS参数覆盖默认的侦听地址,或者使用VAULT _DEV_ _ROOT_TOKEN_ ID参数覆盖初始生成的根令牌的ID。
docker run --cap-add- IPC LOCK -d --name =vault -e
'VAULT DEV_ ROOT TOKEN ID=client' -P 8200:8200 vault
1. Vault入门
Vault提供了一个命令行接口,可用于向服务器添加新值并从服务器读取它们。以下显示了调用这些命令的示例。但是,由于我们将Vault作为Docker容器运行,因此,管理机密最方便的方法是通过HTTP API.
$ vault write secret/hello value=world
$ vault read secret/hello
HTTP API可用于我们的Vault 实例( 位于ht://192. 168.99.100:8200/v1/secret地址下)。调用该API的每个方法时,需要将令牌X-Vault-Token 作为请求头传递。因为我们在启动Docker容器时已经在VAULT_ _DEV. _ROOT_ TOKEN_ _ID 环境参数中设置了该值, 所以它等于client.否则,它将在启动期间自动生成,并且可以通过调用命令docker logsvault从日志中读取。要开始使用Vault, 开发人员实际上需要了解两种HTTP方法一POST和GET.在调用POST方法时,可以定义应该添加到服务器的机密列表。在以下curl命令示例中,它所传递的参数就是使用kv (key/value) 后端创建的,该后端的作用类似于键/值(Key/Value) 存储。
$ curl -H"X-Vau1t-Token: client" -H"Content-Type: application/json" -x
POST -d 'l"server . port": 8081, "sample. string.property": "Client
App", "sample . int.property": 1} '
http://192.168.99.100:8200/v1/secret/client-service
可以使用GET方法从服务器读取新添加的值。
$ curl -H "X-Vault-Token: client" -X GET
http://192.168.99.100:8200/v1/secret/client-service
2.与Spring Cloud Config集成
正如前文所述,开发人员必须使用-springprofiles active=vault参数运行Spring CloudConfig Server,这样才能启用Vault作为后端存储。要覆盖默认的自动配置设置,应该在spring.
cloud.config.server.vault.*键下面定义属性。以下示例显示了我们的示例应用程序的当前配置。在GitHub上也提供了这样一个示例应用程序,开发人员可以切换到confg. vault 分支tps:/github com/piomin/sample srinccou--tltree/config. vault)来访问它。
spring:
application:
name: config-server
cloud:
config:
server :
vault:
host: 192.168.99.100
port: 8200
现在,开发人员可以调用由Config Server 公开的端点。虽然仍必须在请求头中传递令牌,但这一次它的名称是 X-Config-Token.
$ curl -X "GET" "http://localhost:8889/client-service/default" -H "X-
Config-Token: client"
其响应结果应该如下所示。这些属性是客户端应用程序的配置文件的默认属性。开发人员还可以添加所选配置文件的特定设置,方法是在逗号字符后面使用配置文件名称,以调用VaultHTTP API方法,如
htp:///2.168.99.100:8200/v1/secret/client service, zone1。如果调用路径中包含此类配置文件名称,则响应中将返回default和zone1配置文件的属性。
{
"name": "client-service",
"profiles": ["default"],
"label" :null,
"version":null,
"state" :null,
"propertySources":[{
"name" :"vault :client-service",
"source":{
"sample. int.property":1,
"sample. string .property":"Client App",
"server.port":8081
}
}]
}
3.客户端配置
使用Vault 作为Config Server 的后端时,客户端需要为服务器传递令牌,以便能够从Vault检索值。应使用bootstrap.yml 文件中的spring, cloud. configtoken属性在客户端配置设置中提供此令牌。
spring:
application:
name: client-service
cloud:
config:
uri: http://localhost:8889
token: client
其他功能
现在我们来看一看Spring Cloud Config其他一些有用的功能。
1.启动失败和重试
有时,如果Config Server不可用,则启动该应用程序没有任何意义。在这种情况下,开发人员可能会想要暂停一个有异常的客户端。为此,必须将引导配置属性spring cloud.cofigfailFast设置为true。 但是,这种比较激进的解决方案有时候并不是开发人员想要的。如果仅仅是偶尔无法访问配置服务器,则更好的方法是继续尝试重新连接,直到成功为止。spring cloud config filFast属性仍然必须等于true, 但开发人员还需要将spring-retry库和springboot-starter. aop添加到应用程序类路径中。默认行为将假定重试6次,初始退避(Backoff)重试间隔为1000毫秒。开发人员可以使用spring. cloud.configretr.*配置属性覆盖这些设置。
2.保护客户端的安全
与服务发现相同,开发人员可以使用基本身份验证来保护配置服务器。使用Spring Security可以在服务器端轻松启用它。在这种情况下,客户端仅需设置bootstrap.yml文件中的用户名和密码。
spring:
cloud:
config:
uri: https://localhost:8889
use rname: use r
password: secret
总结
因为文章包含的内容实在是太多了,就不给大家做过多的介绍了,需要这份文档来学习的小伙伴,可以转发此文关注小编。
扫码来获取就可以了!
以上是关于使用Spring Cloud Config进行分布式配置:Vault 后端的主要内容,如果未能解决你的问题,请参考以下文章
使用Spring Cloud Config进行分布式配置:自动重新加载配置
spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config
Spring Cloud-鸿鹄Cloud分布式微服务云系统—Config
Spring cloud--鸿鹄Cloud分布式微服务云系统—Config