DNS設定
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
「ドメインネームシステム」(DNS)は、IPアドレスとドメイン名を対応させるために使用される命名システムです。
IPアドレスのみを使用してGitLabインスタンスを実行することもできますが、ドメイン名を使用する方が次の点で優れています:
記憶しやすく、使いやすい。
HTTPSには必須です。
Let’s Encryptインテグレーション(自動SSL証明書)を利用するには、お使いのインスタンスのドメイン名がパブリックインターネット上で解決できる必要があります。
ネームレジストラを使用する
ドメイン名をインスタンスのIPアドレスに関連付けるには、1つ以上のDNSレコードを指定する必要があります。ドメインのDNS設定にDNSレコードを追加することは、選択したプロバイダーによって完全に異なり、このドキュメントのスコープ外です。
一般的に、そのプロセスは以下のようになります:
DNSレジストラのコントロールパネルにアクセスし、DNSレコードを追加します。タイプは次のいずれかである必要があります:
AAAAACNAME
タイプはインスタンスの基盤となるアーキテクチャによって異なります。最も一般的なものはAレコードです。
設定が適用されたことをテストします。
SSHを使用して、GitLabがインストールされているサーバーに接続します。
お好みのGitLab設定で設定ファイル
(/etc/gitlab/gitlab.rb)を編集します。
DNSレコードの詳細については、DNS records overviewを参照してください。
動的DNSサービスを使用する
非本番環境での使用には、nip.ioなどの動的DNSサービスを使用できます。
これらは本番環境や長期間稼働するインスタンスには推奨されません。その理由は以下の通りです:
- セキュリティ上の問題があります
- Let’s EncryptによってRate-limitedされます。
GitLabの設定でDNSを使用するもの
以下の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を設定します。 |
pages_external_url | デフォルトでは、GitLab Pagesを使用するプロジェクトは、この値のサブドメインにデプロイされます。 | pages_external_urlを設定します。 |
| Auto DevOpsドメイン | Auto DevOpsを使用してプロジェクトをデプロイする場合、このドメインを使用してソフトウェアをデプロイできます。インスタンスまたはクラスターレベルで定義できます。これはGitLabUIを使用して設定され、/etc/gitlab/gitlab.rbでは設定されません。 | 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サーバーに回答がクエリされたかを示しています。この場合はPublic Cloudflare DNS resolverです。
ワイルドカードDNSエントリを使用する
URL属性にワイルドカードDNSを使用することも可能ですが、それぞれの完全なドメイン名を提供する必要があります。
Let’s Encryptインテグレーションは、ワイルドカード証明書をフェッチしません。これはご自身で行う必要があります。