使用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来完成该任务。

使用Spring Cloud Config进行分布式配置:Vault 后端

 

由于这是本书第一次介绍与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其他一些有用的功能。

使用Spring Cloud Config进行分布式配置:Vault 后端

 

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

Spring Cloud Config 分布式配置中心使用教程

Spring Cloud高可用的分布式配置中心 Spring Cloud Config