AWS Route53을 사용한 위치 인식형 Git 원격 URL
사용자들에게 지리적으로 가장 가까운 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 호스팅 영역.
아직 Geo 주 사이트와 보조 사이트를 설정하지 않았다면, Geo 설치 지침을 참조하세요.
트래픽 정책 생성
Route53 호스팅 영역에서 트래픽 정책을 사용하여 다양한 라우팅 구성을 설정할 수 있습니다.
-
Route53 대시보드로 이동하여 트래픽 정책을 선택합니다.
-
트래픽 정책 생성을 선택합니다.
-
정책 이름 필드에
단일 Git 호스트
를 입력하고 다음을 선택합니다. -
DNS 유형은
IPv4 형식의 IP 주소
로 남겨둡니다. -
연결 대상을 선택하고 지리적 위치 규칙을 선택합니다.
- 첫 번째 위치는
기본값
으로 남겨둡니다. - 연결 대상을 선택하고 새 엔드포인트를 선택합니다.
-
유형을
값
으로 선택하고<당신의 **주** IP 주소>
로 입력합니다. - 두 번째 위치는
유럽
을 선택합니다. - 연결 대상을 선택하고 새 엔드포인트를 선택합니다.
-
유형을
값
으로 선택하고<당신의 **보조** IP 주소>
로 입력합니다. -
트래픽 정책 생성을 선택합니다.
-
정책 레코드 DNS 이름에
git
을 입력하고 정책 레코드 생성을 선택합니다.
이제 지역별로 트래픽을 Geo 사이트에 분산하는 git.example.com
과 같은 단일 호스트를 성공적으로 설정했습니다!
특별한 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은 HTTP(S)를 위한 사용자 정의 Git 클론 URL에 표시된 대로 설정합니다.
예시 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: