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

note
GitLab 14.6 以降、GitLab Geo は Web UI と API トラフィックを含むロケーションアウェアな URL をサポートしています。この設定は、このドキュメントで説明するロケーションアウェアGitリモートURLよりも推奨されます。

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

これは、Git Push リクエストをセカンダリサイトから プライマリサイトに自動的にリダイレクト((HTTP) )またはプロキシ((SSH) )することができるからです。

この説明ではAWS Route53 を使っていますが、Cloudflare のような他のサービスを使うこともできます。

前提条件

この例では、すでにセットアップされています:

  • 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. Create traffic policy]を選択します。

    Name policy

  3. ポリシー名]フィールドにSingle Git Host を入力し、[次へ]を選択します。

    Policy diagram

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

    Add geolocation rule

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

    Add traffic policy endpoints

  12. Create traffic policy]を選択します。

    Create policy records with traffic policy

  13. ポリシーレコードの DNS 名を git で入力します。
  14. ポリシーレコードの作成]を選択します。

    Created policy record

たとえば、git.example.com 、Geo サイトへのトラフィックをジオロケーション別にディストリビューションする単一ホストのセットアップに成功しました!

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 にプロキシします。