排查无代理 Traffic Director 部署问题

本文档提供的信息可帮助您解决涉及使用 Traffic Director 部署无代理 gRPC 服务的配置问题。

gRPC 应用中的 RPC 失败问题排查

您可以通过以下两种常见方法进行 gRPC 应用中的远程过程调用 (RPC) 失败问题排查:

  1. 查看 RPC 失败时返回的状态。在大多数情况下,该状态包含足够的信息,ke 帮助您了解 RPC 失败的原因。gRPC 错误处理文档中解释了 gRPC 中的状态错误处理。
  2. 在 gRPC 运行时中启用日志记录功能。有时,您需要查看 gRPC 运行时日志,以了解可能不会传播回 RPC 返回状态的故障。例如,当 RPC 失败且其状态表示已超过截止期限,日志可以帮助您了解导致超过截止期限的底层故障。gRPC 的不同语言实现在 gRPC 运行时中启用日志记录的方法有所不同。

    • Java 中的 gRPC:gRPC 使用 java.util.logging 进行日志记录。将 io.grpc.level 设置为 FINE 级别,以在 gRPC 运行时中启用足够的详细日志记录。在 Java 中启用日志记录的典型方式是从文件加载日志记录配置,并使用命令行标志向 JVM 提供文件位置。例如:
    # Create a file called logging.properties with the following contents.
    handlers=java.util.logging.ConsoleHandler
    io.grpc.level=FINE
    io.grpc.xds.level=FINEST
    java.util.logging.ConsoleHandler.level=ALL
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    
    # Pass the location of the file to JVM via this command-line flag
    -Djava.util.logging.config.file=logging.properties
    

    如需启用特定于 xDS 模块的日志记录,请将 io.grpc.xds.level 设置为 FINE。如需查看更详细的日志记录,请将级别设置为 FINERFINEST

    GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info
    
    • 如需在 C++ 中启用 gRPC 的日志记录,请参阅此处的说明。如需启用特定于 xDS 模块的日志记录,请使用 GRPC_TRACE 环境变量(详见此处)为 xds_clientxds_resolvercds_lbeds_lbpriority_lbweighted_target_lblrs_lb 启用以下跟踪器。

根据 RPC 状态或运行时日志中的错误,您的问题可能属于以下某个类别。

无法连接到 Traffic Director

要排查连接问题,请尝试以下操作:

  • 检查引导文件中的 server_uri 值是否为 trafficdirector.googleapis.com:443
  • 确保环境变量 GRPC_XDS_BOOTSTRAP 已定义并指向引导文件。
  • 创建 gRPC 通道时,确保在 URI 中使用 xds 架构。
  • 确保您已授予创建计算实例和修改项目中的网络所需的 IAM 权限
  • 确保已为项目启用 Traffic Director API。在项目的 Google Cloud Console API 和服务下,查找是否有 Traffic Director API 错误。
  • 确认服务帐号具有正确的权限。在虚拟机或 Pod 中运行的 gRPC 应用使用 Compute Engine 虚拟机主机或 Google Kubernetes Engine 节点实例的服务帐号。
  • 确认 Compute Engine 虚拟机或 GKE 集群的 API 访问权限范围设置为允许 Compute Engine API 的完全访问权限。为此,请在创建虚拟机或集群时指定 --scopes=https://www.googleapis.com/auth/cloud-platform
  • 确认您可以通过虚拟机访问 trafficdirector.googleapis.com:443。如果存在访问问题,可能的原因包括防火墙阻止通过 TCP 端口 443 访问 trafficdirector.googleapis.com,或者 trafficdirector.googleapis.com 主机名存在 DNS 解析问题。

无法解析 URI 中指定的主机名

要排查主机名解析问题,请尝试以下操作:

  • 确保 gRPC 客户端应用已升级到 gRPC 1.30.0 或更高版本。
  • 确保 URI 中用于创建 gRPC 通道的端口与配置中使用的转发规则中的端口值匹配。如果未在 URI 中指定端口,则使用值 80 来匹配转发规则。
  • 确保 URI 中用于创建 gRPC 通道的主机名和端口与配置中使用的网址映射中的主机规则完全匹配。
  • 确保未在多个网址映射中配置同一主机规则。
  • 确保未使用通配符。包含 * 通配符的主机规则将被忽略。

RPC 因服务不可用而失败

要排查服务不可用时的 RPC 失败问题,请尝试以下操作:

  • Cloud Console 上检查 Traffic Director 的总体状态以及后端服务的状态。确保正确的网址映射引用后端服务。这位于关联的路由规则映射列。
  • 检查确认与后端服务关联的后端运行状况良好,如后端列所示。
  • 如果后端运行状况不佳,请点击相应的后端服务并确保配置了正确的运行状况检查。如果防火墙规则不正确或缺失,或者虚拟机和防火墙规则中指定的标记不匹配,运行状况检查通常会失败。如需了解详情,请参阅创建运行状况检查
  • 要使 gRPC 运行状况检查正常运行,gRPC 后端必须实现 gRPC 运行状况检查协议 {: class="external" target="github" track-type="article" track-name="gitHubLink" track-metadata-position="body" }.。如果未实现此协议,请改用 TCP 运行状况检查。请勿将 HTTP、HTTPS 或 HTTP/2 运行状况检查与 gRPC 服务搭配使用。
  • 使用实例组时,确保实例组中指定的已命名端口与运行状况检查中使用的端口相匹配。使用 NEG 时,确保 GKE 服务规范具有正确的 NEG 注释,并且将运行状况检查配置为使用 NEG 服务端口。
  • 检查确认端点协议配置为 GRPC
  • 点击关联的路由规则映射,并检查确认主机匹配规则中指定的后端服务正确。

后续步骤

如需了解常规 Traffic Director 问题排查信息,请参阅排查 Traffic Director 部署问题