DNS 设置
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
域名系统(DNS)是用于将 IP 地址与域名匹配的命名系统。
虽然你可以仅使用 IP 地址运行一个极狐GitLab 实例,但使用域名有以下好处:
-
更容易记忆和使用。
-
需要用于 HTTPS。
要利用 [Let's Encrypt 集成](ssl/_index.md#enable-the-lets-encrypt-integration)(自动 SSL 证书),你的实例的域名必须能够通过公共互联网解析。
使用域名注册商
要将域名与实例的 IP 地址关联,必须指定一个或多个 DNS 记录。向域名的 DNS 配置添加 DNS 记录完全取决于你选择的提供商,超出了本文档的范围。
通常,过程类似于:
-
访问你的 DNS 注册商的控制面板并添加 DNS 记录。它应该是以下类型之一:
- A
- AAAA
- CNAME
类型取决于实例的底层架构。最常见的是 A 记录。
-
测试配置是否应用。
-
使用 SSH 连接到安装了极狐GitLab 的服务器。
-
使用你偏好的 极狐GitLab 设置 编辑配置文件 (/etc/gitlab/gitlab.rb)。
要了解更多关于 DNS 记录的信息,请参阅 DNS 记录概述。
使用动态 DNS 服务
对于非生产用途,你可以使用动态 DNS 服务,例如 nip.io。
我们不推荐将这些用于任何生产或长期存在的实例,因为它们通常:
- 不安全
- 被 Let's Encrypt 限速
使用 DNS 的极狐GitLab 设置
以下极狐GitLab 设置对应于 DNS 条目。
| 极狐GitLab 设置 | 描述 | 配置 |
|---|---|---|
| external_url | 此 URL 与主要的极狐GitLab 实例交互。它用于通过 SSH/HTTP/HTTPS 克隆,以及访问 web UI。极狐GitLab Runner 使用此 URL 与实例通信。 | 配置 external_url。 |
| registry_external_url | 此 URL 用于与 容器镜像仓库 交互。它可以被 Let's Encrypt 集成使用。此 URL 也可以使用与 external_url 相同的 DNS 条目,但在不同的端口上。 | 配置 registry_external_url。 |
| mattermost_external_url | 此 URL 用于 捆绑的 Mattermost 软件。它可以被 Let's Encrypt 集成使用。 | 配置 mattermost_external_url。 |
| pages_external_url | 默认情况下,使用 极狐GitLab Pages 的项目会部署到此值的子域。 | 配置 pages_external_url。 |
| 自动 DevOps 域 | 如果你使用自动 DevOps 部署项目,此域可以用于部署软件。它可以在实例或集群级别定义。这是通过极狐GitLab UI 配置的,而不是在 /etc/gitlab/gitlab.rb 中。 | 配置自动 DevOps 域。 |
故障排除
如果你在访问特定组件时遇到问题,或如果 Let's Encrypt 集成失败,你可能有 DNS 问题。你可以使用 dig 工具来确定 DNS 是否导致问题。
成功的 DNS 查询
此示例使用 公共 Cloudflare DNS 解析器确保查询在全球范围内可解析。
shell1$ dig registry.gitlab.com @1.1.1.1 2 3; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> registry.gitlab.com @1.1.1.1 4;; global options: +cmd 5;; Got answer: 6;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3934 7;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 8 9;; OPT PSEUDOSECTION: 10; EDNS: version: 0, flags:; udp: 1232 11;; QUESTION SECTION: 12;registry.gitlab.com. IN A 13 14;; ANSWER SECTION: 15registry.gitlab.com. 58 IN A 35.227.35.254 16 17;; Query time: 8 msec 18;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) 19;; WHEN: Wed Jan 31 11:16:51 CET 2024 20;; MSG SIZE rcvd: 64 21
确保状态为 NOERROR,并且 ANSWER SECTION 有实际结果。
失败的 DNS 查询
shell1$ dig fake.gitlab.com @1.1.1.1 2 3; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> fake.gitlab.com @1.1.1.1 4;; global options: +cmd 5;; Got answer: 6;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25693 7;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 8 9;; OPT PSEUDOSECTION: 10; EDNS: version: 0, flags:; udp: 1232 11;; QUESTION SECTION: 12;fake.gitlab.com. IN A 13 14;; AUTHORITY SECTION: 15gitlab.com. 1800 IN SOA diva.ns.cloudflare.com. dns.cloudflare.com. 2331688399 10000 2400 604800 1800 16 17;; Query time: 12 msec 18;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) 19;; WHEN: Wed Jan 31 11:17:46 CET 2024 20;; MSG SIZE rcvd: 103 21
在此示例中,status 为 NXDOMAIN,并且没有 ANSWER SECTION。SERVER 字段告诉你哪个 DNS 服务器被查询以获得答案,在这种情况下是公共 Cloudflare DNS 解析器。
使用通配符 DNS 条目
可以使用通配符 DNS 对 URL 属性,但必须为每一个提供完整的域名。
Let's Encrypt 集成不获取通配符证书。你必须自行完成此操作。