排查 Cloud DNS 问题

本文档提供有关排查 Google Distributed Cloud (GDC) 网闸隔离配置中的 Cloud DNS 问题的指南。本文档介绍了在对 DNS 配置执行管理操作时可能会遇到的潜在错误和问题,并提供了有关调试 DNS 解析问题的提示和建议。本文档的目标受众群体是负责管理项目内 DNS 记录的平台管理员和应用运维人员。

排查 Cloud DNS 管理操作方面的问题

本部分针对在对 Cloud DNS 区域和记录集执行创建、读取、更新和删除 (CRUD) 操作时遇到的常见问题提供了问题排查信息。

基本问题排查

  • 确保您拥有正确的 IAM 角色,如准备 IAM 权限中所述。
  • 如果使用 gdcloud,您可以通过运行 gdcloud auth login 来刷新身份验证令牌。

资源命名和验证 (RFC 1123)

问题:创建或更新失败,并显示无效实参或验证错误。

详细信息

  • 资源名称:DNS 区域和记录集的名称必须符合 RFC
    1. 只能包含小写字母数字字符或 -,并且必须以字母数字字符开头和结尾。
  • DNS 名称:域名和完全限定域名 (FQDN) 的值必须是有效的域名。
  • 枚举值:诸如可见性(PUBLICPRIVATE)和记录类型(例如 ACNAME)之类的值区分大小写,并且必须与确切的预期字符串匹配。

无法删除非空区域

问题:无法删除托管地区;操作被拒绝。

详细信息:在删除托管式 DNS 可用区之前,必须先清空其中的资源记录集。您必须先删除地区中的所有记录。

命名和域名冲突

问题:无法创建资源,并显示错误消息,指出名称或网域已被使用。

详细信息

  • Kubernetes 资源名称:对象的名称(例如 metadata.name 中的名称)在特定项目命名空间中必须是唯一的。
  • DNS 名称 (FQDN):实际域名(例如,区域或记录的 dnsName)在给定的可见性(公开或私密)范围内必须是唯一的。您无法在同一可见性层级中创建两个具有相同网域名的可用区或两条具有相同网域名的记录。

排查 DNS 解析问题

本部分可帮助平台管理员和应用运维人员在访问 Google Distributed Cloud 上托管的服务时排查 DNS 解析问题。

等待传播并清除 DNS 缓存

创建或更新 DNS 记录后,更改可能不会立即显示。这种延迟通常是由以下原因造成的:

  1. 协调时间:系统需要时间来处理请求并更新 DNS 服务器配置。这通常需要几分钟的时间。
  2. DNS 传播延迟(缓存):DNS 解析器和客户端会缓存记录,以加快查找速度。在生存时间 (TTL) 期限过去之前,客户端可能会继续使用旧记录。

建议:

  • 等待:为协调和缓存过期留出足够的时间。
  • 刷新缓存:清除本地 DNS 缓存,强制进行新的查找。

验证本地解析器配置

确保您的客户端使用的是正确的 DNS 服务器。如果您不知道正确的 IP 地址,请与您的基础设施运营 (IO) 团队联系,以查找正确的 DNS 服务器 IP。

  • Linux/macOS:检查 /etc/resolv.conf 的内容。
  • Windows:运行 ipconfig /all 并检查列出的 DNS 服务器。

使用标准工具测试分辨率

使用标准命令行工具测试解析并确定发生故障的位置。

  • 基本查找

    dig <domain_name>
    

    nslookup <domain_name>
    
  • 查询特定 DNS 服务器:如果您知道公共 ManagedDNS 服务器的 IP,可以直接查询该服务器以绕过本地解析器:

    dig @<public_dns_server_ip> <domain_name>
    
  • 查询公共域名服务器:为了排除本地解析器问题,请尝试查询 Google DNS 等公共解析器:

    dig @8.8.8.8 <domain_name>
    

分析 DNS 响应代码

使用 dignslookup 时,请检查响应中的状态代码:

  • NXDOMAIN:找不到相应域名。检查是否有拼写错误,或验证记录是否存在。
  • SERVFAIL:服务器未能处理查询。这通常表示服务器端存在问题或 DNS 服务器之间通信失败。
  • NOERROR:查询成功,但可能没有答案。验证所请求的记录类型(例如 A、CNAME)是否存在。
  • REFUSED:服务器拒绝回答查询,可能是由于政策或访问权限控制设置。

检查网络连接

确保流向 DNS 服务器的网络流量未被阻止。

  • DNS 使用端口 53 进行 UDP 和 TCP 通信。
  • 使用 nc (netcat) 测试连接:

    nc -zv <dns_server_ip> 53
    
  • 验证防火墙规则是否允许在端口 53 上传输流量。

清空 DNS 缓存

清空 DNS 缓存会从本地 DNS 缓存中移除所有条目。这会强制操作系统再次查询域名对应的 DNS 服务器,确保您获得的是最新记录,而不是过时的缓存记录。

  • Windowsipconfig /flushdns
    • 作用:清除 DNS 客户端服务维护的 DNS 解析器缓存。
  • macOSsudo killall -HUP mDNSResponder
    • 作用:向 mDNSResponder 进程发送挂断信号 (HUP),强制其重新加载并清除缓存。
  • Linux (systemd-resolved)sudo systemd-resolve --flush-cachessudo resolvectl flush-caches
    • 作用:告知 systemd-resolved 服务舍弃其内部 DNS 缓存。

使用 API 或 gdcloud 检查资源状态

如果您是租户或有权访问 GDC API,可以直接检查资源的状态:

  • 检查 DNS 区域

    kubectl describe manageddnszone <zone_name> -n <project_namespace>
    
  • 检查资源记录集

    kubectl describe resourcerecordset <record_name> -n <project_namespace>
    

    查找可能表明对账流程出现故障的条件和事件。

如果您有权访问 gdcloud 命令行,则可以使用 列出 DNS 记录列出 DNS 区域中所述的 describe 子命令。