Location-aware Git remote URL with AWS Route53

原文:https://docs.gitlab.com/ee/administration/geo/replication/location_aware_git_url.html

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 托管区域中,可以使用流策略来设置各种路由配置.

  1. 导航到Route53 仪表板 ,然后单击” 流量策略” .

    Traffic policies

  2. 单击创建流量策略按钮.

    Name policy

  3. Single Git Host填充Policy Name字段,然后单击Next .

    Policy diagram

  4. Leave DNS 类型 as A: IP Address in IPv4 format.

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

    Add geolocation rule

  6. 对于第一个位置 ,请将其保留为Default .

  7. 单击” 连接到…”,然后选择” 新建端点” .
  8. 选择类型 value并用<your **primary** IP address>填写.
  9. 对于第二个位置 ,选择” Europe .
  10. 单击” 连接到…”,然后选择” 新建端点” .
  11. 选择类型 value并用<your **secondary** IP address>填写.

    Add traffic policy endpoints

  12. Click 创建流量策略.

    Create policy records with traffic policy

  13. 使用git填写策略记录 DNS 名称 .

  14. Click 创建策略记录.

    Created policy record

您已经成功设置了一个主机,例如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

Clone panel

您可以自定义:

  • 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 .