配置分析状态

Connectivity Tests 配置分析在检查从指定来源到指定目的地的网络路径中每个 Google Cloud 资源的配置时,会经历一系列测试状态。使用此参考文档来解释这些状态。

如需详细了解 Connectivity Tests(包括有关实时数据平面分析的详细信息),请参阅概览

测试状态

Connectivity Tests 配置分析按下列顺序提供以下测试状态的数据:

  • 初始状态
  • 配置检查状态
  • 转发状态
  • 转换状态
  • 特殊状态
  • 最终状态
  • 总体可达性结果

有一些状态在每条跟踪中都出现,而其他状态仅在测试特定 Google Cloud 资源的配置或执行特定任务时出现。

最终状态和总体可达性结果提供了最重要的测试输出。

此外,测试输出可以包含与一种或多种状态相关联的 Google Cloud 资源的元数据;例如有关虚拟机 (VM) 实例的名称和 IP 地址的信息。

配置分析如何评估可达性

配置分析通过验证网络路径中的 Google Cloud 资源配置来模拟测试数据包。例如,没有后端或者不存在网络路由的 Cloud Load Balancing 转发规则是无效网络配置。

配置检查状态期间,Connectivity Tests 会收集有关网络路由的信息,例如用户配置的路由、基于 BGP 通告的动态路由或基于政策的路由。然后,配置分析会根据适用性和顺序选择网络路由。

对于配置检查状态,verified 表示 Connectivity Tests 确认所测试的 Google Cloud 资源的配置有效。该配置允许模拟测试数据包继续通过被测试的网络路径。

对于入站和出站防火墙规则,verified 表示配置分析会确认防火墙规则有效。防火墙规则允许模拟测试数据包通过。

如果 Connectivity Tests 确定配置无效,则该数据包的最终状态为 Drop

总体可达性结果

配置分析提供了可达性状态的总体摘要,也称为结果。结果可以具有四个值:ReachableUnreachableAmbiguousUndetermined

值表

下表描述了每种类型的总体可达性结果的值。

总体可达性结果 说明
Reachable 可能有两种情形。在这两种情况下,Connectivity Tests 均未发现任何配置问题。因此,这两种情况都被认为是 Reachable
  • 在第一种情况下,来源数据包预计将到达其目的地。一条或多条跟踪记录的最终状态是 Deliver
  • 在第二种方案中,根据用户拥有权限的配置,分析已完成一部分。一条或多条跟踪记录的最终状态是 Forward
Unreachable 来源数据包有望在到达目的地之前被丢弃。所有跟踪记录的最终状态为 Drop
Ambiguous

如果来源端点和目标端点不能唯一地标识网络中的测试位置,并且总体可达性结果包含混合了 ReachableUnreachable 状态的多个跟踪记录,则将返回此结果。

在这种情况下,多个跟踪记录中的最终状态将返回不同的最终状态。Ambiguous 结果不适用于仅包含一个跟踪记录的测试。

Undetermined

无法确定可达性。一个跟踪记录的最终状态为 ForwardAbort。对于多条跟踪记录,最终状态是 ForwardAbort 的组合。

由于以下原因之一,无法确定从来源到目的地的可达性:

  • 由于权限错误,分析被取消。用户对该测试中列出的项目没有读取权限。
  • 由于内部错误,分析被取消。

多条跟踪记录

每个配置分析都可以包含多条跟踪记录,并且这些跟踪记录的最终状态可能不相同。例如,如果为负载平衡器配置了 n 后端虚拟机实例,则发到 Google Cloud 负载平衡器 VIP 的数据包可能具有 n 跟踪记录。这些 n 跟踪记录可能没有相同的最终状态。

由于分析可以生成多个可能的跟踪记录,因此下述任一条件为 true:

  • 如果只有一个跟踪记录结果,则总体可达性结果与跟踪的最终状态相同。
  • 如果有多个跟踪记录结果,系统将根据所有跟踪记录中包含的最终状态的分布来计算总体可达性结果。

结果元数据

除了跟踪记录的总体可达性结果之外,每个测试结果还包含以下元数据:

  • 测试状态得到验证的时间
  • 测试失败或取消的错误详细信息
  • 每个跟踪记录的跟踪详细信息

测试失败或取消的错误详细信息以代码和消息的形式显示在总体可达性结果中。例如,最终状态为 Abort 的测试可能会显示错误消息,例如 Failed to pull initial config. An internal error occurred.

初始状态

初始状态期间,配置分析从网络端点开始进行模拟。

