spring-cloud-config-server——Environment Repository(Git Backend)

参考资料:

  https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cloud-config.html

  http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_environment_repository

Git Backend——Git后端

    EnvironmentRespository的默认实现使用Git后端,这对于管理升级和环境检查以及审核更改非常方便。

    要更改存储库的位置,可以在配置服务器中设置"spring.cloud.config.server.git.uri"配置属性(例如,在applicaton.yml中)

    如果使用 file: 前缀进行设置,则应该从本地存储运行,这样就可以在没有服务器的情况下快速轻松的工作,但是这种情况下,服务器会直接在本地存储库上运行而不克隆它(不要紧,因为配置服务器永远不会更改"remote"存储库)。

    要扩展配置服务器并使其高度可用,需要将服务的所有实例指向同一个存储库,因此只有共享文件系统才能工作。即使在这种情况下,对共享文件系统存储库使用ssh: 协议更好,以便服务器可以克隆它并且使用本地工作服务作为缓存。

    

    该存储库实现将HTTP资源的{label}参数隐射到git标签(commit id,分支名称或标签)。

    如果git分支或标签名称包含斜线("/"),则应该使用特殊字符串 "(_)"来指定HTTP URL中标签(以避免与其他URL路径混淆)。例如,如果标签为 foo/bar ,则提换斜杠将导致标签看起来像 foo(_)bar。

    包含特殊字符串"(\_)"也可以应用于{application}参数。

    如果使用像curl这样的命令行客户端(例如使用引号将其从shell中转出来),请小心URL中的方括号。

    Placeholders in Git URI——Git URI中的占位符

      Spring Cloud Config Server支持一个带有 {application} 和 {profile} (以及{label},如果需要的话。但是请记住,标签无论如何是作为一个git标签来应用的)的占位符的git仓库URL。

      因此,你可以轻松支持使用"一个应用程序一个repo"策略,例如:

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

      或者使用类型模式但是使用{profile}的"每一个profile一个repo"策略。

      另外,在{application}参数中使用特殊字符串“(\_)”可以启用对多个组织的支持,例如:

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

      其中,{application}在请求时以"organization(\_)application"格式提供。

    Pattern Matching and Multiple Repositories——模式匹配和多个存储库

      模式格式是带有通配符的{application} 和{profile}名称的逗号分割列表(可能需要引用以通配符开始的模式)。例如:

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

      如果{application}/{profile}与任何模式都不匹配,它将使用在"spring.cloud.config.server.git.uri"下定义的默认值。

      在上面的例子中,对于"simple"存储库,匹配模式是"simple/*"(即,所有的配置文件中只匹配一个名为"simple"的应用程序)。"local"存储库与所有配置文件中以"local"开头的所有应用程序名称匹配("/*"后缀自动添加到没有配置文件匹配器的任何模式中)。

      note:在上述“simple”示例中使用的“one-liner”快捷方式只能在唯一要设置的属性为URI的情况下使用。如果您需要设置其他任何内容(凭据,模式等),则需要使用完整的表单.

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

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

      note:Spring Cloud将会猜测,包含不以"*"结尾的配置文件的模式意味着你实际上想要匹配以此模式开始的配置文件列表(所以*/staging["*/staging","*/staging,*"]的快捷方式).

      每个存储库还可以将配置文件存储在子目录中,并且可以将搜索这些目录的模式指定为 searchPaths。例如在顶层:

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

      在此例中,服务在顶层和"foo/"子目录以及名称以"bar"开头的任何子目录中搜索配置文件。

      默认情况下,服务器首次请求配置时克隆远程存储库。可以将服务器配置为在启动时克隆存储库。例如在顶层:

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

      在这个例子中,服务其在接受任何请求之前,在启动时克隆 team-a的config-repo。所有其他存储库将不会被克隆,知道从存储库请求配置时。

      note:设置当配置服务器在启动时克隆存储库可以帮助在配置服务器启动时快速识别出错误的配置源(例如,无效的存储库URI)。配置源未启用cloneOnStart时,配置服务器可能会启动成功 配置错误或无效的 配置源,并没有检测到错误,直到应用程序从该配置源请求配置为止。

    Authentication——认证

      要在远程存储库上使用HTTP基本认证,请单独添加"username"和"password"属性(不在URL中)。例如:  

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

      如果不使用HTTPS和用户凭证,那么当你将密钥存储在默认目录(~/.ssh)并且uri指向SSH位置时,SSH也应该开箱即用。例如:"[email protected]:configuration/cloud-configuration"

      在 ~/.ssh/know_hosts文件中存在Git服务器条目,并且是 ssh-rsa格式,这一点很重要。其他格式(例如: ecdsa-sha2-nistp256)不支持。

      为了避免意外,你应该确保在Git服务器的know_hosts文件中只有一个条目,并且与你提供给配置服务器的URL匹配。

      如果你在URL中使用了一个主机名,那么在know_hosts文件中使用主机名,而不是IP。

      使用jGit可以访问存储库,因此你找到的任何文档都应该适用。

      HTTPS代理设置可以在~/.git/config中设置,也可以通过系统属性(-Dhttps.proxyHost-Dhttps.proxyPort)以与其他任何JVM进程相同的方式设置HTTPS代理设置。

      note:如果你不知道你的~/.git目录在哪,使用git config --global来操作设置 (例如:git config --global http.sslVerify false)

    Authentication with AWS CodeCommit——使用AWS CodeCommit进行身份验证

      

    Git SSH configuration using properties——使用属性Git SSH配置

      默认情况下,当使用SSH URI连接到Git存储库时,Spring Cloud Config使用的JGit库使用SSH配置文件,例如:~/.ssh/known_hosts and /etc/ssh/ssh_config.

      在Cloud Foundry等云环境中,本地文件系统可能是短暂的或不可访问的。对于这种情况,可以使用Java属性来设置SSH配置。为了激活基于属性的SSH配置,必须将spring.cloud.config.server.git.ignoreLocalSshSettings属性设置为True。例如:

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配置属性:

