DNS 设置

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

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

虽然你可以仅使用 IP 地址运行一个极狐GitLab 实例,但使用域名有以下好处:

  • 更容易记忆和使用。

  • 需要用于 HTTPS。

    要利用 [Let's Encrypt 集成](ssl/_index.md#enable-the-lets-encrypt-integration)(自动 SSL 证书),你的实例的域名必须能够通过公共互联网解析。

使用域名注册商#

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

通常,过程类似于:

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

    • A
    • AAAA
    • CNAME

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

  2. 测试配置是否应用。

  3. 使用 SSH 连接到安装了极狐GitLab 的服务器。

  4. 使用你偏好的 极狐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 解析器确保查询在全球范围内可解析。

shell
1$ 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 查询#

shell
1$ 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

在此示例中,statusNXDOMAIN,并且没有 ANSWER SECTIONSERVER 字段告诉你哪个 DNS 服务器被查询以获得答案,在这种情况下是公共 Cloudflare DNS 解析器。

使用通配符 DNS 条目#

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

Let's Encrypt 集成不获取通配符证书。你必须自行完成此操作。