AWS Route53で場所を認識したgitリモートURL

GitLabユーザーに、自動的に最も近いGeoノードを使用する単一のリモートURLを提供することができます。 これは、ユーザーが移動しても、より近いGeoノードを利用するためにGitの設定を更新する必要がないことを意味します。

これは、Gitプッシュ・リクエストをセカンダリ・ノードから プライマリ・ノードへ自動的に(HTTP) 、あるいはプロキシ(SSH) 、リダイレクトすることができるからです。

これらの手順はAWS Route53を使用していますが、Cloudflareのような他のサービスを使用することもできます。

: ロードバランサーを使用して、ウェブ UI または API トラフィックを複数のGeoセカンダリノードにディストリビューションすることもできます。 重要なのは、プライマリノードはまだ含めることができないということです。 機能リクエストを参照してください。プライマリをGeoノードロードバランサーの背後に置くことをサポートします。

前提条件

この例では、すでに設定済みです:

  • primary.example.com Geoプライマリノードとして
  • secondary.example.com Geoセカンダリノードとして

git.example.com サブドメインを作成し、自動的にリクエストを誘導します:

  • ヨーロッパからセカンダリー・ノードへ
  • 他のすべての場所からプライマリ・ノードへ

いずれにせよ、必要です:

  • 自身のアドレスでアクセス可能なGitLabのプライマリノード
  • GitLabのセカンダリノード
  • お客様のドメインを管理するRoute53 Hosted Zoneです。

Geoプライマリノードと セカンダリノードをまだセットアップしていない場合は、Geoセットアップ手順を参照してください。

トラフィックポリシーの作成

Route53 Hosted Zoneでは、トラフィックポリシーを使用してさまざまなルーティング設定を行うことができます。

  1. Route53ダッシュボードに移動し、Traffic policiesをクリックします。

    Traffic policies

  2. トラフィックポリシーの作成ボタンをクリックします。

    Name policy

  3. Policy Name(ポリシー名)フィールドにSingle Git Host を入力し、Next(次へ)をクリックします。

    Policy diagram

  4. DNS タイプは A: IP Address in IPv4 formatのままにしておきます。
  5. 接続先…」をクリックし、「ジオロケーションルール」を選択します。

    Add geolocation rule

  6. 最初のロケーションはDefaultのままにしておきます。
  7. 接続先…」をクリックし、「新しいエンドポイント」を選択します。
  8. タイプ value を選択し、<your **primary** IP address>で内部を埋めます。
  9. 2つ目の場所はEuropeを選択します。
  10. 接続先…」をクリックし、「新しいエンドポイント」を選択します。
  11. タイプ value を選択し、<your **secondary** IP address>で内部を埋めます。

    Add traffic policy endpoints

  12. トラフィックポリシーの作成]をクリックします。

    Create policy records with traffic policy

  13. ポリシーレコードの DNS 名を gitで埋めます。
  14. ポリシー レコードの作成] をクリックします。

    Created policy record

Geoノードにトラフィックをジオロケーション別にディストリビューションするシングルホスト(例:git.example.com )のセットアップに成功しました!

Git clone URL が特別な 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を使用するには、ウェブノードのgitlab.rbgitlab_rails['gitlab_ssh_host'] を設定して、SSHリモートのURLのホストを変更します。
  • HTTP リモート URL は、Custom Git clone URL for HTTP(S)に示したとおりです。

git リクエストの動作例

上記の設定手順を踏むと、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にプロキシします。