使用 AWS Route53 实现位置感知的 Git 远程 URL
- 版本:Premium, Ultimate
- 产品:GitLab Self-Managed
GitLab Geo 支持位置感知的 DNS,包括 Web UI 和 API 流量。 相比于本文档中介绍的位置感知 Git 远程 URL,我们更推荐这种配置。
您可以为 GitLab 用户提供一个单一的远程 URL,该 URL 会自动使用离他们最近的 Geo 站点。这意味着,当用户移动到不同位置时,无需更新其 Git 配置,即可利用更近的 Geo 站点。
这是可以实现的,因为 Git 推送请求可以从 辅助站点 自动重定向(HTTP)或代理(SSH)到 主站点。
虽然本说明使用的是 AWS Route53,但也可以使用其他服务,例如 Cloudflare。
先决条件
在本示例中,我们已经设置好了:
primary.example.com作为 Geo 主站点。secondary.example.com作为 Geo 辅助站点。
我们创建了一个 git.example.com 子域名,它会自动将请求定向到:
- 来自欧洲的请求定向到 辅助站点。
- 来自所有其他位置的请求定向到 主站点。
无论如何,您都需要:
- 一个可正常工作的 GitLab 主站点,并且可以通过其自身地址访问。
- 一个可正常工作的 GitLab 辅助站点。
- 一个管理您域名的 Route53 托管区域。
如果您尚未设置 Geo 主站点和辅助站点,请参阅 Geo 设置说明。
创建流量策略
在 Route53 托管区域中,流量策略可用于设置多种路由配置。
-
前往 Route53 控制台 并选择 流量策略。
-
选择 创建流量策略。
-
在 策略名称 字段中填入
Single Git Host,然后选择 下一步。 -
将 DNS 类型 保留为
A: IPv4 格式的 IP 地址。 -
选择 连接到,然后选择 地理位置规则。
-
对于第一个 位置,将其保留为
默认。 -
选择 连接到,然后选择 新终端节点。
-
选择 类型
value,并填入<您的 **主站点** IP 地址>。 -
对于第二个 位置,选择
欧洲。 -
选择 连接到,然后选择 新终端节点。
-
选择 类型
value,并填入<您的 **辅助站点** IP 地址>。 -
选择 创建流量策略。
-
在 策略记录 DNS 名称 中填入
git。 -
选择 创建策略记录。
您已成功设置了一个单一主机,例如 git.example.com,它会根据地理位置将流量分发到您的 Geo 站点!
配置 Git 克隆 URL 以使用特殊的 Git URL
当用户首次克隆仓库时,他们通常会从项目页面复制 Git 远程 URL。默认情况下,这些 SSH 和 HTTP URL 基于当前主机的外部 URL。例如:
[email protected]:group1/project1.githttps://secondary.example.com/group1/project1.git
您可以自定义:
- SSH 远程 URL,使其使用位置感知的
git.example.com。为此,您需要在 Web 节点的gitlab.rb文件中,通过设置gitlab_rails['gitlab_ssh_host']来修改 SSH 远程 URL 的主机名。 - HTTP 远程 URL,如 自定义 HTTP(S) 的 Git 克隆 URL 中所示。
Git 请求处理行为示例
按照前面记录的配置步骤操作后,Git 请求的处理现在具备了位置感知能力。 对于请求:
- 来自欧洲以外的所有请求都将被定向到 主站点。
- 在欧洲境内,通过:
- HTTP:
git clone http://git.example.com/foo/bar.git被定向到 辅助站点。git push最初被定向到 辅助站点,然后该站点会自动重定向到primary.example.com。
- SSH:
git clone [email protected]:foo/bar.git被定向到 辅助站点。git push最初被定向到 辅助站点,然后该站点会自动将请求代理到primary.example.com。
- HTTP: