当您创建 Compute Engine 实例时,内部 DNS 会自动为该实例创建 DNS 名称。此 DNS 名称通过解析内部 IP 地址来支持内部实例之间的通信。 Trusted Cloud by S3NS 上的虚拟私有云网络使用内部 DNS 服务允许同一网络内的计算实例使用内部 DNS 名称彼此访问。
Trusted Cloud 会在您管理实例时自动创建、更新和移除以下 DNS 记录类型:
- DNS 地址记录(即 A 记录)是为
.internal
的 DNS 区域中的实例创建的。 - 用于 DNS 反向查找的实例 PTR 记录是在相应的反向区域中创建的。
举例来说,如果您删除了一个实例, Trusted Cloud 会自动移除与其内部 DNS 名称关联的 A 和 PTR 记录。如果您随后创建了一个同名实例, Trusted Cloud 将为替换实例创建新的记录。
限制
Compute Engine 仅会为实例的
nic0
网络接口的主要内部 IPv4 地址创建内部 DNS 名称 A 和 PTR 记录。因此,nic0
网络接口的堆栈类型必须是 IPv4 专用或双栈。内部 DNS 不支持 IPv6 专用网络接口(预览版)。Compute Engine 不会为以下情况创建内部 DNS 记录:
- 网络接口的主要内部 IPv4 地址,不同于
nic0
。 - 任何网络接口的外部 IPv4 地址。
- 任何网络接口的别名 IP 地址范围的内部 IPv4 地址。
- 任何网络接口的内部或外部 IPv6 地址范围。
- 网络接口的主要内部 IPv4 地址,不同于
解析内部 DNS 名称需要客户端虚拟机和与内部 DNS 记录关联的虚拟机都满足以下条件:
- 在同一 VPC 网络中。
- 在同一项目中(某些共享 VPC 场景除外)。
如需详细了解共享 VPC 场景,请参阅内部 DNS 名称和共享 VPC。
可用区级和全局内部 DNS 名称
Trusted Cloud 有两种类型的内部 DNS 名称。
- 可用区级 DNS:实例名称在每个可用区内必须是唯一的,但您可以跨可用区重复使用实例名称。例如,您可以有多个名为
instance-1
的实例,只要这些实例位于不同的可用区即可。 - 全局 DNS:实例名称在每个项目中必须是唯一的。使用全局 DNS 时,您无法在项目中重复使用实例名称。
Google 强烈建议使用可用区级 DNS,因为它可将 DNS 注册中的故障隔离到个别可用区,从而提供更高的可靠性保证。如果发生服务中断,全局 DNS 会出现以下问题:
- 实例名称在整个项目中必须是唯一的。因此,您无法在发生控制平面故障且已拥有或之前拥有项目资源的任何区域中创建新实例。 Trusted Cloud by S3NS 无法验证不可用区域中的现有资源 DNS 名称。
- Compute Engine 的某些功能不可用,例如代管式实例组 (MIG) 自动扩缩。因此,使用自动扩缩功能来从容处理工作负载增加情况的应用将无法扩容。
默认内部 DNS 类型是启用 Compute Engine API 时设置的。
- 默认内部 DNS 类型是可用区级 DNS。
- 如果您的组织或独立项目在 2018 年 9 月 6 日之前启用了 Compute Engine API,则默认的内部 DNS 类型设置为全局 DNS。
下表介绍了内部 DNS 名称的完全限定域名。
内部 DNS 类型 | 完全限定域名 (FQDN) |
---|---|
地区 DNS | INSTANCE_NAME.ZONE.c.PROJECT_ID.internal |
全局(项目范围)DNS | INSTANCE_NAME.c.PROJECT_ID.internal |
替换以下内容:
INSTANCE_NAME
:实例的名称。 对于可用区级 DNS,此值在可用区内必须是唯一的,但可以跨可用区重复。对于全局 DNS,实例名称在整个项目中必须是唯一的。ZONE
:实例所在的可用区。PROJECT_ID
:实例所属的项目。
如需了解如何控制在项目级层或实例级层使用哪种内部 DNS 名称,请参阅为项目或实例配置 DNS 名称。
DNS 域名解析
实例将内部 DNS 解析信息作为其 DHCP 租约的一部分接收。DNS 解析的方法取决于操作系统平台:
- Linux:默认情况下,实例的 DNS 服务器 (
169.254.169.254:53
) 会解析内部 DNS 名称。 - Windows:默认情况下,子网的默认网关会解析内部 DNS 名称。
PTR 记录的反向区域
Trusted Cloud的内部 DNS 服务会自动为以下反向可用区中的实例创建 PTR 记录:
10.in-addr.arpa.
168.192.in-addr.arpa.
16.172.in-addr.arpa.
、17.172.in-addr.arpa.
、...一直到31.172.in-addr.arpa.
内部 DNS 名称和共享 VPC
客户端虚拟机和与内部 DNS 记录关联的虚拟机可以位于不同的项目中,但必须使用相同的共享 VPC 网络。例如,客户端可位于一个服务项目中,而与内部 DNS 记录关联的虚拟机可位于其他服务项目或宿主项目中。
客户端必须针对内部 DNS 记录发出完全限定域名 (FQDN) 查询,而不是依赖部分查询和 DNS 搜索网域。由于以下原因,每个项目中的 DNS 搜索网域都不同:
每个内部 DNS A 记录的域名部分都包含包含虚拟机的项目的项目 ID。对于服务项目中
nic0
网络接口使用共享 VPC 网络的虚拟机,该虚拟机的项目与包含该网络的项目不同。使用区域级 DNS 名称还是全局(项目级)DNS 名称取决于包含虚拟机的项目的配置。
如需详细了解共享 VPC,请参阅:
自定义内部 DNS 名称
某些组织或应用可能需要自定义内部 DNS 名称,而不是 Trusted Cloud创建的默认内部 DNS 名称。
Cloud DNS 专用区域和自定义记录
您可以使用 Cloud DNS 专用可用区为实例创建自定义 DNS 条目。您可以配置 PTR 记录,以使用您提供的自定义网址替换实例的默认内部 DNS 网址。
如需创建用于替换自动创建的内部 DNS PTR 名称的自定义 PTR 记录,请参阅专用区域中的 RFC 1918 地址的 PTR 记录。如需了解如何为实例创建 PTR 记录,请参阅为实例创建 PTR 记录。
自定义主机名
您可以在创建实例时为其指定自定义主机名。内部 DNS 不会解析以此方式分配的自定义主机名。使用自定义主机名,您仍然需要在适当的地区创建相应的 DNS 记录(例如,使用 Cloud DNS)。如需了解详情,请参阅使用自定义主机名创建实例。
内部 DNS 和 DHCP
Compute Engine 实例被配置为每 24 小时续订一次 DHCP 租约。对于启用了可用区 DNS 的实例而言,DHCP 租约每小时到期一次。使用可用区级 DNS 的实例在 DHCP 配置文件中同时具有可用区级条目和全局条目。
默认情况下,大多数 Linux 发行版都将 DHCP 信息存储在 resolv.conf
中。每当实例上 DHCP 租约到期时,手动修改 resolv.conf
都会将其恢复为默认的 DHCP。为了在 resolv.conf
文件中进行静态修改,多种 Linux 发行版都允许您在 DHCP 政策的开头或末尾处附加相应修改项。
修改 DHCP 政策或配置文件的方式取决于您使用的 Linux 发行版。例如,Red Hat Enterprise Linux 和 Debian 使用 /etc/dhcp/dhcpd.conf
配置文件。在 CentOS 上,使用网络管理器命令行实用程序 nmcli
。
如需了解如何配置自定义 DHCP 和 DNS 网络设置,请参阅操作系统文档。 例如,对于 Red Hat Enterprise Linux for SAP with HA and Update Services 8.6,请使用以下链接:手动配置 /etc/resolv.conf 文件
resolv.conf
文件示例
默认情况下,大多数 Linux 发行版都将 DHCP 信息存储在 resolv.conf
中。systemd-resolved
服务还提供 DNS 解析器服务。您可以通过修改 /etc/systemd/resolved.conf.d/
目录中的 /etc/systemd/resolved.conf
文件和其他 *.conf
文件来配置此服务。在将 DHCP 信息存储在 resolved.conf
中的 Linux 发行版上,您可以查看 /etc/systemd/resolved.conf
文件中的可用区级 DNS 条目和全局 DNS 条目。
这些文件具有以下限制:
- 搜索路径只能处理 6 条记录,其中 3 条记录由 Compute Engine 提供。如果您向搜索路径中添加条目,使得条目总数超过 6 个,则操作系统将不会应用第 6 个条目之后的搜索规则。这可能导致 Compute Engine 功能不起作用,例如无法通过实例名称访问实例。
每当实例上为期 24 小时的 DHCP 租约到期时,对
resolv.conf
的任何手动修改都将恢复为默认的 DHCP。在使用地区 DNS 的实例上,DHCP 租约每小时到期一次。为了在resolv.conf
文件中进行静态修改,多种 Linux 发行版都允许您在 DHCP 政策的开头或末尾处附加相应修改项。
可用区级 DNS 配置
示例可用区 resolv.conf
文件:
# Local domain name. Computed from your project name. domain ZONE.c.PROJECT_ID.internal # Search list for hostname lookup. Starting with entries that represent # your project and ending with google.internal to facilitate metadata server requests. search ZONE.c.PROJECT_ID.internal. c.PROJECT_ID.internal. google.internal. # Address of the DNS server to resolve project specific, and global domain names. nameserver 169.254.169.254
替换以下内容:
ZONE
:实例所在的可用区PROJECT_ID
:实例所属的项目
示例地区 dhcp.lease
文件:
lease { # What interface we are using for the network interface "eth0"; fixed-address 10.128.0.9; option subnet-mask 255.255.255.255; option routers 10.128.0.1; # Lease timeout, older instances will have this value set to infinite. option dhcp-lease-time 3600; option dhcp-message-type 5; option domain-name-servers 169.254.169.254; option dhcp-server-identifier 169.254.169.254; option interface-mtu 1460; # Search path options that are copied into the resolv.conf option domain-search "ZONE.c.PROJECT_ID.internal.", "c.PROJECT_ID.internal.", "google.internal."; option ntp-servers 169.254.169.254; option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1; option host-name "INSTANCE_NAME.ZONE.c.PROJECT_ID.internal"; option domain-name "ZONE.c.PROJECT_ID.internal"; renew 4 2017/11/16 02:15:52; rebind 4 2017/11/16 02:43:59; expire 4 2017/11/16 02:51:29; }
替换以下内容:
INSTANCE_NAME
:实例的名称ZONE
:实例所在的可用区PROJECT_ID
:实例所属的项目
全局 DNS 配置
示例全局 resolv.conf
文件:
# Local domain name. Computed from your project name. domain c.PROJECT_ID.internal # Search list for hostname lookup. Starting with entries that represent # your project and ending with google.internal to facilitate metadata server requests. search c.PROJECT_ID.internal google.internal. # Address of the DNS server to resolve project specific, and global domain names. nameserver 169.254.169.254
将 PROJECT_ID
替换为实例所属的项目。
示例全局 dhcp.lease
文件:
lease { # What interface we are using for the network interface "eth0"; fixed-address 10.128.0.8; option subnet-mask 255.255.255.255; option routers 10.128.0.1; # Lease timeout, older instances will have this value set to infinite. option dhcp-lease-time 86400; option dhcp-message-type 5; option domain-name-servers 169.254.169.254; option dhcp-server-identifier 169.254.169.254; option interface-mtu 1460; # Search path options that are copied into the resolv.conf option domain-search "c.PROJECT_ID.internal.", "google.internal."; option ntp-servers 169.254.169.254; option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1; option host-name "INSTANCE_NAME.c.PROJECT_ID.internal"; option domain-name "c.PROJECT_ID.internal"; renew 4 2017/11/16 12:07:00; rebind 4 2017/11/16 22:44:53; expire 5 2017/11/17 01:44:53; }
替换以下内容:
INSTANCE_NAME
:实例的名称PROJECT_ID
:实例所属的项目
dhclient.conf
文件示例
某些操作系统(如 Debian 9)使用 dhclient.conf
文件,而不是 resolv.conf
文件。
示例 /etc/dhcp/dhclient.conf
文件:
# Configuration file for /sbin/dhclient.
#
...
append domain-search "mydomain.com";
prepend domain-name-servers 172.16.1.1;
在此示例中,mydomain.com
是新的搜索网域,172.16.1.1
是您的 DNS 服务器的 IP 地址。
后续步骤
- 如需了解 Trusted Cloud VPC 网络,请参阅 VPC 概览。
- 如需了解如何创建和修改 VPC 网络,请参阅使用 VPC。
- 迁移组织和项目以使用可用区级 DNS 而不是全局 DNS。