消息 说明
START_FROM_INSTANCE 该数据包源自 Compute Engine 实例。Connectivity Tests 已填充 InstanceInfo 元数据。
START_FROM_INTERNET 该数据包源自互联网。Connectivity Tests 已填充 EndpointInfo 元数据。
START_FROM_PRIVATE_NETWORK 该数据包源自具有内部来源 IP 地址的 VPC 网络或本地网络。如果来源是用户可见的 VPC 网络,则 Connectivity Tests 将使用网络详细信息填充 NetworkInfo 元数据。
START_FROM_CLOUD_FUNCTION 该数据包源自 Cloud Run 函数。Connectivity Tests 已填充 CloudFunctionInfo 元数据。
START_FROM_CLOUD_RUN_REVISION 该数据包源自 Cloud Run 服务的修订版本。 Connectivity Tests 已填充 CloudRunRevisionInfo 元数据。
START_FROM_APP_ENGINE_VERSION 该数据包源自某个版本的 App Engine 标准环境服务。 Connectivity Tests 已填充 AppEngineVersionInfo 元数据。

最终状态

有四种最终状态:DropAbortForwardDeliver。以下每一个部分都有一个表,其中包含每个状态的消息和说明。

Drop

Connectivity Tests 丢弃了模拟的测试数据包,因为测试目的地由于以下原因而无法到达。

消息 说明
UNKNOWN_EXTERNAL_ADDRESS 目标外部地址无法解析为已知目标。
FOREIGN_IP_DISALLOWED 如果启用了 ip_forward,则虚拟机实例只能发送或接收具有外部 IP 地址的数据包。换句话说,外部 IP 地址未通过仿冒检查
FIREWALL_RULE

因为防火墙规则而被丢弃,除非因为连接跟踪之故获得允许。

Connectivity Tests 可能会拒绝测试数据包,因为该数据包与阻止防火墙规则匹配。但是,由于防火墙规则的连接跟踪,实际的数据层面可能允许数据包通过。无论防火墙规则如何,连接跟踪都允许现有连接的数据包返回。

NO_ROUTE 因为没有路由而被丢弃。
ROUTE_BLACKHOLE 因为匹配路由的下一个跃点不存在而被丢弃。
ROUTE_WRONG_NETWORK 数据包已发送到错误(意外的)网络,如检测无效或不一致的配置中所示。
PRIVATE_TRAFFIC_TO_INTERNET 具有内部目标地址的数据包已发送到互联网网关。
PRIVATE_GOOGLE_ACCESS_DISALLOWED 仅具有内部 IP 地址的虚拟机实例尝试访问 Google API 或 Google 服务,但未启用专用 Google 访问通道。
NO_EXTERNAL_ADDRESS 仅具有内部 IP 地址的虚拟机实例尝试了通过下一个跃点是默认互联网网关的路由来访问外部主机。在子网中未启用 Cloud NAT 或没有使用其他类型的下一个跃点(例如代理虚拟机)的其他默认路由时,会出现这种情况。
UNKNOWN_INTERNAL_ADDRESS 目标内部地址无法解析为已知目标。
FORWARDING_RULE_MISMATCH 转发规则的协议和端口与数据包标头不匹配,或者数据包未源自或未定向到区域负载平衡器所在的区域。
FORWARDING_RULE_NO_INSTANCES 转发规则未配置后端。
FIREWALL_BLOCKING_LOAD_BALANCER_BACKEND_HEALTH_CHECK

防火墙规则阻止了对后端的健康检查探测,并导致后端无法用于来自负载均衡器的流量。

在测试 Cloud Load Balancing 的序列时,配置分析会验证现有防火墙规则是否已配置为允许将健康检查探测数据包发送到 Cloud Load Balancing 后端。此配置检查结果为 healthCheckFirewallState。如需了解详情,请参阅健康检查防火墙规则

