Location-aware Git remote URL with AWS Route53
原文:https://docs.gitlab.com/ee/administration/geo/replication/location_aware_git_url.html
- Prerequisites
- Create a traffic policy
- Configure Git clone URLs to use the special Git URL
- Example Git request handling behavior
Location-aware Git remote URL with AWS Route53
您可以为 GitLab 用户提供一个远程 URL,该 URL 自动使用距离他们最近的 Geo 节点. 这意味着用户在移动时无需更新其 Git 配置即可利用更近的 Geo 节点.
这是可能的,因为 Git 推送请求可以从辅助节点自动重定向(HTTP)或代理(SSH)到主节点.
尽管这些说明使用AWS Route53 ,但也可以使用其他服务,例如Cloudflare .
注意:您还可以使用负载平衡器将 Web UI 或 API 流量分配到多个 Geo 辅助节点 . 重要的是,尚不能包含主节点. 请参阅功能请求. 支持将主数据库放置在 Geo 节点负载均衡器之后 .
Prerequisites
在此示例中,我们已经设置:
primary.example.com
作为地理主要节点.secondary.example.com
作为地理辅助节点.
我们将创建一个git.example.com
子域,该子域将自动定向请求:
- 从欧洲到次要节点.
- 从所有其他位置到主节点.
无论如何,您都需要:
- 一个可工作的 GitLab 主节点,可以在其自己的地址访问.
- 运行中的 GitLab 辅助节点.
- 一个 Route53 托管区域管理您的域.
如果尚未设置 Geo 主节点和辅助节点,请查阅Geo 设置说明 .
Create a traffic policy
在 Route53 托管区域中,可以使用流策略来设置各种路由配置.
导航到Route53 仪表板 ,然后单击” 流量策略” .
单击创建流量策略按钮.
在
Single Git Host
填充Policy Name字段,然后单击Next .Leave DNS 类型 as
A: IP Address in IPv4 format
.点击连接到…,然后选择地理位置规则 .
对于第一个位置 ,请将其保留为
Default
.- 单击” 连接到…”,然后选择” 新建端点” .
- 选择类型
value
并用<your **primary** IP address>
填写. - 对于第二个位置 ,选择”
Europe
. - 单击” 连接到…”,然后选择” 新建端点” .
选择类型
value
并用<your **secondary** IP address>
填写.Click 创建流量策略.
使用
git
填写策略记录 DNS 名称 .Click 创建策略记录.
您已经成功设置了一个主机,例如git.example.com
,它通过地理位置将流量分配到您的 Geo 节点!
Configure Git clone URLs to use the special Git URL
用户首次克隆存储库时,通常会从项目页面复制 Git 远程 URL. 默认情况下,这些 SSH 和 HTTP URL 基于当前主机的外部 URL. 例如:
git@secondary.example.com:group1/project1.git
https://secondary.example.com/group1/project1.git
您可以自定义:
- SSH 远程 URL 以使用可
git.example.com
位置的git.example.com
. 为此,通过在 Web 节点的gitlab.rb
中设置gitlab_rails['gitlab_ssh_host']
来更改 SSH 远程 URL 的主机. - HTTP 远程 URL,如HTTP(S)的 Custom Git 克隆 URL 中所示.
Example Git request handling behavior
完成上述配置步骤后,现在可以识别 Git 请求的位置. 要求:
- 在欧洲以外,所有请求都定向到主节点.
- 在欧洲范围内:
- HTTP:
git clone http://git.example.com/foo/bar.git
定向到辅助节点.git push
最初定向到辅助服务器 , 辅助服务器自动重定向到primary.example.com
.
- SSH:
git clone git@git.example.com:foo/bar.git
被定向到辅助目录 .git push
首先指向辅助服务器, 辅助服务器自动将请求代理到primary.example.com
.
- HTTP: