DNS設定

Domain Name System(DNS) は、IPアドレスとドメイン名を一致させるために使用される命名システムです。

IPアドレスだけを使ってGitLabインスタンスを実行することもできますが、ドメイン名を使う方が便利です:

  • 覚えやすく、使いやすい
  • HTTPSには必須です。

    note
    Let’s Encryptインテグレーション(自動SSL証明書)を利用するには、インスタンスのドメイン名が公開インターネット上で解決可能である必要があります。

ネームレジストラを使用

ドメイン名をインスタンスのIPアドレスに関連付けるには、1つ以上のDNSレコードを指定する必要があります。ドメインのDNS設定へのDNSレコードの追加は、選択したプロバイダに完全に依存し、このドキュメントの範囲外です。

一般的には、以下のような手順になります:

  1. DNSレジストラのコントロールパネルにアクセスし、DNSレコードを追加します。それはタイプの1つでなければなりません:

    • A
    • AAAA
    • CNAME

    タイプはインスタンスの基本アーキテクチャによって異なります。最も一般的なものはAレコードです。

  2. 設定が適用されたことをテストします。
  3. SSHを使ってGitLabがインストールされているサーバーに接続します。
  4. 設定ファイル(/etc/gitlab/gitlab.rb) をお好みのGitLab設定で編集します。

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を設定します。
自動DevOpsドメインAuto DevOpsを使用してプロジェクトをデプロイする場合、このドメインを使用してソフトウェアをデプロイできます。インスタンス、またはクラスターのレベルで定義することができます。これは、/etc/gitlab/gitlab.rb ではなく GitLab UI を使って設定します。 Auto DevOpsドメインを設定します。

トラブルシューティング

特定のコンポーネントへのアクセスに問題がある場合、または Let’s Encrypt インテグレーションに失敗する場合は、DNS に問題がある可能性があります。Digツールを使用して、DNS に問題があるかどうかを確認できます。

成功した DNS クエリ

この例では、クエリがグローバルに解決可能であることを保証するために、公開Cloudflare DNSリゾルバを使用しています。しかし、Google Public DNSリゾルバのような他の公開リゾルバも利用可能です。

$ dig registry.gitlab.com @1.1.1.1

; <<>> DiG 9.16.1-Ubuntu <<>> registry.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4128
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;registry.gitlab.com.   IN  A

;; ANSWER SECTION:
registry.gitlab.com.  37  IN  A  104.18.27.123
registry.gitlab.com.  37  IN  A  104.18.26.123

;; Query time: 4 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Wed Jul 06 10:03:59 CEST 2022
;; MSG SIZE  rcvd: 80

ステータスがNOERROR で、ANSWER SECTION に実際の結果があることを確認してください。

失敗したDNSクエリ

$ dig fake.gitlab.com @1.1.1.1

; <<>> DiG 9.16.1-Ubuntu <<>> fake.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1502
;; 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.   3600 IN SOA diva.ns.cloudflare.com. dns.cloudflare.com. 2282080190 10000 2400 604800 3600

;; Query time: 8 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Wed Jul 06 10:06:53 CEST 2022
;; MSG SIZE  rcvd: 103

この例では、statusNXDOMAIN で、ANSWER SECTIONはありません。SERVER フィールドは、どの DNS サーバーが回答をクエリされたかを示しており、この場合は公開Cloudflare DNS リゾルバです。

ワイルドカードDNSエントリの使用

URL属性にワイルドカードDNSを使用することは可能ですが、それぞれに完全なドメイン名を指定する必要があります。

Let’s Encryptインテグレーションはワイルドカード証明書を取得しません。これは自分で行う必要があります。