INSTANCE_NOT_RUNNING 从非运行状态的虚拟机实例发送或发送给该实例的数据包。
TRAFFIC_TYPE_BLOCKED 流量类型被阻止,用户无法配置防火墙规则来启用它。如需了解详情,请参阅始终禁止的流量
GKE_MASTER_UNAUTHORIZED_ACCESS 未授权访问 Google Kubernetes Engine 控制平面端点。如需了解详情,请参阅访问集群端点
DROPPED_INSIDE_GKE_SERVICE 数据包被丢弃在 Google Kubernetes Engine 服务中。
CLOUD_SQL_INSTANCE_UNAUTHORIZED_ACCESS 未经授权,无法访问 Cloud SQL 实例端点。如需了解详情,请参阅使用授权网络进行授权
DROPPED_INSIDE_CLOUD_SQL_SERVICE 数据包被丢弃在 Cloud SQL 服务中。
GOOGLE_MANAGED_SERVICE_NO_PEERING 由于源网络与 Google 管理的服务网络之间没有对等互连,数据包被丢弃。
CLOUD_SQL_INSTANCE_NO_IP_ADDRESS 由于 Cloud SQL 实例既没有专用 IP 地址也没有公共 IP 地址,数据包被丢弃。
PSC_CONNECTION_NOT_ACCEPTED 由于与使用 Private Service Connect 的已发布服务的连接未被接受,数据包被丢弃。
CLOUD_FUNCTION_NOT_ACTIVE 由于 Cloud Run 函数未启用,数据包被丢弃。
VPC_CONNECTOR_NOT_SET 数据包被丢弃,因为 App Engine 标准环境服务、Cloud Run 函数或 Cloud Run 修订版本没有配置无服务器 VPC 访问通道连接器
VPC_CONNECTOR_NOT_RUNNING 由于无服务器 VPC 访问通道连接器未在运行,数据包被丢弃。
CLOUD_RUN_REVISION_NOT_READY 由于 Cloud Run 修订版本尚未准备就绪且无法处理流量,数据包被丢弃。

取消

由于缺少基本信息(例如缺少网络配置的访问权限),配置分析已停止。

当 Connectivity Tests 没有正确的权限从服务项目的宿主项目中获取配置时,通常会产生此状态,如下表所示。

消息 说明
UNKNOWN_NETWORK

由于未知网络而被取消。此分析无法继续,因为在共享 VPC 网络中,运行测试的用户无权访问宿主项目的网络配置,包括防火墙规则和路由。

运行 Connectivity Tests 测试要求运行测试的用户可以读取宿主项目中的资源的配置(例如路由)。发生这种情况是因为网络资源是在宿主项目中分配的,而实际资源却存在于服务项目中。

UNKNOWN_IP

分析被取消,因为分析所需的 IP 地址未知。这是由于用户输入错误,或配置分析无法根据提供的输入参数确定有效的端点。

在共享 VPC 网络中,运行测试的用户无权访问宿主项目的网络配置。根据服务项目中的 IP 地址进行测试需要此访问权限。

UNKNOWN_PROJECT 由于无法从 Connectivity Tests 测试的输入中获得任何项目信息,因此分析被取消。这是由于用户输入错误或基于提供的输入参数,分析无法确定有效的项目。
PERMISSION_DENIED 分析被取消,因为用户缺少访问运行测试所需的全部或部分网络配置的权限。
NO_SOURCE_LOCATION 由于无法从测试输入中获得有效的来源端点,因此分析被取消。这是由于用户输入错误或基于提供的输入参数,分析无法确定有效的来源端点。
INVALID_ARGUMENT

由于测试输入中指定的来源和/或目标端点无效,因此分析被取消。该消息的可能原因包括:

  • IP 地址格式错误
  • 虚拟机实例或网络 URI 不存在
  • 不在指定网络 URI 范围内的 IP 地址
  • 在指定网络中没有网络接口的虚拟机实例
NO_EXTERNAL_IP 由于流量是从公共 IP 地址发送到不具有外部 IP 地址的虚拟机实例,因此分析被取消。
UNINTENDED_DESTINATION 分析被取消,因为没有任何一项跟踪记录能够匹配测试输入中指定的目标信息。
TRACE_TOO_LONG 由于跟踪记录中的步骤数超过了特定限制,分析被取消。此问题可能是由路由循环引起的。
INTERNAL_ERROR 因内部服务器错误而中止。
SOURCE_ENDPOINT_NOT_FOUND 因找不到来源端点而中止。
MISMATCHED_SOURCE_NETWORK 因来源网络与来源端点不匹配而中止。
DESTINATION_ENDPOINT_NOT_FOUND 因找不到目标端点而中止。
MISMATCHED_DESTINATION_NETWORK 因目标网络与目标端点不匹配而中止。

转发

分析在特定端点处停止,无法继续进行:

  • 根据用户拥有权限的配置,分析已部分完成。
  • 测试数据包已转发到未知配置的网络。
  • 尚未根据已知配置丢弃测试目标,并且已将测试数据包转发到 Connectivity Tests 无法查看的网络。
消息 转发目的地
PEERING_VPC 到对等 VPC 网络
VPN_GATEWAY 到 Cloud VPN 网关
INTERCONNECT 到 Cloud Interconnect 连接
GKE_MASTER 到 GKE 控制平面
IMPORTED_CUSTOM_ROUTE_NEXT_HOP 从对等 VPC 网络导入的自定义路由的下一个跃点。
CLOUD_SQL_INSTANCE 到 Cloud SQL 实例

