排查 Looker (Google Cloud Core) 网络问题

您可以诊断和解决 Looker (Google Cloud Core) 实例在公共、专用和混合网络配置中常见的入站和出站连接问题。排查自定义网域、Private Service Connect、专用服务访问通道和受控出站流量方面的问题,有助于您恢复用户对实例的访问权限,并保持与身份提供方、外部服务和数据库后端的连接。

自定义域名验证失败,并显示代码 9 错误

为使用公共连接的 Looker (Google Cloud Core) 实例配置自定义网域时,域名验证可能会失败并显示 code: 9 错误。

表现

当您在 Looker (Google Cloud Core) 实例的自定义网域标签页上点击验证网域时,验证失败并显示类似于以下内容的错误消息:

DNS record is not created or not the same as public IP address (code: 9)

自定义网域状态也保持为未验证或显示为不可用。

原因

虽然出错提示表明 DNS A 记录缺失或不正确,但此错误通常是由于以下某种原因造成的:

  • 限制性 CAA 记录:您网域的 DNS 配置包含证书授权机构授权 (CAA) 记录,这些记录未授权 Google 的证书授权机构 (CA) 颁发 SSL/TLS 证书。由于 Looker (Google Cloud Core) 为公开实例使用 Google 管理的证书,因此证书配置失败。
  • 第三方 CDN 或代理:具有公共连接的 Looker (Google Cloud Core) 实例仅使用负载均衡器 (LB) 授权来获取 Google 代管的证书。负载均衡器授权要求自定义网域的 DNS A 记录直接解析为 Looker (Google Cloud Core) 入口公共 IP 地址。如果您通过第三方内容分发网络 (CDN)、Web 应用防火墙 (WAF) 或反向代理(例如 Akamai 或 Cloudflare)路由流量,则自动 LB 授权会失败。

解决方法

根据失败的原因,使用以下方法解决问题:

在 CAA 记录中授权 Google 证书授权机构

如果您的网域使用 CAA 记录,请验证并更新 DNS 记录,以允许 Google 的证书提供商:

  1. 使用 DNS 查找工具(例如 dig)检查网域的现有 CAA 记录:

    dig CAA DOMAIN_NAME +short
    

    将 DOMAIN_NAME 替换为您的自定义域名(例如 example.com 或 looker.example.com)。

  2. 添加 CAA 记录以同时授权 pki.goog 和 letsencrypt.org:

    DOMAIN_NAME. IN CAA 0 issue "pki.goog"
    DOMAIN_NAME. IN CAA 0 issue "letsencrypt.org"
    

    同时允许这两个 CA 可确保可靠的自动配置和续订。

  3. 更新 CAA 记录后,请等待 DNS 传播,然后在 Google Cloud 控制台中再次点击验证网域。

将 Private Service Connect 用于第三方 CDN 和代理

第三方 CDN 和反向代理无法直接放置在公共 Looker (Google Cloud Core) 实例的前面,因为自动负载均衡器授权需要直接将 DNS 解析为实例的公共 IP 地址。

如需通过第三方 CDN 或 WAF 路由入站流量,请使用 Private Service Connect 架构部署 Looker (Google Cloud Core),而不是使用公共连接:

  1. 部署已启用 Private Service Connect 的 Looker (Google Cloud Core) 实例。
  2. 在 VPC 网络中配置具有 Private Service Connect 后端的外部应用负载均衡器。
  3. 预配您自己的自行管理的 SSL 证书或 Google 管理的 SSL 证书,并将其附加到外部应用负载均衡器。此架构可让您控制 TLS 终结,并允许您通过 CDN 或 WAF 路由流量。

在受控出站流量的情况下,OpenID Connect 身份验证失败

在配置了 Private Service Connect 且启用了受控出站流量的 Looker (Google Cloud Core) 实例上设置 OpenID Connect 身份验证时,身份验证可能会失败。

表现

