DNS 配置

域名系统 (DNS) 是用于将 IP 地址与域名匹配的命名系统。

虽然您可以仅使用其 IP 地址运行极狐GitLab 实例,但使用域名:

  • 更容易记住和使用。
  • HTTPS 所需。

    note要利用 Let’s Encrypt 集成(自动 SSL 证书),您的实例域名必须可通过公共互联网解析。

使用名称注册商

要将域名与实例的 IP 地址关联,您必须指定一个或多个 DNS 记录。 将 DNS 记录添加到您域名的 DNS 配置完全取决于您选择的提供商,超出了本文档的范围。

通常,该过程类似于:

  1. 访问 DNS 注册商的控制面板并添加 DNS 记录,应该是以下类型之一:

    • A
    • AAAA
    • CNAME

    类型取决于您的实例的底层架构。最常见的是 A 记录。

  2. 测试是否应用了配置。
  3. 使用 SSH 连接到安装了极狐GitLab 的服务器。
  4. 使用您喜欢的 GitLab 设置 编辑配置文件 (/etc/gitlab/gitlab.rb)

使用动态 DNS 服务

对于非生产用途,您可以使用动态 DNS 服务,例如 nip.io

我们不建议将这些用于任何生产或长期实例,因为它们通常:

使用 DNS 的极狐GitLab 设置

以下极狐GitLab 设置对应于 DNS 条目。

极狐GitLab 设置 描述 配置
external_url 此 URL 与主 GitLab 实例交互。它在通过 SSH/HTTP/HTTPS 进行克隆以及访问 Web UI 时使用。GitLab Runner 使用此 URL 与实例进行通信。 配置 external_url
registry_external_url 此 URL 用于与 Container Registry 进行交互。它可以由 Let’s Encrypt 集成使用。这个 URL 也可以使用与 external_url 相同的 DNS 条目,但在不同的端口上。 配置 registry_external_url
mattermost_external_url 此 URL 用于捆绑的 Mattermost 软件。它可以由 Let’s Encrypt 集成使用。
pages_external_url 默认情况下,使用 GitLab Pages 的项目部署到此值的子域名。
Auto DevOps 域名 如果您使用 Auto DevOps 部署项目,则此域名可用于部署软件。它可以在实例或集群级别定义。这是使用 GitLab UI 配置的,而不是在 /etc/gitlab/gitlab.rb 中。

故障排查

如果您访问特定组件时发生问题,或 Let’s Encrypt 集成失效,您可能遇到 DNS 问题。您可以使用 dig 工具,检查确认是否是 DNS 导致了您的问题。

成功的 DNS 查询

$ dig registry.gitlab.com

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

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

;; ANSWER SECTION:
registry.gitlab.com.    300     IN      A       35.227.35.254

;; Query time: 56 msec
;; SERVER: 172.16.0.1#53(172.16.0.1)
;; WHEN: Fri Mar 20 14:31:24 CDT 2020
;; MSG SIZE  rcvd: 83

最终,状态应该为 NOERROR,并且 ANSWER SECTION 有实际结果。

失败的 DNS 查询

$ dig fake.gitlab.com

; <<>> DiG 9.10.6 <<>> fake.gitlab.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 50688
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

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

;; AUTHORITY SECTION:
gitlab.com.             900     IN      SOA     ns-705.awsdns-24.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 101 msec
;; SERVER: 172.16.0.1#53(172.16.0.1)
;; WHEN: Fri Mar 20 14:51:58 CDT 2020

在此例中,statusNXDOMAIN,没有 ANSWER SECTIONSERVER 展示查询结果的 DNS 服务器。默认情况下,是运行 dig 命令的站点使用的主要 DNS 服务器。

使用通配符 DNS 条目

可以对 URL 属性使用通配符 DNS,但您必须为每个属性提供完整的域名。

Let’s Encrypt 集成不获取通配符证书。您必须自己 执行此操作。