默认实现使用 Git 后端,这对于管理升级和物理环境以及审核更改非常方便。 要更改存储库的位置,可以在 Config Server 中设置配置属性(例如在 中)。 如果使用前缀设置它,它应该从本地存储库工作,以便您可以在没有服务器的情况下快速轻松地开始。但是,在这种情况下,服务器直接在本地存储库上运行,而无需克隆它(即使它不是裸露的也没关系,因为 Config Server 从不对“远程”存储库进行更改)。 要纵向扩展 Config Server 并使其高可用性,您需要让服务器的所有实例都指向同一个存储库,这样只有共享文件系统才能工作。 即使在这种情况下,最好将该协议用于共享文件系统存储库,以便服务器可以克隆它并使用本地工作副本作为缓存。EnvironmentRepositoryspring.cloud.config.server.git.uriapplication.ymlfile:ssh:Spring中文文档

此存储库实现将 HTTP 资源的参数映射到 git 标签(提交 ID、分支名称或标签)。 如果 git 分支或标签名称包含斜杠 (),则 HTTP URL 中的标签应改为使用特殊字符串指定(以避免与其他 URL 路径产生歧义)。 例如,如果标签是 ,替换斜杠将导致以下标签:。 特殊字符串的包含也可以应用于参数。 如果您使用命令行客户端(如 curl),请小心 URL 中的括号 — 您应该使用单引号 ('') 将它们从 shell 中转义。{label}/({special-string})foo/barfoo({special-string})bar({special-string}){application}Spring中文文档

跳过SSL证书验证

可以通过将属性设置为 (默认为 )来禁用配置服务器对 Git 服务器的 SSL 证书的验证。git.skipSslValidationtruefalseSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.com/my/repo
          skipSslValidation: true

设置连接超时

可以配置配置服务器等待获取 HTTP 或 SSH 连接的时间(以秒为单位)。使用属性(默认为 )。git.timeout5Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.com/my/repo
          timeout: 4

Git URI 中的占位符

Spring Cloud Config Server 支持带有 and 占位符的 git 存储库 URL(如果需要,但请记住,该标签无论如何都会作为 git 标签应用)。 因此,您可以使用类似于以下内容的结构来支持“每个应用程序一个存储库”策略:{application}{profile}{label}Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/myorg/\{application}

您还可以使用类似的模式来支持“每个配置文件一个存储库”策略,但使用 .{profile}Spring中文文档

此外,在参数中使用特殊字符串“({special-string})”可以启用对多个 组织,如以下示例所示:{application}Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/\{application}

where 在请求时按以下格式提供:.{application}organization({special-string})applicationSpring中文文档

模式匹配和多个存储库

Spring Cloud Config 还包括对 pattern 的更复杂需求的支持 应用程序和配置文件名称匹配。 模式格式是带有通配符的名称的逗号分隔列表(请注意,以通配符开头的模式可能需要用引号引起来),如以下示例所示:{application}/{profile}Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            simple: https://github.com/simple/config-repo
            special:
              pattern: special*/dev*,*special*/dev*
              uri: https://github.com/special/config-repo
            local:
              pattern: local*
              uri: file:/home/configsvc/config-repo

如果与任何模式都不匹配,则使用在 下定义的默认 URI。 在上面的示例中,对于“简单”存储库,模式是(它只匹配所有配置文件中命名的一个应用程序)。“local”存储库匹配所有配置文件中所有以开头的应用程序名称(后缀会自动添加到任何没有配置文件匹配器的模式中)。{application}/{profile}spring.cloud.config.server.git.urisimple/*simplelocal/*Spring中文文档

仅当要设置的唯一属性是 URI 时,才能使用“简单”示例中使用的“单行”快捷方式。 如果需要设置其他任何内容(凭据、模式等),则需要使用完整表单。

存储库中的属性实际上是一个数组,因此可以使用 YAML 数组(或属性文件中的 、 等后缀)绑定到多个模式。 如果要运行具有多个配置文件的应用,则可能需要执行此操作,如以下示例所示:pattern[0][1]Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            development:
              pattern:
                - '*/development'
                - '*/staging'
              uri: https://github.com/development/config-repo
            staging:
              pattern:
                - '*/qa'
                - '*/production'
              uri: https://github.com/staging/config-repo
Spring Cloud 猜测,包含不以 结尾的配置文件的模式意味着您实际上想要匹配以此模式开头的配置文件列表(因此是 的快捷方式,依此类推)。 例如,您需要在本地运行“开发”配置文件中的应用程序,但还需要远程运行“云”配置文件中的应用程序,这种情况很常见。**/staging["*/staging", "*/staging,*"]