如果身份验证失败,您可能会遇到以下任一症状:

  • Looker /openidconnect 端点在浏览器中挂起约 60 秒,然后显示错误或超时并显示 504 Upstream Request Timeout 或 504 Gateway Timeout 错误。
  • 您的身份提供方显示一条出错提示,指明重定向 URI 不匹配,例如:

    AADSTS50011: The redirect URI specified in the request does not match the
    redirect URIs configured for the application
    

    此出错提示具有误导性,因为您在身份提供方中配置的重定向 URI 可能正确无误。当 Looker (Google Cloud Core) 在后端交换期间无法联系身份提供商的令牌端点时,会发生实际故障。

原因

受控出站流量的自动预配工作流有时无法在 Looker (Google Cloud Core) 租户项目中创建必要的 Secure Web Proxy 网络路由 (looker-swp-route)。

如果缺少此路由,Looker (Google Cloud Core) 从后端向身份提供商的令牌端点发出的请求会超时,因为实例无法通过安全 Web 代理将出站流量路由到公共互联网。

解决方法

如需解决此问题,请按以下步骤重置受控出站流量配置,以强制系统重新创建缺失的网络路由:

  1. 在 Google Cloud 控制台中,前往 Looker 页面:

    前往 Looker

  2. 点击您要更新的实例的名称。

  3. 点击修改。

  4. 展开连接部分,然后前往配置出站连接部分。

  5. 记录全局 FQDN 部分中列出的所有现有完全限定域名 (FQDN)(例如身份提供方的端点)。

  6. 删除全局 FQDN 部分中列出的所有 FQDN。

  7. 清除支持 Looker 连接到外部服务复选框,以停用受控出站流量。

  8. 点击保存。

  9. 等待实例更新完成,并等待配置更改清除。

  10. 再次点击修改。

  11. 展开连接部分,然后选中支持 Looker 连接到外部服务复选框。

  12. 在全局 FQDN 部分中,重新添加身份提供方和任何其他外部服务的必需 FQDN。

  13. 点击保存。

重置受控出站流量会触发自动预配流程,以重新创建缺失的 looker-swp-route 网络路由。创建路由后,即可完成向身份提供方发出的出站后端请求。

504 上游请求超时错误

在 Looker (Google Cloud Core) 实例上进行 API 调用、运行长时间运行的查询或使用外部服务进行身份验证时,请求可能会失败并显示 HTTP 504 超时错误。

表现

在以下任一情况下,您可能会收到 504 Upstream Request Timeout 或 504 Gateway Timeout 错误:

  • 入站 API 调用或查询:在由负载均衡器代理的实例上,对 Looker 端点(例如 /result_format)的 API 调用或 Looker 界面中的长时间运行的查询会在大约 30 秒后失败,并显示 504 错误。
  • 出站身份验证或外部服务连接:从身份提供方的登录页面返回后,或者在启用了受控出站流量的实例上连接到外部服务时,您会在浏览器中收到 504 错误。

原因

504 超时错误通常是由于以下某种原因造成的:

  • 入站请求的负载均衡器后端服务超时时间:当通过 Cloud Load Balancing 负载均衡器访问 Looker(Google Cloud 核心)实例时,负载均衡器的后端服务具有默认的后端服务超时时间(30 秒)。如果数据库查询执行时间和 Looker 载荷呈现时间总和超过此超时限制,负载均衡器会关闭连接并返回 HTTP 504 错误。
  • 受控出站流量的受限出站网域:Looker (Google Cloud Core) 实例无法通过受控出站流量访问外部网域。与缺少路由错误不同,出站请求期间的 504 错误通常意味着网络路径存在,但全局 FQDN 许可名单中缺少必需的网域,导致该网域被屏蔽,或者请求在网关处超时。

解决方法

根据错误的原因,完成以下部分中的步骤来解决问题。

解决 API 调用或查询的负载均衡器超时问题

