AWS Route53で場所を認識したgitリモートURL
GitLabユーザーに、自動的に最も近いGeoノードを使用する単一のリモートURLを提供することができます。 これは、ユーザーが移動しても、より近いGeoノードを利用するためにGitの設定を更新する必要がないことを意味します。
これは、Gitプッシュ・リクエストをセカンダリ・ノードから プライマリ・ノードへ自動的に(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では、トラフィックポリシーを使用してさまざまなルーティング設定を行うことができます。
-
Route53ダッシュボードに移動し、Traffic policiesをクリックします。
-
トラフィックポリシーの作成ボタンをクリックします。
-
Policy Name(ポリシー名)フィールドに
Single Git Host
を入力し、Next(次へ)をクリックします。 -
DNS タイプは
A: IP Address in IPv4 format
のままにしておきます。 -
接続先…」をクリックし、「ジオロケーションルール」を選択します。
- 最初のロケーションは、
Default
のままにしておきます。 - 接続先…」をクリックし、「新しいエンドポイント」を選択します。
-
タイプ
value
を選択し、<your **primary** IP address>
で内部を埋めます。 - 2つ目の場所は、
Europe
を選択します。 - 接続先…」をクリックし、「新しいエンドポイント」を選択します。
-
タイプ
value
を選択し、<your **secondary** IP address>
で内部を埋めます。 -
トラフィックポリシーの作成]をクリックします。
-
ポリシーレコードの DNS 名を
git
で埋めます。 -
ポリシー レコードの作成] をクリックします。
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
をカスタマイズできます:
- SSHリモートのURLでロケーションを意識した
git.example.com
を使用するには、ウェブノードのgitlab.rb
でgitlab_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
にプロキシします。
-
- HTTPです: