Spring Cloud Config Vault 不适用于默认配置文件

问题描述 投票:0回答:1

我正在按照 Manning 的书 Spring microservices in action 2e 进行配置服务器的实现,我遇到了配置服务器不从默认配置文件读取属性的问题。

我的保险库路径是

secret/licensing-service/default
,我可以通过这个命令读取默认配置文件的保险库配置

curl -X GET -H "X-Vault-Token:myroot" http://127.0.0.1:8200/v1/secret/data/licensing-service/default | jq

然而,当我启用调试日志记录并发出请求时:

curl -X "GET" "http://localhost:8071/licensing-service/default" -H "X-Config-Token: myroot" | jq                    
{
  "name": "licensing-service",
  "profiles": [
    "default"
  ],
  "label": null,
  "version": null,
  "state": null,
  "propertySources": []
}

我看到 spring 尝试发出以下 HTTP 请求:

2022-11-13 15:41:41.272 DEBUG 92277 --- [nio-8071-exec-9] o.s.web.client.RestTemplate
              : HTTP GET http://127.0.0.1:8200/v1/secret/data/licensing-service
2022-11-13 15:41:42.100 DEBUG 92277 --- [nio-8071-exec-9] o.s.web.client.RestTemplate
              : HTTP GET http://127.0.0.1:8200/v1/secret/data/application

可以看出它从 URL 中删除了默认关键字,我发现它在以下类中这样做了 - https://github.com/spring-cloud/spring-cloud-config/blob/main/spring-云配置服务器/src/main/java/org/springframework/cloud/config/server/environment/AbstractVaultEnvironmentRepository.java 特别是这里:

private List<String> scrubProfiles(String[] profiles) {
        List<String> scrubbedProfiles = new ArrayList<>(Arrays.asList(profiles));
        scrubbedProfiles.remove("default");
        return scrubbedProfiles;
    }

我做错了什么以及如何让它从默认配置文件中读取数据?上面描述的所有内容都适用于具有保险库路径的开发配置文件

secret/licensing-service/dev
这是我的配置服务器的配置:

spring:
  application:
    name: config-server
  profiles:
    active: vault
  cloud:
    config:
      server:
        vault:
          port: 8200
          host: 127.0.0.1
          kv-version: 2
          profile-separator: /


server:
  port: 8071
java spring-cloud spring-cloud-config spring-cloud-vault-config
1个回答
-1
投票

书错了你在哪里创造你的秘密? 如果您创建了“秘密/许可秘密”,则意味着您在“秘密”引擎中创建了“许可服务”秘密。然后你可以像这样使用 curl 从 Spring Config API 请求属性:

curl -X "GET" "http://localhost:8071/licensing-service/default" -H "X-Config-Token: myroot"

您在日志中看到的以下两个请求是这样的:

HTTP 获取http://127.0.0.1:8200/v1/secret/data/licensing-service 是您的实际要求。

HTTP 获取http://127.0.0.1:8200/v1/secret/data/application 是 Spring 本身发出的请求,因为在“secret/application”中创建的属性默认情况下可用于所有使用 Spring Config 的应用程序。

如果您在“许可服务”引擎中创建了“许可服务”秘密,则必须设置属性 spring.cloud.config.server.vault.backend=licensing-service

© www.soinside.com 2019 - 2024. All rights reserved.