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

null^發表於2017-12-05

參考資料:

  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也應該開箱即用。例如:"git@github.com: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)  

    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: git@gitserver.com: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 NameRemarks

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

相關文章