如需解决由负载均衡器后端服务超时导致的 504 错误,请使用以下一种或两种方法:

  • 增加负载均衡器后端服务超时时间:

    1. 在 Google Cloud 控制台中,前往负载均衡页面:

      转到“负载均衡”

    2. 点击后端,然后点击与 Looker (Google Cloud Core) 实例关联的后端服务的名称。

    3. 点击修改。

    4. 在超时字段中,增加超时值,例如从 30 秒增加到 300 秒,以适应运行时间最长的查询和 API 请求。

    5. 点击保存。

  • 使用异步 API 工作流:如果您调用 Looker API 来提取查询数据,但无法修改负载均衡器超时时间,请使用异步端点而不是同步请求。调用 create_query_task 以异步启动查询,然后在查询完成后轮询 query_task_results 以检索结果。

解决受控出站流量超时问题

如需解决在 Looker (Google Cloud Core) 无法连接到已启用受控出站流量的外部服务或身份提供方时出现的 504 错误,请按以下步骤操作:

  1. 验证所需的 FQDN:在 Google Cloud 控制台中,验证外部服务或身份提供方所需的所有网域是否已添加到全局 FQDN 列表中。OIDC 身份验证流程通常需要多个端点(例如授权端点、令牌端点和用户信息端点),这些端点可能使用不同的网域。
  2. 捕获网络跟踪记录:如果错误仍然存在,请在重现问题时捕获浏览器网络跟踪记录(HAR 文件)。在轨迹中搜索 504 状态代码或失败的 HTTP 请求,以确定在流程期间联系过但未包含在全局 FQDN 列表中的任何网域。
  3. 重置配置:如果所需的 FQDN 存在,但请求仍然超时,请按照 OpenID Connect 身份验证失败的问题解决步骤重置受控的出站流量配置。

HttpClient:ConnectTimeoutError 执行已过期

在 Looker 管理控制台中测试 OpenID Connect 连接或其他外部网络连接时,连接测试可能会因超时错误而失败。

表现

在 Looker 管理控制台中运行连接测试时(例如在 OpenID Connect 身份验证页面上),Looker 会返回以下错误:

HttpClient:ConnectTimeoutError execution expired

原因

此错误表示 Looker (Google Cloud Core) 实例缺少与外部服务或身份提供方通信所需的必要网络路径。如果满足以下任一条件,通常会发生此问题:

  • 缺少路由传播:Cloud Router 正在使用默认设置,并且未将 VPC 网络路由(例如自定义通告路由)传播到 Looker (Google Cloud Core)实例。
  • 缺少互联网 NEG:您的 VPC 网络中未配置互联网网络端点组 (NEG),无法将流量路由到外部服务。

解决方法

如需解决此问题,请按以下步骤操作:

  1. 配置 Cloud Router 路由传播:通过设置自定义通告路由,验证 Cloud Router 是否已配置为将必要的 VPC 网络路由传播到 Looker(Google Cloud 核心)实例。
  2. 配置互联网 NEG:在 VPC 网络中设置互联网 NEG,以允许 Looker (Google Cloud Core) 实例将出站流量路由到外部身份提供方或服务。
  3. 验证专用服务访问通道:对于使用专用服务访问通道的实例,请确保您的 VPC 网络已与 Google 服务正确对等互连。如需了解详情,请参阅使用专用服务访问通道访问外部服务。

南向 Private Service Connect 连接问题

对于使用 Private Service Connect 进行出站连接的 Looker (Google Cloud Core) 实例,即使端点状态为 Accepted,您也可能会遇到连接错误。

常见问题包括:

  • 主机名解析错误:如果 Looker (Google Cloud Core)在测试连接时显示 Unknown host 错误,请验证配置的主机名是否与专用网络中的 DNS 记录匹配,以及后端负载均衡器是否正常运行。
  • 连接超时:如果连接超时,请检查您的 VPC 防火墙规则,验证是否允许从 Private Service Connect NAT 子网到负载均衡器后端的入站流量。
  • “待处理”或“已关闭”状态:如果服务连接状态为 Pending 或 Closed,请检查使用方项目是否位于服务连接的许可名单中,以及是否已配置强制性 TCP 健康检查。
  • 更新失败并显示内部错误 13:如果您使用 Terraform 或 API 更新出站服务附件,但入站配置处于错误状态,则更新可能会失败并显示 Internal error 13。如需了解详情,请参阅更新出站服务连接时出现内部错误 13。