每个存储库还可以选择将配置文件存储在子目录中,搜索这些目录的模式可以指定为 。 以下示例显示了顶层的配置文件:search-pathsSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          search-paths:
            - foo
            - bar*

在前面的示例中,服务器在顶层和子目录中搜索配置文件,以及名称以 开头的任何子目录。foo/barSpring中文文档

默认情况下,服务器在配置时克隆远程存储库 首先请求。 可以将服务器配置为在启动时克隆存储库,如以下顶级示例所示:Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://git/common/config-repo.git
          repos:
            team-a:
                pattern: team-a-*
                cloneOnStart: true
                uri: https://git/team-a/config-repo.git
            team-b:
                pattern: team-b-*
                cloneOnStart: false
                uri: https://git/team-b/config-repo.git
            team-c:
                pattern: team-c-*
                uri: https://git/team-a/config-repo.git

在前面的示例中,服务器在启动时克隆 team-a 的 config-repo,然后再克隆 接受任何请求。 在请求存储库中的配置之前,不会克隆所有其他存储库。Spring中文文档

在 Config Server 启动时设置要克隆的存储库有助于在 Config Server 启动时快速识别配置错误的配置源(例如无效的存储库 URI)。 如果未为配置源启用,则 Config Server 可能会使用配置错误或无效的配置源成功启动,并且在应用程序从该配置源请求配置之前不会检测到错误。cloneOnStart
仅当要设置的唯一属性是 URI 时,才能使用“简单”示例中使用的“单行”快捷方式。 如果需要设置其他任何内容(凭据、模式等),则需要使用完整表单。
Spring Cloud 猜测,包含不以 结尾的配置文件的模式意味着您实际上想要匹配以此模式开头的配置文件列表(因此是 的快捷方式,依此类推)。 例如,您需要在本地运行“开发”配置文件中的应用程序,但还需要远程运行“云”配置文件中的应用程序,这种情况很常见。**/staging["*/staging", "*/staging,*"]
在 Config Server 启动时设置要克隆的存储库有助于在 Config Server 启动时快速识别配置错误的配置源(例如无效的存储库 URI)。 如果未为配置源启用,则 Config Server 可能会使用配置错误或无效的配置源成功启动,并且在应用程序从该配置源请求配置之前不会检测到错误。cloneOnStart

认证

若要在远程存储库上使用 HTTP 基本身份验证,请单独添加 and 属性(而不是在 URL 中),如以下示例所示:usernamepasswordSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          username: trolley
          password: strongpassword

如果不使用 HTTPS 和用户凭据,则当您将密钥存储在默认目录 () 中并且 URI 指向 SSH 位置时,SSH 也应该开箱即用,例如 . 重要的是,Git 服务器的条目必须存在于文件中,并且其格式必须正确。 不支持其他格式(如 )。 为避免出现意外,应确保 Git 服务器的文件中仅存在一个条目,并且该条目与您提供给配置服务器的 URL 匹配。 如果在 URL 中使用主机名,则希望在文件中完全具有该主机名(而不是 IP)。 存储库是使用 JGit 访问的,因此您在该存储库上找到的任何文档都应该适用。 HTTPS 代理设置可以在 OR 中设置(与任何其他 JVM 进程的方式相同) 系统属性 ( 和 )。~/.ssh[email protected]:configuration/cloud-configuration~/.ssh/known_hostsssh-rsaecdsa-sha2-nistp256known_hostsknown_hosts~/.git/config-Dhttps.proxyHost-Dhttps.proxyPortSpring中文文档

如果您不知道目录在哪里,请使用来操作设置(例如,)。~/.gitgit config --globalgit config --global http.sslVerify false

JGit 需要 PEM 格式的 RSA 密钥。下面是一个示例 ssh-keygen(来自 openssh)命令,它将生成 corect 格式的密钥:Spring中文文档

ssh-keygen -m PEM -t rsa -b 4096 -f ~/config_server_deploy_key.rsa

警告:使用 SSH 密钥时,预期的 ssh 私钥必须以 开头。如果密钥以 开头,则在启动spring-cloud-config服务器时不会加载RSA密钥。错误如下所示:-----BEGIN RSA PRIVATE KEY----------BEGIN OPENSSH PRIVATE KEY-----Spring中文文档

- Error in object 'spring.cloud.config.server.git': codes [PrivateKeyIsValid.spring.cloud.config.server.git,PrivateKeyIsValid]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.cloud.config.server.git.,]; arguments []; default message []]; default message [Property 'spring.cloud.config.server.git.privateKey' is not a valid private key]