递送

分析能够到达目的地并递送模拟测试数据包。

最终状态 Deliver 不能保证流量可以通过数据层面。该分析的目的是验证可能导致流量丢弃的配置问题。

消息 目的地
INSTANCE Compute Engine 虚拟机实例
INTERNET 互联网
GOOGLE_API Google API
GKE_MASTER GKE 控制平面
CLOUD_SQL_INSTANCE Cloud SQL 实例
PSC_GOOGLE_API 所有使用 Private Service Connect 的 Google API 和服务
PSC_VPC_SC 使用 Private Service Connect 的 VPC Service Controls
PSC_PUBLISHED_SERVICE 使用 Private Service Connect 的已发布服务

元数据

配置分析显示最终状态的以下元数据。

元数据名称 说明
AbortInfo 最终状态为 Abort 的原因以及导致该状态的资源 URI。
DropInfo 最终状态为 Drop 的原因以及导致该状态的资源 URI。
ForwardInfo 测试数据包最终转发到的目标类型和目标资源 URI(最终状态为 Forward)。

其他状态

在测试数据包到达某个最终状态之前,它会经历以下中间状态:配置检查状态、转发状态、转换状态和特殊状态。

配置检查状态

在配置检查状态期间,Connectivity Tests 会检查模拟网络路径中 Google Cloud 资源的配置,验证资源配置是否有效,并验证配置是否允许模拟测试数据包继续通过网络路径。

如果需要,配置分析会执行仿冒检查。

消息 说明
APPLY_INGRESS_FIREWALL_RULE 已验证的入站流量防火墙规则。
APPLY_EGRESS_FIREWALL_RULE 已验证的出站流量防火墙规则。
APPLY_ROUTE 验证路由。
APPLY_FORWARDING_RULE 匹配的转发规则。
SPOOFING_APPROVED 数据包是在外部 IP 地址下发送或接收的,但被允许。如需了解详情,请参阅仿冒检查

转发状态

在转发状态期间,Connectivity Tests 会模拟一个数据包,该数据包到达测试路径中的中间 Google Cloud 资源(例如,数据包到达 Cloud VPN 网关或 Google Cloud 负载平衡器)。

消息 说明
ARRIVE_AT_INSTANCE 已到达 Compute Engine 虚拟机实例。
ARRIVE_AT_INTERNAL_LOAD_BALANCER 已到达使用专用 IP 地址作为 VIP 的 Google Cloud 负载平衡器。
ARRIVE_AT_EXTERNAL_LOAD_BALANCER 已到达 Google Cloud 负载平衡器的公共 IP 地址。
ARRIVE_AT_VPN_GATEWAY 已到达 Cloud VPN 网关。
ARRIVE_AT_VPN_TUNNEL 已到达 Cloud VPN 隧道。
ARRIVE_AT_VPC_CONNECTOR 已到达无服务器 VPC 访问通道连接器

转换状态

在转换状态期间,Connectivity Tests 会验证数据包发生更改的模拟配置(例如,如果 Cloud NAT 转换数据包标头,或 Google Cloud 负载平衡代理终止并重新启动与虚拟机实例的入站 TCP 会话时)。

消息 说明
NAT 数据包标头已转换。
PROXY_CONNECTION 原始连接已终止,并启动了新的代理连接。

特殊状态

在这种状态下,测试查看者无权查看一个或多个 Google Cloud 资源。如需了解详情,请参阅测试权限

元数据名称 说明
VIEWER_PERMISSION_MISSING 测试结果的查看者无权在此步骤中查看 Google Cloud 资源的配置。

资源元数据

Connectivity Tests 显示其检查的 Google Cloud 资源配置的以下元数据。

元数据名称 说明
EndpointInfo 用于测试的端点。Connectivity Tests 会从来源和目标端点获取 EndpointInfo,并使用数据平面的模型来验证信息。
FirewallInfo 与防火墙规则关联的元数据。
ForwardingRuleInfo 与 VPC 转发规则关联的元数据。
InstanceInfo 与 Compute Engine 虚拟机实例关联的元数据。
LoadBalancerInfo 与 Google Cloud 负载平衡器关联的元数据。
NetworkInfo 与 VPC 网络关联的元数据。
RouteInfo 与 VPC 网络路由关联的元数据。
AppEngineVersionInfo 与 App Engine 标准环境服务的版本关联的元数据。
CloudRunRevisionInfo 与 Cloud Run 修订版本关联的元数据。
CloudFunctionInfo 与 Cloud Run 函数关联的元数据。
VpcConnectorInfo 与无服务器 VPC 访问通道连接器关联的元数据。

后续步骤