如需详细了解诊断工作流和决策树,请参阅排查出站 Private Service Connect 连接问题。

更新出站服务连接时出现内部错误 13

当您使用 Terraform 或 Looker (Google Cloud Core) API 在现有 Looker (Google Cloud Core) 实例上添加、更新或移除 Private Service Connect 出站(出站流量)服务附件时,更新可能会因内部错误而失败。

表现

您可能会观察到以下症状:

  • Terraform 或 API 更新失败,并显示类似于以下内容的错误:

    Error: Error waiting for Updating Instance: Error code 13, message: an internal error has occurred
    
  • 即使生产方 VPC 网络中的服务连接显示 Accepted 连接状态,Looker (Google Cloud Core) 实例也无法与目标服务建立连接。

原因

当实例的 Private Service Connect 入站配置 (allowed_vpcs) 在后端进入错误状态时,会发生此错误。

当您使用 Terraform 或 API 客户端更新出站服务附件 (psc_service_attachments) 时,请求载荷通常包含整个 psc_config 代码块,其中包含 allowed_vpcs 参数。Looker (Google Cloud Core) API 会尝试在更新期间验证入站配置。由于 allowed_vpcs 处于错误状态,验证失败,导致整个实例更新失败,并显示错误代码 13,从而阻止应用出站服务连接更改。

解决方法

如需绕过入站配置验证错误并应用出站服务连接更新,请完成以下解决方法:

  1. 在 Terraform 配置或 API 载荷中,暂时注释掉或移除 psc_config 块中的 allowed_vpcs 参数。
  2. 应用 Terraform 配置或重新提交 API 请求,以更新出站服务附件 (psc_service_attachments)。

    由于请求载荷省略了 allowed_vpcs,因此 API 会跳过对入站配置的验证,并应用出站服务附件更改。

  3. 部署出站服务附件并建立连接后,请恢复 Terraform 配置或 API 载荷中的 allowed_vpcs 参数。

  4. 重新应用 Terraform 配置。

专用服务访问通道路由和连接问题

对于使用专用服务访问通道的 Looker (Google Cloud Core) 实例,与外部服务的出站通信需要适当的路由传播和网络基础设施:

  • 路由传播:验证 Cloud Router 是否已配置为将 VPC 网络路由(例如自定义通告路由)传播到 Looker (Google Cloud Core)实例。
  • 互联网网络端点组:如果您的实例需要通过专用服务访问通道访问外部端点,请确保在 VPC 网络中配置互联网网络端点组 (NEG)。

如果缺少这些路由或端点组,则与外部端点的连接测试会失败并显示 HttpClient:ConnectTimeoutError execution expired 错误。

如需了解详情,请参阅使用专用服务访问通道访问外部服务。

诊断工具和日志

您可以使用以下工具和日志来帮助诊断网络问题:

  • Cloud Logging:在 Cloud Logging 中查看实例级日志,以识别连接失败和系统事件。如需了解详情,请参阅查看实例日志。
  • Looker 系统活动:如果您可以管理员身份登录,请查看系统活动中的用户活动信息中心。 此信息中心会显示最近的登录失败情况、使用的身份验证方法和出错提示。如需了解详情,请参阅用户活动信息中心。
  • VPC 流日志:检查 VPC 流日志,以确定 Looker (Google Cloud Core)的网络流量是否到达目标子网,或者是否被防火墙规则阻止。
  • Cloud Customer Care:如果您已完成问题排查步骤,但问题仍然存在,请与 Cloud Customer Care 联系以获取帮助。