要更正上述错误,必须将 RSA 密钥转换为 PEM 格式。上面提供了一个使用 openssh 的示例,用于以适当的格式生成新密钥。Spring中文文档

如果您不知道目录在哪里,请使用来操作设置(例如,)。~/.gitgit config --globalgit config --global http.sslVerify false

使用 AWS CodeCommit 进行身份验证

Spring Cloud Config Server 还支持 AWS CodeCommit 身份验证。 AWS CodeCommit 在从命令行使用 Git 时使用身份验证帮助程序。 此帮助程序不与 JGit 库一起使用,因此,如果 Git URI 与 AWS CodeCommit 模式匹配,则会创建适用于 AWS CodeCommit 的 JGit CredentialProvider。 AWS CodeCommit URI 遵循以下模式:Spring中文文档

https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${repo}

如果您提供带有 AWS CodeCommit URI 的用户名和密码,则它们必须是提供对存储库的访问权限的 AWS accessKeyId 和 secretAccessKey。 如果未指定用户名和密码,则使用默认凭证提供程序链检索 accessKeyId 和 secretAccessKey。Spring中文文档

如果您的 Git URI 与 CodeCommit URI 模式(如上所示)匹配,则必须在用户名和密码中或在默认凭证提供程序链支持的位置之一中提供有效的 AWS 凭证。 AWS EC2 实例可以对 EC2 实例使用 IAM 角色Spring中文文档

jar 是可选的依赖项。 如果 jar 不在您的类路径上,则无论 git 服务器 URI 如何,都不会创建 AWS Code Commit 凭证提供程序。software.amazon.awssdk:authsoftware.amazon.awssdk:auth
jar 是可选的依赖项。 如果 jar 不在您的类路径上,则无论 git 服务器 URI 如何,都不会创建 AWS Code Commit 凭证提供程序。software.amazon.awssdk:authsoftware.amazon.awssdk:auth

使用 Google Cloud Source 进行身份验证

Spring Cloud Config Server 还支持针对 Google Cloud Source 存储库进行身份验证。Spring中文文档

如果您的 Git URI 使用 or 协议,并且域名为 ,则将使用 Google Cloud 源凭据提供程序。Google Cloud Source 存储库 URI 的格式为 。要获取存储库的 URI,请在 Google Cloud Source UI 中单击“克隆”,然后选择“手动生成的凭据”。不要生成任何凭据,只需复制显示的 URI。httphttpssource.developers.google.comsource.developers.google.com/p/${GCP_PROJECT}/r/${REPO}Spring中文文档

Google Cloud Source 凭据提供商将使用 Google Cloud Platform 应用默认凭据。请参阅 Google Cloud SDK 文档,了解如何为系统创建应用默认凭据。此方法适用于开发环境中的用户帐户和生产环境中的服务帐户。Spring中文文档

com.google.auth:google-auth-library-oauth2-http是可选的依赖项。 如果 jar 不在您的类路径上,则无论 git 服务器 URI 如何,都不会创建 Google Cloud 源凭据提供程序。google-auth-library-oauth2-http
com.google.auth:google-auth-library-oauth2-http是可选的依赖项。 如果 jar 不在您的类路径上,则无论 git 服务器 URI 如何,都不会创建 Google Cloud 源凭据提供程序。google-auth-library-oauth2-http

使用属性进行 Git SSH 配置

