当前位置: 首页 > 知识库问答 >
问题:

如何将SpringCloud配置与Git和Vault复合环境存储库一起使用?

姬熙云
2023-03-14

我一直在修补Spring Cloud配置,但有一个用例,其中配置属性分为两种类型:

>

  • 非机密值,开发人员应该能够查看和维护这些值。JDBC的URL等)

    秘密值,只能由具有特殊访问权限(如密码)的指定人员查看和维护

    因此,我对“复合环境存储库”的支持非常感兴趣,它目前在快照版本中可用。我似乎可以将Git用于开发人员管理的属性,将Vault用于机密属性,并对其进行配置,以便在发生冲突时Vault始终优先于Git。

    然而,我发现不仅保险库总是优先。。。它被用作专用后端。根本不返回来自Git的属性。

    我的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中的顺序设置,给Git比Vault更高的优先级,这并不重要。只要保管库配置文件处于活动状态,它就充当专用后端。

    但是,如果我停用vault配置文件,则相同的curl操作会从Git后端返回结果:

    {
        "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属性不一致的一些原因...嗯,“复合”在一起?

    留档中的唯一示例显示Git和Subversion一起使用,并且有一个注释警告您所有repos应该包含相同的标签(例如master)。我想知道这是否是问题所在,因为Vault的标签总是null

  • 共有1个答案

    西门飞翮
    2023-03-14

    我相信你的依赖关系一定有问题。我还使用git和vault设置了一个SpringCloudConfig服务器,它运行得很好。我认为强制使用1.3。0-BUILD。快照是不够的。SpringCloudConfig1.3。0-BUILD。快照取决于spring vault核心。您可能缺少此依赖项。这可能会导致您在评论中提到的bean创建失败。下面是一个链接,指向使用git和vault的示例项目。请随意查看。

     类似资料:
    • Spring Boot-2.0.0.m3 Spring Cloud-Finchley.m1 我想知道是否有人在使用数据库存储后端的生产设置中使用了同时支持vault和git的Spring Cloud config server。我使用vault对Spring cloud配置进行了评估,并考虑是使用Oracle JCE加密username/pwd还是vault,并寻求有关建议。我们正在开发Sprin

    • 我有一个名为UserRepository的通用存储库接口。然后我有一个接口,它从MyUserRepository扩展而来。它处理一个MyUser类,该类扩展了User。 我还有一个名为UserService的服务接口和一个名为MyUserServiceImpl的类。 该服务需要UserRepository的实例,我虽然可以使用某种注释,如@Qualifer,但它不起作用。 应用程序无法启动 说明:

    • 问题内容: Jenkins中建立一个托管在bitbucket上的项目时,我将在URL字段中输入什么? 该存储库是私有的。 问题答案: 我对Jenkins并不熟悉,但是Bitbucket允许您通过https克隆git存储库,https可以接受密码作为url的一部分,如下所示:

    • 问题内容: GitLab是一种免费的开放源代码方式,用于托管私有存储库,但它似乎不适用于Go。创建项目时,它将生成以下形式的URL: 哪里: 是gitlab服务器的IP地址 是有权访问私有存储库的用户组 Golang 1.2.1似乎不了解这种语法。 结果是: 有办法让它工作吗? 问题答案: 现在,此问题已在Gitlab 8. *中解决,但仍然不直观。确实,最困难的挑战是,以下步骤将使您克服这些挑战

    • 我刚刚安装了(而不是更新)GitHub for Windows2.0,而且一辈子我都找不到如何在非GitHub存储库中使用它。在过去,我使用本指南没有任何问题。然而,在2.0版本中,布局发生了变化,我无法找到一个UI来克隆不是来自GitHub的回购。我想我必须使用命令行,但我不知道如何以这种方式使用git。