DNS 설정
도메인 네임 시스템(Domain Name System, DNS)은 IP 주소를 도메인 이름과 매핑하는 데 사용되는 네이밍 시스템입니다.
GitLab 인스턴스를 IP 주소만 사용하여 실행할 수 있지만, 도메인 이름을 사용하는 것이 좋습니다. 이유는 다음과 같습니다:
- 기억하고 사용하기 쉽습니다.
-
HTTPS 사용에 필요합니다.
Let’s Encrypt 통합을 활용하려면(자동 SSL 인증서), 인스턴스의 도메인 이름이 공개 인터넷에서 해결될 수 있어야 합니다.
이름 등록기 사용
도메인 이름을 인스턴스의 IP 주소와 연결하려면 하나 이상의 DNS 레코드를 지정해야 합니다. 도메인의 DNS 구성에 DNS 레코드를 추가하는 것은 선택한 제공업체에 완전히 의존하며 본 문서의 범위를 벗어납니다.
일반적으로 진행되는 과정은 다음과 유사합니다:
-
DNS 등록기의 제어판을 방문하고 DNS 레코드를 추가합니다. 이는 다음 유형 중 하나여야 합니다:
A
AAAA
CNAME
유형은 인스턴스의 기본 아키텍처에 따라 다릅니다. 가장 일반적인 것은 A 레코드입니다.
- 구성이 적용되었는지 테스트합니다.
- GitLab을 설치한 서버에 SSH로 연결합니다.
- 선호하는 GitLab 설정으로 구성 파일
(/etc/gitlab/gitlab.rb)
을 편집합니다.
DNS 레코드에 대해 더 알아보려면 DNS 레코드 개요를 확인하세요.
동적 DNS 서비스 사용
비생산용으로는 nip.io와 같은 동적 DNS 서비스를 사용할 수 있습니다.
이러한 서비스는 종종 다음과 같은 이유로 생산용 또는 장기간 사용할 인스턴스에는 권장하지 않습니다.
DNS를 사용하는 GitLab 설정
다음 GitLab 설정은 DNS 항목에 해당합니다.
GitLab 설정 | 설명 | 구성 |
---|---|---|
external_url
| 본 URL은 주요 GitLab 인스턴스와 상호 작용합니다. SSH/HTTP/HTTPS로 복제하거나 웹 UI에 액세스할 때 사용됩니다. GitLab Runner는 이 URL을 인스턴스와 통신하는 데 사용합니다. | external_url 구성
|
registry_external_url
| 이 URL은 컨테이너 레지스트리와 상호 작용하는 데 사용됩니다. Let’s Encrypt 통합에서 사용할 수 있습니다. 이 URL은 external_url 과 동일한 DNS 항목을 사용할 수 있지만 다른 포트를 사용합니다.
| registry_external_url 구성
|
mattermost_external_url
| 본 URL은 번들로 제공되는 Mattermost 소프트웨어에서 사용됩니다. Let’s Encrypt 통합에서 사용할 수 있습니다. | mattermost_external_url 구성
|
pages_external_url
| 기본적으로 GitLab Pages를 사용하는 프로젝트는 이 값의 하위 도메인으로 배포합니다. | pages_external_url 구성
|
Auto DevOps 도메인 | 프로젝트를 배포하는 데 Auto DevOps를 사용하는 경우, 이 도메인을 사용하여 소프트웨어를 배포할 수 있습니다. 이는 GitLab UI에서 인스턴스 또는 클러스터 수준으로 정의할 수 있습니다. 이는 /etc/gitlab/gitlab.rb 에 아니라 GitLab UI에서 구성됩니다.
| Auto DevOps 도메인 구성 |
문제 해결
특정 구성 요소에 액세스하는 데 문제가 있거나 Let’s Encrypt 통합이 실패하는 경우 DNS 문제가 발생했을 수 있습니다. dig
도구를 사용하여 DNS가 문제의 원인인지 확인할 수 있습니다.
성공적인 DNS 쿼리
본 예제는 쿼리가 전역적으로 해결될 수 있는지 확인하기 위해 Public Cloudflare DNS resolver를 사용합니다. 그러나 Google Public DNS resolver와 같은 다른 공개 리졸버도 사용할 수 있습니다.
$ dig registry.gitlab.com @1.1.1.1
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> registry.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3934
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;registry.gitlab.com. IN A
;; ANSWER SECTION:
registry.gitlab.com. 58 IN A 35.227.35.254
;; Query time: 8 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Jan 31 11:16:51 CET 2024
;; MSG SIZE rcvd: 64
NOERROR
상태이고 ANSWER SECTION
에 실제 결과가 있는지 확인하세요.
실패한 DNS 쿼리
$ dig fake.gitlab.com @1.1.1.1
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> fake.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25693
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;fake.gitlab.com. IN A
;; AUTHORITY SECTION:
gitlab.com. 1800 IN SOA diva.ns.cloudflare.com. dns.cloudflare.com. 2331688399 10000 2400 604800 1800
;; Query time: 12 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Jan 31 11:17:46 CET 2024
;; MSG SIZE rcvd: 103
이 예에서 status
는 NXDOMAIN
이고, ANSWER SECTION
은 없습니다. SERVER
필드는 답변을 얻기 위해 조회된 DNS 서버를 알려주는데, 이 경우 퍼블릭 클라우드플레어 DNS 리졸버입니다.
와일드카드 DNS 항목 사용
URL 속성에 대해 와일드카드 DNS를 사용할 수 있지만, 각각에 대해 전체 도메인 이름을 제공해야 합니다.
Let’s Encrypt 통합은 와일드카드 인증서를 가져오지 않습니다. 각각에 대해 직접 이 작업을 수행해야 합니다.