默认情况下,Spring Cloud Config Server 使用的 JGit 库使用 SSH 配置文件,例如使用 SSH URI 连接到 Git 存储库时。 在 Cloud Foundry 等云环境中,本地文件系统可能是短暂的或不容易访问的。 对于这些情况,可以使用 Java 属性设置 SSH 配置。 若要激活基于属性的 SSH 配置,必须将属性设置为 ,如以下示例所示:~/.ssh/known_hosts/etc/ssh/ssh_configspring.cloud.config.server.git.ignoreLocalSshSettingstrueSpring中文文档

  spring:
    cloud:
      config:
        server:
          git:
            uri: [email protected]:team/repo1.git
            ignoreLocalSshSettings: true
            hostKey: someHostKey
            hostKeyAlgorithm: ssh-rsa
            privateKey: |
                         -----BEGIN RSA PRIVATE KEY-----
                         MIIEpgIBAAKCAQEAx4UbaDzY5xjW6hc9jwN0mX33XpTDVW9WqHp5AKaRbtAC3DqX
                         IXFMPgw3K45jxRb93f8tv9vL3rD9CUG1Gv4FM+o7ds7FRES5RTjv2RT/JVNJCoqF
                         ol8+ngLqRZCyBtQN7zYByWMRirPGoDUqdPYrj2yq+ObBBNhg5N+hOwKjjpzdj2Ud
                         1l7R+wxIqmJo1IYyy16xS8WsjyQuyC0lL456qkd5BDZ0Ag8j2X9H9D5220Ln7s9i
                         oezTipXipS7p7Jekf3Ywx6abJwOmB0rX79dV4qiNcGgzATnG1PkXxqt76VhcGa0W
                         DDVHEEYGbSQ6hIGSh0I7BQun0aLRZojfE3gqHQIDAQABAoIBAQCZmGrk8BK6tXCd
                         fY6yTiKxFzwb38IQP0ojIUWNrq0+9Xt+NsypviLHkXfXXCKKU4zUHeIGVRq5MN9b
                         BO56/RrcQHHOoJdUWuOV2qMqJvPUtC0CpGkD+valhfD75MxoXU7s3FK7yjxy3rsG
                         EmfA6tHV8/4a5umo5TqSd2YTm5B19AhRqiuUVI1wTB41DjULUGiMYrnYrhzQlVvj
                         5MjnKTlYu3V8PoYDfv1GmxPPh6vlpafXEeEYN8VB97e5x3DGHjZ5UrurAmTLTdO8
                         +AahyoKsIY612TkkQthJlt7FJAwnCGMgY6podzzvzICLFmmTXYiZ/28I4BX/mOSe
                         pZVnfRixAoGBAO6Uiwt40/PKs53mCEWngslSCsh9oGAaLTf/XdvMns5VmuyyAyKG
                         ti8Ol5wqBMi4GIUzjbgUvSUt+IowIrG3f5tN85wpjQ1UGVcpTnl5Qo9xaS1PFScQ
                         xrtWZ9eNj2TsIAMp/svJsyGG3OibxfnuAIpSXNQiJPwRlW3irzpGgVx/AoGBANYW
                         dnhshUcEHMJi3aXwR12OTDnaLoanVGLwLnkqLSYUZA7ZegpKq90UAuBdcEfgdpyi
                         PhKpeaeIiAaNnFo8m9aoTKr+7I6/uMTlwrVnfrsVTZv3orxjwQV20YIBCVRKD1uX
                         VhE0ozPZxwwKSPAFocpyWpGHGreGF1AIYBE9UBtjAoGBAI8bfPgJpyFyMiGBjO6z
                         FwlJc/xlFqDusrcHL7abW5qq0L4v3R+FrJw3ZYufzLTVcKfdj6GelwJJO+8wBm+R
                         gTKYJItEhT48duLIfTDyIpHGVm9+I1MGhh5zKuCqIhxIYr9jHloBB7kRm0rPvYY4
                         VAykcNgyDvtAVODP+4m6JvhjAoGBALbtTqErKN47V0+JJpapLnF0KxGrqeGIjIRV
                         cYA6V4WYGr7NeIfesecfOC356PyhgPfpcVyEztwlvwTKb3RzIT1TZN8fH4YBr6Ee
                         KTbTjefRFhVUjQqnucAvfGi29f+9oE3Ei9f7wA+H35ocF6JvTYUsHNMIO/3gZ38N
                         CPjyCMa9AoGBAMhsITNe3QcbsXAbdUR00dDsIFVROzyFJ2m40i4KCRM35bC/BIBs
                         q0TY3we+ERB40U8Z2BvU61QuwaunJ2+uGadHo58VSVdggqAo0BSkH58innKKt96J
                         69pcVH/4rmLbXdcmNYGm6iu+MlPQk4BUZknHSmVHIFdJ0EPupVaQ8RHT
                         -----END RSA PRIVATE KEY-----

下表描述了 SSH 配置属性。Spring中文文档

表 1.SSH 配置属性
物业名称 言论

ignoreLocalSshSettingsSpring中文文档

如果 ,请使用基于属性而不是基于文件的 SSH 配置。必须设置为 ,而不是在存储库定义中。truespring.cloud.config.server.git.ignoreLocalSshSettingsSpring中文文档

私钥Spring中文文档

有效的 SSH 私钥。如果为 true 且 Git URI 为 SSH 格式,则必须设置。ignoreLocalSshSettingsSpring中文文档

hostKeySpring中文文档

有效的 SSH 主机密钥。如果也设置了,则必须设置。hostKeyAlgorithmSpring中文文档

hostKey算法Spring中文文档

之一。如果也设置了,则必须设置。ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521hostKeySpring中文文档

strictHostKeyCheckingSpring中文文档

true或。如果为 false,则忽略主机密钥的错误。falseSpring中文文档

knownHosts文件Spring中文文档

自定义文件的位置。.known_hostsSpring中文文档

首选身份验证Spring中文文档

覆盖服务器身份验证方法顺序。如果服务器在该方法之前具有键盘交互身份验证,这应该允许规避登录提示。publickeySpring中文文档

表 1.SSH 配置属性
物业名称 言论

ignoreLocalSshSettingsSpring中文文档

如果 ,请使用基于属性而不是基于文件的 SSH 配置。必须设置为 ,而不是在存储库定义中。truespring.cloud.config.server.git.ignoreLocalSshSettingsSpring中文文档

私钥Spring中文文档

有效的 SSH 私钥。如果为 true 且 Git URI 为 SSH 格式,则必须设置。ignoreLocalSshSettingsSpring中文文档

hostKeySpring中文文档

有效的 SSH 主机密钥。如果也设置了,则必须设置。hostKeyAlgorithmSpring中文文档

hostKey算法Spring中文文档

之一。如果也设置了,则必须设置。ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521hostKeySpring中文文档

strictHostKeyCheckingSpring中文文档

true或。如果为 false,则忽略主机密钥的错误。falseSpring中文文档

knownHosts文件Spring中文文档

自定义文件的位置。.known_hostsSpring中文文档

首选身份验证Spring中文文档

覆盖服务器身份验证方法顺序。如果服务器在该方法之前具有键盘交互身份验证,这应该允许规避登录提示。publickeySpring中文文档

Git 搜索路径中的占位符

Spring Cloud Config Server 还支持带有占位符的搜索路径 和 (和 if 你需要它),如以下示例所示:{application}{profile}{label}Spring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          search-paths: '\{application}'

前面的清单会导致在存储库中搜索与目录(以及顶层)同名的文件。 通配符在带有占位符的搜索路径中也有效(搜索中包括任何匹配的目录)。Spring中文文档

强制拉取 Git 存储库

如前所述,Spring Cloud Config Server 会克隆远程 git 存储库,以防本地副本变脏(例如, 操作系统进程更改文件夹内容),使得Spring Cloud Config Server无法从远程存储库更新本地副本。Spring中文文档

为了解决这个问题,有一个属性可以使Spring Cloud Config Server在本地副本脏的情况下从远程存储库中强制拉取,如以下示例所示:force-pullSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          force-pull: true

如果您具有多个存储库配置,则可以配置每个存储库的属性,如以下示例所示:force-pullSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://git/common/config-repo.git
          force-pull: true
          repos:
            team-a:
                pattern: team-a-*
                uri: https://git/team-a/config-repo.git
                force-pull: true
            team-b:
                pattern: team-b-*
                uri: https://git/team-b/config-repo.git
                force-pull: true
            team-c:
                pattern: team-c-*
                uri: https://git/team-a/config-repo.git
property 的默认值为 。force-pullfalse
property 的默认值为 。force-pullfalse

删除 Git 存储库中未跟踪的分支

由于 Spring Cloud Config Server 具有远程 git 存储库的克隆 将分支签出到本地存储库(例如,按标签获取属性)后,它将保留此分支 永远或直到下一次服务器重新启动(这将创建新的本地存储库)。 因此,可能会有这样一种情况,即远程分支被删除,但其本地副本仍可用于获取。 如果Spring Cloud Config Server客户端服务以它开头,它将从本地分支获取属性,而不是从中获取属性。--spring.cloud.config.label=deletedRemoteBranch,masterdeletedRemoteBranchmasterSpring中文文档

为了保持本地存储库分支的清洁和远程 - 可以设置属性。 这将使Spring Cloud Config Server强制从本地存储库中删除未跟踪的分支。 例:deleteUntrackedBranchesSpring中文文档

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          deleteUntrackedBranches: true
property 的默认值为 。deleteUntrackedBranchesfalse
property 的默认值为 。deleteUntrackedBranchesfalse

Git 刷新率

您可以控制配置服务器获取更新配置数据的频率 从 Git 后端使用 .这 此属性的值以秒为单位指定。默认情况下,该值为 0,这意味着 每次 Git 存储库中,配置服务器都会从 Git 存储库获取更新的配置 是请求的。如果该值为负数,则不会进行刷新。spring.cloud.config.server.git.refreshRateSpring中文文档

默认标签

用于 Git 的默认标签是 。如果未设置,并且名为的分支不存在,则默认情况下,配置服务器也会尝试检出名为 的分支。如果 您希望禁用可设置为 的回退分支行为。mainspring.cloud.config.server.git.defaultLabelmainmasterspring.cloud.config.server.git.tryMasterBranchfalseSpring中文文档