写点什么

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

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1784 字

    阅读完需:约 6 分钟

前文已经介绍过,Vault 是一种工具,它可以通过统一的接口对机密信息进行安全访问。为了使 Config Server 能够使用该类型的后端,开发人员必须使用 Vault 配置文件--spring.profile


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


s.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:


用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
使用Spring Cloud Config进行分布式配置:Vault 后端