DNS 配置

运行 GitLab 实例可只使用 IP 地址,但使用 DNS 解析往往更具优势,不但便于用户使用,而且对于启动 HTTPS 是必需的。根据实际业务需要,可设置多条 DNS 记录。任何 DNS 记录应属于 A、AAAA 或 CNAME 类型,具体要使用的类型取决于实例运行的底层架构。

如果您不需要集成 Let’s Encrypt integration,所有地址都不需要在公共互联网上解析。只有将要访问 GitLab 实例的节点,需要能够解析地址。

添加 DNS 记录到您的域名 DNS 设置,完全依赖于您选择的域名提供商,不在本文说明范围内。请从您的域名注册商、托管提供商或托管 DNS 提供商处查阅文档,以获取最准确的指导。常见注册商信息如下:

您也可以使用动态 DNS 服务,例如 nip.io,简单快速地为非生产实例提供 DNS 解析名。不推荐在生产实例或长期使用实例上应用,因为通常会被 Let’s Encrypt 和 insecure 限制(rate-limited)。即使您首次注册成功,续订可能会失败。

GitLab 设置

/etc/gitlab/gitlab.rb 可以利用相应的 DNS 条目,以下是其属性列表。

虽然可以使用通配符替换下面的 DNS 记录,但您仍然需要为 GitLab 实例提供独立的记录,并且这不会导致 Let’s Encrypt 集成获取通配符证书。

external_url

用于与主 GitLab 实例进行交互的地址。通过 SSH/HTTP/HTTPS 克隆时使用该地址。访问 web UI 将引用此 DNS 条目。如果您使用的是 GitLab Runner,它将使用该地址与实例通信。

registry_external_url

使用容器镜像仓库时,该地址用于镜像仓库交互。该地址可以与 external_url 相同,使用不同的端口。可以用于 Let’s Encrypt 集成。

mattermost_external_url

使用 bundled Mattermost 时需要配置,可以用于 Let’s Encrypt 集成。

pages_external_url

默认情况下,使用 GitLab Pages 的项目将会部署到该地址的子域名。

Auto DevOps domain

如果您计划通过极狐GitLab 的 Auto DevOps 功能部署项目,Auto DevOps 域名可用于部署软件。该域名可以在实例级别或集群级别上定义。

故障排查

如果您访问特定组件时发生问题,或 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

这里需要注意,statusNXDOMAINANSWER SECTION 没有结果。SERVER 展示查询结果的 DNS 服务器。默认情况下,是运行 dig 命令的站点使用的主要 DNS 服务器。