spring-cloud-config-server——Environment Repository(Git Backend)
参考资料:
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 Name | Remarks |
---|---|
ignoreLocalSshSettings |
If true, use property based SSH config instead of file based. Must be set at as |
privateKey |
Valid SSH private key. Must be set if |
hostKey |
Valid SSH host key. Must be set if |
hostKeyAlgorithm |
One of |
strictHostKeyChecking |
|
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 |
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