|
该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用Spring Cloud Config 5.0.0! |
Git 后端
默认实现环境仓库使用Git后端,非常方便管理升级和物理环境,以及审计变更。
要更改仓库的位置,你可以设置Spring.cloud.config.server.git.uri配置服务器中的配置属性(例如在application.yml).
如果你用文件:前缀,它应该从本地仓库运行,这样你可以快速轻松地开始,无需服务器。但在这种情况下,服务器直接运行于本地仓库,不进行克隆(即使仓库不空也无关紧要,因为配置服务器从不对“远程”仓库做更改)。
为了扩大配置服务器并使其高度可用,你需要让服务器的所有实例指向同一个仓库,所以只有共享文件系统才能有效。
即使如此,最好还是使用SSH:共享文件系统仓库的协议,使服务器能够克隆该仓库并使用本地工作副本作为缓存。
该仓库实现映射了{标签}HTTP 资源的参数到 git 标签(提交 id、分支名或标签)。
如果 git 分支或标签名包含斜杠(),那么 HTTP URL 中的标签应用特殊字符串指定/({特殊字符串})(以避免与其他URL路径的歧义。)
例如,如果标签为福格/巴替换斜杠会得到以下标签:foo({special-string})bar.
特殊字符串的包含({特殊字符串})也可以应用于{应用}参数。
如果你使用命令行客户端如curl,请注意URL中的括号——你应该用单引号('')从shell中转义出来。
跳过SSL证书验证
配置服务器对Git服务器SSL证书的验证可以通过设置git.skipSslValidation属性到true(默认为false).
spring:
cloud:
config:
server:
git:
uri: https://example.com/my/repo
skipSslValidation: true
设置连接超时
你可以配置配置服务器等待获取HTTP或SSH连接的时间(以秒为单位)。使用该git.timeout属性(默认为5).
spring:
cloud:
config:
server:
git:
uri: https://example.com/my/repo
timeout: 4
Git URI 中的占位符
Spring Cloud 配置服务器支持带有占位符的 git 仓库 URL,{应用}和{简介}(和{标签}如果你需要,但请记住标签本来就是作为 git 标签应用的)。
因此,您可以通过以下结构支持“每个应用一个仓库”的策略:
spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/\{application}
你也可以支持“每个配置文件一个仓库”的策略,采用类似模式,但{简介}.
此外,使用特殊字符串({特殊字符串})在你的{应用}参数可以支持多个
如下例所示:
spring:
cloud:
config:
server:
git:
uri: https://github.com/\{application}
哪里{应用}按需提供以下格式:organization({special-string})application.
模式匹配与多仓库
Spring Cloud 配置还支持更复杂的需求,并带有模式
申请和个人资料名称都匹配。
模式格式是一个逗号分隔的列表,包含{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}不匹配任何模式,它使用定义的默认URISpring.cloud.config.server.git.uri.
在上述例子中,对于“简单”仓库,模式为简单/*(它只匹配一个名为简单所有资料中都有)。“本地”仓库匹配所有以 开头的应用程序名称当地在所有配置文件中(后缀会自动添加到没有配置文件匹配器的图案上)。/*
| “简单”示例中使用的“一行”快捷方式只有在唯一需要设置的属性是URI时才可以使用。 如果你需要设置其他内容(凭证、模式等),就必须使用完整表格。 |
这模式仓库中的属性实际上是一个数组,所以你可以使用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
Spring Cloud猜测,包含不以该模式结尾的轮廓的图案,意味着你实际上想匹配以该图案开头的轮廓列表(所以**/分期是 的捷径[“*/舞台”,“*/舞台,*”],依此类推)。
这种情况很常见,比如你需要在本地运行“开发”配置文件,同时远程运行“云”配置文件。 |
每个仓库还可以选择将配置文件存储在子目录中,搜索这些目录的模式可以指定为搜索路径.
以下示例展示了顶层的一个配置文件:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
search-paths:
- foo
- bar*
在前面的例子中,服务器在顶层和福/子目录以及任何名称以酒吧.
默认情况下,服务器在配置时会克隆远程仓库 首先请求。 服务器可在启动时配置克隆这些仓库,如下顶层示例所示:
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,在它之前 接受任何请求。 所有其他仓库在请求仓库配置前不会被克隆。
在配置服务器启动时设置库被克隆,有助于在配置服务器启动时快速识别配置错误的配置源(如仓库URI无效)。
跟cloneOnStart如果配置源未启用,配置服务器可能成功启动时配置源配置错误或无效,直到应用程序请求该配置源配置时才会检测到错误。 |
认证
要在远程仓库上使用 HTTP 基础认证,请添加用户名和密码属性分别(不在URL中),如下示例所示:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
username: trolley
password: strongpassword
如果你不使用 HTTPS 和用户凭证,SSH 在默认目录中存储密钥时也能正常使用 (~/.嘘URI指向SSH位置,例如[email protected]:configuration/cloud-configuration.
重要的是,Git 服务器的条目必须存在于~/.嘘/known_hosts文件,并且它已经在SSH-RSA格式。
其他格式(如ECDSA-SHA2-NISTP256)不被支持。
为避免意外,应确保known_hostsGit服务器的文件,并且它与你提供给配置服务器的URL匹配。
如果你在URL中使用主机名,你希望在known_hosts文件。
仓库是通过JGit访问的,所以你找到的任何相关文档都应该适用。
HTTPS代理设置可以在~/.git/config或者(与其他JVM进程相同)用
系统属性(-Dhttps.proxyHost和-Dhttps.proxyPort).
如果你不知道你在哪里~/.git目录是,使用git config --global作设置(例如,git config --global http.sslVerify false). |
JGit 需要 PEM 格式的 RSA 密钥。下面是一个示例 ssh-keygen(来自 openssh)命令,它将生成一个 corect 格式的密钥:
ssh-keygen -m PEM -t rsa -b 4096 -f ~/config_server_deploy_key.rsa
|
使用 SSH 密钥时,预期的 ssh 私钥必须以 开头
|
要纠正上述错误,必须将RSA密钥转换为PEM格式。上文提供了一个使用openssh生成合适格式新键的示例。
使用 AWS CodeCommit 进行认证
Spring Cloud 配置服务器还支持 AWS CodeCommit 认证。 AWS CodeCommit 在命令行使用 Git 时使用认证助手。 该辅助工具不与 JGit 库一起使用,因此如果 Git URI 与 AWS CodeCommit 模式匹配,则会创建 AWS CodeCommit 的 JGit CredentialProvider。 AWS CodeCommit URI 遵循以下模式:
https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${repo}
如果你在 AWS CodeCommit URI 中提供用户名和密码,必须是提供访问仓库的 AWS accessKeyId 和 secretAccessKey。 如果您未指定用户名和密码,accessKeyId和secretAccessKey将通过默认凭证提供者链(Default Credential Provider Chain)获取。
如果你的 Git URI 与 CodeCommit URI 模式(如前所述)匹配,你必须在用户名和密码中或默认凭证链支持的某个位置提供有效的 AWS 凭证。 AWS EC2 实例可能会为 EC2 实例使用 IAM 角色。
这Software.amazon.AWSSDK:authJAR是一个可选的依赖。
如果Software.amazon.AWSSDK:authjar 不在你的类路径上,AWS 代码提交凭证提供者也不会被创建,无论 git 服务器的 URI 是什么。 |
使用 Google Cloud Source 进行身份验证
Spring Cloud 配置服务器还支持针对 Google Cloud Source 仓库进行身份验证。
如果你的 Git URI 使用http或https协议,域名为source.developers.google.com,将使用Google Cloud Source凭证提供商。Google Cloud Source 仓库的 URI 格式为source.developers.google.com/p/${GCP_PROJECT}/r/${REPO}.要获取仓库的URI,请在Google Cloud Source界面中点击“克隆”,选择“手动生成凭证”。不要生成任何凭据,只需复制显示的URI。
Google Cloud Source 的凭证提供商将使用 Google Cloud Platform 应用的默认凭证。请参阅 Google Cloud SDK 关于如何为系统创建应用默认凭证的文档。这种方法适用于开发环境中的用户账户和生产环境中的服务账户。
com.google.auth:google-auth-library-oauth2-http是一个可选的依赖。
如果谷歌认证库-OUs2-HTTPjar 不在你的类路径上,Google Cloud Source 凭证提供者也不会被创建,无论 git 服务器的 URI 是多少。 |
使用属性进行 Git SSH 配置
默认情况下,Spring Cloud 配置服务器使用的 JGit 库使用 SSH 配置文件,例如~/.嘘/known_hosts和/等等/嘘/ssh_config当通过SSH URI连接到Git仓库时,
在云环境中,如 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的配置属性。
| 物业名称 | 言论 |
|---|---|
ignoreLocalSshSettings |
如果 |
私钥 |
有效的SSH私钥。必须设置为 |
hostKey |
有效的SSH主机密钥。必须设置为 |
hostKeyAlgorithm |
其中之一 |
严格HostKeyChecking |
|
已知HostsFile |
习俗所在地 |
优先认证 |
覆盖服务器认证方法顺序。如果服务器在 |
Git 搜索路径中的占位符
Spring Cloud 配置服务器还支持带有占位符的搜索路径{应用}和{简介}(和{标签}如果
你需要它),如下示例所示:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
search-paths: '\{application}'
上述列表会在仓库中搜索与目录同名的文件(以及顶层)。 万用符在带有占位符的搜索路径中也有效(任何匹配的目录都包含在搜索中)。
在 Git 仓库中的强制拉取
如前所述,Spring Cloud 配置服务器会克隆远程git仓库,以防本地副本脏了(例如, 通过作系统进程更改文件夹内容),导致 Spring Cloud 配置服务器无法从远程仓库更新本地副本。
为了解决这个问题,有一种方法力拉该属性使 Spring Cloud 配置服务器在本地副本脏时强制从远程仓库拉取,如下示例所示:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
force-pull: true
如果你有多个仓库配置,可以配置力拉每个仓库的属性,如下示例所示:
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
默认值力拉财产是false. |
删除 Git 仓库中未追踪的分支
因为 Spring Cloud 配置服务器有远程 git 仓库的克隆版
在将分支检查到本地仓库(例如通过标签获取属性)后,它会保留该分支
永远或者直到下一次服务器重启(那时会创建新的本地仓库)。
所以可能存在远程分支被删除但本地副本仍可供取用的情况。
如果 Spring Cloud 配置服务器客户端服务以--spring.cloud.config.label=deletedRemoteBranch,master它会从中获取属性deletedRemoteBranch本地分支,但不是来自主人.
为了保持本地仓库分支的清洁并支持远程——deleteUntrackedBranches属性可以被设置。
它会让 Spring Cloud 配置服务器强制删除本地仓库中未被追踪的分支。
例:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
deleteUntrackedBranches: true
默认值deleteUntrackedBranches财产是false. |
Git 刷新率
你可以控制配置服务器获取更新配置数据的频率
通过使用spring.cloud.config.server.git.refreshRate.这
该性质的值以秒为单位。默认值为0,意味着
配置服务器每次都会从Git仓库获取更新后的配置
请求。如果值为负数,刷新不会发生。
默认标签
Git 的默认标签是主要.如果你不设置spring.cloud.config.server.git.defaultLabel以及一个名为主要不存在,配置服务器默认也会尝试借用一个名为主人.如果
你想禁用可以设置的 Refback Branch 行为spring.cloud.config.server.git.tryMasterBranch自false.
在容器中使用 Git 运行配置服务器
如果你正在获得一个java.io.IOException当配置服务器在类似于以下容器中运行时:
2022-01-03 20:04:02,892 [tributeWriter-2] ERROR org.eclipse.jgit.util.FS$FileStoreAttributes.saveToConfig - Cannot save config file 'FileBasedConfig[/.config/jgit/config]'
java.io.IOException: Creating directories for /.config/jgit failed
您必须以下其中之一:
-
在容器内为用户提供一个可写的主目录。
-
设置环境变量
XDG_CONFIG_HOME在容器内部指向一个 Java 进程拥有写权限的目录。