Help us learn about your current experience with the documentation. Take the survey.

使用 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 托管区域中,流量策略可用于设置多种路由配置。

  1. 前往 Route53 控制台 并选择 流量策略

    Route53 控制台的流量策略部分

  2. 选择 创建流量策略

    为流量策略命名

  3. 策略名称 字段中填入 Single Git Host,然后选择 下一步

    为流量策略选择 DNS 类型

  4. DNS 类型 保留为 A: IPv4 格式的 IP 地址

  5. 选择 连接到,然后选择 地理位置规则

    添加地理位置规则

  6. 对于第一个 位置,将其保留为 默认

  7. 选择 连接到,然后选择 新终端节点

  8. 选择 类型 value,并填入 <您的 **主站点** IP 地址>

  9. 对于第二个 位置,选择 欧洲

  10. 选择 连接到,然后选择 新终端节点

  11. 选择 类型 value,并填入 <您的 **辅助站点** IP 地址>

    为地理位置规则设置位置和终端节点

  12. 选择 创建流量策略

    在流量策略中设置策略记录

  13. 策略记录 DNS 名称 中填入 git

  14. 选择 创建策略记录

    成功创建了带有策略记录的流量策略

您已成功设置了一个单一主机,例如 git.example.com,它会根据地理位置将流量分发到您的 Geo 站点!

配置 Git 克隆 URL 以使用特殊的 Git URL

当用户首次克隆仓库时,他们通常会从项目页面复制 Git 远程 URL。默认情况下,这些 SSH 和 HTTP URL 基于当前主机的外部 URL。例如:

  • [email protected]:group1/project1.git
  • https://secondary.example.com/group1/project1.git

仓库的 SSH 和 HTTPS URL

您可以自定义:

  • 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