Property Name Remarks

ignoreLocalSshSettings


If true, use property based SSH config instead of file based. Must be set at as spring.cloud.config.server.git.ignoreLocalSshSettingsnot inside a repository definition.


privateKey


Valid SSH private key. Must be set if ignoreLocalSshSettings is true and Git URI is SSH format


hostKey


Valid SSH host key. Must be set if hostKeyAlgorithm is also set


hostKeyAlgorithm


One of ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ,ecdsa-sha2-nistp521. Must be set if hostKey is also set


strictHostKeyChecking


true or false. If false, ignore errors with host key


knownHostsFile


Location of custom .known_hosts file


preferredAuthentications


Override server authentication method order. This should allow evade login prompts if server has keyboard-interactive authentication before publickey method.

    Placeholders in Git Search Paths——Git搜索路径中的占位符

      Spring Cloud Config Server还支持使用{application}和{profile}(以及{label},如果需要)占位符的搜索路径。例如:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          searchPaths: ‘{application}‘

      在存储库中搜索与目录同名的文件(以及顶层).通配符在带占位符的搜索路径中也是有效的(搜索中包含任何匹配的目录)

    Force pull int Git Repositories——强制拉入Git仓库

      如前所述,Spring Cloud Config Server对远程git存储库进行了克隆,如果本地副本不知怎么变脏(例如,文件夹内容由操作系统进程更改),则Spring Cloud Config Server无法从远程存储库更新本地副本。

      为了解决这个问题,如果本地副本是脏的,就会有一个强制拉取属性force-pull,使Spring Cloud Config Server从远程存储库强制拉取。例如:

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

      如果您有多个存储库配置,则可以配置每个存储库的强制拉取属性force-pull。例如:

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

      note:强制拉取属性force-pull的默认值为false

时间: 2024-11-13 09:13:35

spring-cloud-config-server——Environment Repository(Git Backend)的相关文章

spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config

我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分. 其中服务端也称为分布式配置中心,他是独立的微服务应用,用来连接配置仓库并为客户端提供获取接口(这些接口返回配置信息.加密.解密信息等): 客户端是微服务架构中的各个微服务应用或基础设施,它们通过制定的配置中心来管理

spring cloud config 报错 Cannot clone or checkout repository

在根据官网学习使用spring cloud config时,报不能复制或检出仓库的错误.配置如下: server.port=8091 spring.application.name=firstDemo spring.cloud.config.server.git.uri=http://192.168.8.11/BaseServiceGroup/config-center spring.cloud.config.server.git.search-paths=/** spring.cloud.co

spring cloud config git库文件搜索顺序

在spring.cloud.config.server.git.uri和spring.cloud.config.server.git.searchPaths同时配置的情况下,spring cloud会先在searchPaths中寻找,寻找不到再到uri中配置的库的根目录直接寻找. 需要注意的是,中间目录并不会被搜索到,比如:spring.cloud.config.server.git.searchPaths=conf1/conf2的情况下,如果在conf2中查找不到目标文件,将会直接到根目录寻找

Spring Cloud Config分布式配置中心的使用和遇到的坑

分布式配置中心 为什么要有用分布式配置中心这玩意儿?现在这微服务大军已经覆盖了各种大小型企业,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都要有自己都一些配置信息,或者相同的配置信息,可能不同环境每个服务也有单独的一套配置,这种情况配置文件数量比较庞大,维护起来相当费劲,举个栗子: 在开发的过程中,一般数据库是开发环境数据库,所有服务DB的IP配置为:92.168.0.1,突然老大说,开发环境换了,DB的IP要修改,这下可不好受了,所有模块挨个修改DB的配置,就问你难受不难受?

Spring cloud config综合整理

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们非常适合Spring应用程序,但可以与任何语言运行的任何应用程序一起使用.当应用程序通过部署管道从开发到测试并进入生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容.服务器存储后端的默认实现使用g

搭建spring cloud config

很久没更新了,因为不是专职研究spring cloud,因此更新速度得看工作强度大不大,每天能抽出的时间不多,如果更新太慢了,并且有小伙伴看的话,请见谅了. Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同

SpringCloud(3-3)Spring Cloud Config 云端存储配置信息

Spring Cloud Config 云端存储配置信息 Spring Cloud Config 具有中心化,版本控制,支持动态更新,平台独立,语言独立等特性.我们的例子:1.真正的数据存在Git等repository中,2.ScConfigServer从git获取相应信息,3.ScConfigClient从ScConfigServer获取相互之间的通信基于HTTP,TCP,UDP等协议. 一.创建并运行一个ScConfigServer应用 1.pom.xml <project xmlns=&quo

开始Spring Cloud Config

什么是Spring Cloud Config Spring Cloud Config项目提供了一个解决分布式系统的配置管理方案.它包含了Client和Server两个部分. Spring Cloud Config Sever的管理git或svn的外部配置,集中配置到所有客户端. Spring Cloud Config Client根据Spring框架的Environment和PropertySource从Spring Cloud Config Sever获取配置. 所有要开始Spring Clo

Spring Cloud Config 配置中心

1.构建config-server 创建一个pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://