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
这里需要注意,status
为 NXDOMAIN
,ANSWER SECTION
没有结果。SERVER
展示查询结果的 DNS 服务器。默认情况下,是运行 dig 命令的站点使用的主要 DNS 服务器。