如何将 Spring Cloud Config 与 Git 和 Vault 复合环境存储库一起使用?
How to use Spring Cloud Config with a Git and Vault composite environment repository?
我一直在修补 Spring Cloud Config,但有一个用例,其中配置属性分为两种类型:
非机密值,开发人员应该能够查看和维护(例如 JDBC URL 等)
秘密值,只能由具有特殊访问权限(例如密码)的指定人员查看和维护
所以我对快照版本中当前可用的“Composite Environment Repositories”的支持非常感兴趣。似乎我可以将 Git 用于开发人员管理的属性,将 Vault 用于秘密属性,并对其进行配置,以便在发生冲突时 Vault 始终优先于 Git。
但是,我发现不仅 Vault 总是优先……它还被用作 独有的 后端。 Git 中的任何属性都没有被 return 编辑。
我的 application.yml
看起来像这样:
spring:
profiles:
active: git, vault
cloud:
config:
server:
vault:
order: 1
git:
uri: https://github.com/spring-cloud-samples/config-repo
basedir: target/config
order: 2
我已经写了一个 属性 到 Vault 是这样的:
vault write secret/foo foo=vault
我这样调用我的配置服务器:
curl -X "GET" "http://127.0.0.1:8888/foo/default" -H "X-Config-Token: a9384085-f048-7c99-ebd7-e607840bc24e"
但是,JSON 响应有效负载仅包含 Vault 属性。 Git:
没有任何内容
{
"name": "foo",
"profiles": [
"default"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "vault:foo",
"source": {
"foo": "vault"
}
}
]
}
如果我反转 application.yml
中的 order
设置,给予 Git 比 Vault 更高的优先级,这并不重要。只要 Vault 配置文件处于活动状态,它就会充当独占后端。
但是,如果我停用保管库配置文件,那么相同的 curl 操作会从 Git 后端产生 return 结果:
{
"name": "foo",
"profiles": [
"default"
],
"label": "master",
"version": "30f5f4a144dba41e23575ebe46369222b7cbc90d",
"state": null,
"propertySources": [
{
"name": "https://github.com/spring-cloud-samples/config-repo/foo.properties",
"source": {
"democonfigclient.message": "hello spring io",
"foo": "from foo props"
}
},
{
"name": "https://github.com/spring-cloud-samples/config-repo/application.yml",
"source": {
"info.description": "Spring Cloud Samples",
"info.url": "https://github.com/spring-cloud-samples",
"eureka.client.serviceUrl.defaultZone": "http://localhost:8761/eureka/",
"foo": "from-default"
}
}
]
}
有什么我可能遗漏的吗?为什么 Git 属性和 Vault 属性不...好吧,"composite" 在一起?
文档中唯一的示例显示了 Git 和 Subversion 一起使用,并且有一条注释警告您所有的存储库都应该包含相同的标签(例如 master
)。我想知道这是否是问题所在,因为 Vault 的标签始终是 null
。
我相信你的依赖肯定有问题。我还使用 git 和保险库设置了一个 spring 云配置服务器,效果很好。
我认为强制使用 1.3.0-BUILD.SNAPSHOT 是不够的。 Spring 云配置 1.3.0-BUILD.SNAPSHOT 取决于 spring-vault-core。您可能缺少这种依赖性。这可能会导致您在其中一条评论中提到的 bean 创建失败。
这是 a link 到带有 git 和保险库的示例项目。请随时查看。
我一直在修补 Spring Cloud Config,但有一个用例,其中配置属性分为两种类型:
非机密值,开发人员应该能够查看和维护(例如 JDBC URL 等)
秘密值,只能由具有特殊访问权限(例如密码)的指定人员查看和维护
所以我对快照版本中当前可用的“Composite Environment Repositories”的支持非常感兴趣。似乎我可以将 Git 用于开发人员管理的属性,将 Vault 用于秘密属性,并对其进行配置,以便在发生冲突时 Vault 始终优先于 Git。
但是,我发现不仅 Vault 总是优先……它还被用作 独有的 后端。 Git 中的任何属性都没有被 return 编辑。
我的 application.yml
看起来像这样:
spring:
profiles:
active: git, vault
cloud:
config:
server:
vault:
order: 1
git:
uri: https://github.com/spring-cloud-samples/config-repo
basedir: target/config
order: 2
我已经写了一个 属性 到 Vault 是这样的:
vault write secret/foo foo=vault
我这样调用我的配置服务器:
curl -X "GET" "http://127.0.0.1:8888/foo/default" -H "X-Config-Token: a9384085-f048-7c99-ebd7-e607840bc24e"
但是,JSON 响应有效负载仅包含 Vault 属性。 Git:
没有任何内容{
"name": "foo",
"profiles": [
"default"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "vault:foo",
"source": {
"foo": "vault"
}
}
]
}
如果我反转 application.yml
中的 order
设置,给予 Git 比 Vault 更高的优先级,这并不重要。只要 Vault 配置文件处于活动状态,它就会充当独占后端。
但是,如果我停用保管库配置文件,那么相同的 curl 操作会从 Git 后端产生 return 结果:
{
"name": "foo",
"profiles": [
"default"
],
"label": "master",
"version": "30f5f4a144dba41e23575ebe46369222b7cbc90d",
"state": null,
"propertySources": [
{
"name": "https://github.com/spring-cloud-samples/config-repo/foo.properties",
"source": {
"democonfigclient.message": "hello spring io",
"foo": "from foo props"
}
},
{
"name": "https://github.com/spring-cloud-samples/config-repo/application.yml",
"source": {
"info.description": "Spring Cloud Samples",
"info.url": "https://github.com/spring-cloud-samples",
"eureka.client.serviceUrl.defaultZone": "http://localhost:8761/eureka/",
"foo": "from-default"
}
}
]
}
有什么我可能遗漏的吗?为什么 Git 属性和 Vault 属性不...好吧,"composite" 在一起?
文档中唯一的示例显示了 Git 和 Subversion 一起使用,并且有一条注释警告您所有的存储库都应该包含相同的标签(例如 master
)。我想知道这是否是问题所在,因为 Vault 的标签始终是 null
。
我相信你的依赖肯定有问题。我还使用 git 和保险库设置了一个 spring 云配置服务器,效果很好。 我认为强制使用 1.3.0-BUILD.SNAPSHOT 是不够的。 Spring 云配置 1.3.0-BUILD.SNAPSHOT 取决于 spring-vault-core。您可能缺少这种依赖性。这可能会导致您在其中一条评论中提到的 bean 创建失败。 这是 a link 到带有 git 和保险库的示例项目。请随时查看。