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 查询

此示例使用 Public Cloudflare DNS 解析器,来确保查询是全局可解析的。

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

;; QUESTION SECTION:
;registry.gitlab.cn.		IN	A

;; ANSWER SECTION:
registry.gitlab.cn.	600	IN	CNAME	gitlab-jh-public.tencentcloudcr.com.
gitlab-jh-public.tencentcloudcr.com. 600 IN A	150.158.225.202

;; AUTHORITY SECTION:
tencentcloudcr.com.	86400	IN	NS	ns4.dnsv3.com.
tencentcloudcr.com.	86400	IN	NS	ns3.dnsv3.com.

;; ADDITIONAL SECTION:
ns3.dnsv3.com.		32951	IN	A	61.151.180.47
ns3.dnsv3.com.		32951	IN	A	162.14.24.246
ns3.dnsv3.com.		32951	IN	A	162.14.25.246
ns3.dnsv3.com.		32951	IN	A	183.192.164.116
ns3.dnsv3.com.		32951	IN	A	223.166.151.13
ns4.dnsv3.com.		32951	IN	A	112.80.181.93
ns4.dnsv3.com.		32951	IN	A	129.211.176.161
ns4.dnsv3.com.		32951	IN	A	183.192.164.116
ns4.dnsv3.com.		32951	IN	A	59.36.120.144
ns4.dnsv3.com.		32951	IN	A	61.151.180.48
ns3.dnsv3.com.		32951	IN	AAAA	2402:4e00:1430:1102:0:9136:2b2e:6001
ns4.dnsv3.com.		32951	IN	AAAA	2402:4e00:1020:1264:0:9136:29b9:cb1f

;; Query time: 464 msec
;; SERVER: 192.168.43.1#53(192.168.43.1)
;; WHEN: Thu Jul 21 11:45:20 CST 2022
;; MSG SIZE  rcvd: 359

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

失败的 DNS 查询

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

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

;; AUTHORITY SECTION:
jihulab.com.		60	IN	SOA	dns3.hichina.com. hostmaster.hichina.com. 2022052002 3600 1200 86400 600

;; Query time: 118 msec
;; SERVER: 192.168.43.1#53(192.168.43.1)
;; WHEN: Thu Jul 21 11:46:41 CST 2022
;; MSG SIZE  rcvd: 105

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

使用通配符 DNS 条目

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

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