Connectivity Tests 概览

Connectivity Tests 是一种诊断工具,可让您检查网络端点之间的连接。它会分析您的配置,在某些情况下还会在端点之间执行运行时验证。端点是指网络流量的来源或目的地,例如虚拟机、Google Kubernetes Engine (GKE) 集群、负载均衡器转发规则或互联网上的 IP 地址。

为了分析网络配置,Connectivity Tests 会通过 Virtual Private Cloud (VPC) 网络、Cloud VPN 隧道或 VLAN 连接模拟数据包的预期转发路径。Connectivity Tests 还可以模拟指向 VPC 网络中资源的预期入站转发路径。

对于某些连接场景,Connectivity Tests 还会执行运行时验证。这项功能通过数据层面发送数据包,以验证连接并提供延迟和数据包丢失的基准诊断信息。如果该功能支持路由,则您运行的每个测试都会包含动态验证结果。

Connectivity Tests 的 API 是 Network Management API。如需了解详情,请参阅 API 文档

为何使用 Connectivity Tests?

Connectivity Tests 可以帮助您排查以下网络连接问题:

  • 意外的配置不一致
  • 由于网络配置更改或迁移而导致配置作废
  • 各种网络服务和功能的配置错误

在测试由 Google 管理的服务时,Connectivity Tests 还可以帮助您确定您的 VPC 网络或 Google 拥有的用于服务资源的 VPC 网络是否存在问题。

Connectivity Tests 如何分析配置

分析网络配置时,Connectivity Tests 使用抽象状态机来建立 VPC 网络处理数据包的模型。Google Cloud 按照多个逻辑步骤处理数据包。

由于配置分析所支持的 VPC 网络服务和功能多种多样,遍历 VPC 网络配置的测试数据包可能会采用多种不同的可能路径。

下图展示了一个模型,用于说明配置分析如何模拟两个 Compute Engine 虚拟机 (VM) 实例(一个位于左侧,另一个位于右侧)之间的跟踪流量。

根据 Google Cloud 网络和资源配置,此流量可能会先通过 Cloud VPN 隧道、Google Cloud 负载平衡器或对等 VPC 网络,然后才到达目标虚拟机实例。

网络抽象状态机。
网络抽象状态机

在数据包递送或丢弃之前,不连续状态之间的有限步骤数量会建模为有限状态机。此有限状态机在任何时候都可以正好处于多个有限状态之一,并且可能有多个继承者状态。

例如,当 Connectivity Tests 根据路由优先级匹配多个路由时,Google Cloud 可以根据数据平面中未指定的哈希函数在多个路由中选择一个路由。

在上一个示例中,Connectivity Tests 跟踪记录会返回所有可能的路由,但无法确定 Google Cloud 用来返回路由的方法。这是因为该方法是 Google Cloud 的内部方法,随时可能更改。

Google 管理的服务

Google 管理的服务(例如 Cloud SQL 和 Google Kubernetes Engine (GKE))可为 Google 拥有和管理的项目以及 VPC 网络中的客户分配资源。客户无权访问这些资源。

Connectivity Tests 配置分析仍然可以运行测试,并提供由 Google 管理的服务的总体可达性结果,但不提供关于 Google 拥有的项目中的测试资源的详细信息。

下图显示了一个模型,该模型用于配置分析如何模拟从客户 VPC 网络中的虚拟机实例到 Google 拥有的 VPC 网络中的 Cloud SQL 实例的跟踪流量。在此示例中,网络通过 VPC 网络对等互连进行连接。

与两个虚拟机之间的标准测试类似,逻辑步骤包括检查相关出站防火墙规则以及匹配路由。运行测试时,Connectivity Tests 配置分析会提供有关这些步骤的详细信息。但是,对于分析 Google 拥有的 VPC 网络中的配置的最终逻辑步骤,分析仅提供总体可达性结果。Connectivity Tests 不会提供 Google 拥有的项目中资源的详细信息,因为您没有查看这些资源的权限。

如需了解详情,请参阅测试与 Google 管理的服务之间的连接中的测试示例。

由 Google 管理的服务的网络抽象状态机。
由 Google 管理的服务的网络抽象状态机

受支持的配置

Connectivity Tests 配置分析支持测试以下部分所述的网络配置。

流量

  • 虚拟机实例与互联网之间
  • 虚拟机实例与虚拟机实例之间
  • Google Cloud 与本地网络之间
  • 通过 Network Connectivity Center 连接的两个本地网络之间

VPC 网络功能

您可以测试使用以下功能的资源之间的连接性能:

Google Cloud 混合网络解决方案

支持以下混合网络解决方案:

Network Connectivity Center

支持 Network Connectivity Center

Cloud NAT

支持 Cloud NAT

Cloud Load Balancing

  • 支持以下 Google Cloud 负载平衡器的连接:外部 HTTP(S) 负载平衡器、网络负载平衡器、内部 HTTP(S) 负载平衡器、内部 TCP/UDP 负载平衡器、TCP 代理负载平衡器和 SSL 代理负载平衡器。
  • 支持与负载平衡器 IP 地址的连接。
  • 支持 Cloud Load Balancing 运行状况检查到后端的连接。后端可以是实例组或网络端点组 (NEG)。

对于不支持的 Cloud Load Balancing 功能,请参阅“不支持的配置”部分

Google Kubernetes Engine (GKE)

  • 支持与 GKE 节点和 GKE 控制层面之间的连接。
    • 在测试 GKE 控制层面的专用 IP 地址时,Connectivity Tests 配置分析会确定数据包是否可以传送到控制层面。这包括分析 Google 拥有的 VPC 网络中的配置。
    • 在测试 GKE 控制层面的公共 IP 地址时,Connectivity Tests 配置分析会确定是否可以将数据包发送到运行该控制层面的 Google 拥有的 VPC 网络。这不包括分析 Google 拥有的 VPC 网络中的配置。
  • 支持通过 Cloud Load Balancing 与 GKE 服务的连接。
  • 支持与 VPC 原生集群中的 GKE Pod 的连接。

对于不支持的 GKE 功能,请参阅“不支持的配置”部分

其他 Google Cloud 产品和服务

支持以下其他 Google Cloud 产品或服务:

  • 支持 Cloud SQL 实例。
    • 在测试 Cloud SQL 实例的专用 IP 地址时,配置分析会确定数据包是否可传送到实例。这包括分析 Google 拥有的 VPC 网络中的配置。
    • 在测试 Cloud SQL 实例的公共 IP 地址时,配置分析会确定是否可以将数据包发送到运行该实例所在的 Google 拥有的 VPC 网络。这不包括分析 Google 拥有的 VPC 网络中的配置。

不支持的配置

Connectivity Tests 配置分析不支持测试以下网络配置:

  • 跟踪与外部 HTTP(S) 负载平衡器 IP 地址的连接时,不会考虑或使用 Google Cloud Armor 政策。
  • GKE 网络政策。在跟踪与 GKE 集群中 IP 地址的连接时,Connectivity Tests 未纳入网络政策。
  • 不支持使用 Cloud Storage 存储分区的外部 HTTP(S) 负载平衡器。

Connectivity Tests 如何分析实时数据平面

动态验证功能通过从源端点向目标发送多个跟踪数据包来测试连接。动态验证结果会显示已发送的探测次数、已成功到达目的地的探测次数以及可达性状态。此状态取决于成功交付的探测次数,如下表所示。

状态 到达目标的探测次数
可访问 至少 95%
无法访问
可部分访问 大于 0 且小于 95%

除了显示成功传送了多少个数据包外,动态验证还显示中位数和第 95 个百分位的单向延迟信息。

动态验证与配置分析无关。动态验证会独立地评估连接状态。

如果您发现配置分析和动态验证结果之间存在明显差异,请参阅排查 Connectivity Tests 问题

受支持的配置

动态验证支持以下网络配置。

流量

  • 虚拟机实例与虚拟机实例之间
  • IP 协议:TCP、UDP

VPC 网络功能

您可以对使用以下功能的资源之间的连接进行动态验证:

不支持的配置

系统未明确列为支持的所有配置均不受支持。此外,连接被出站防护墙规则阻止的配置也不受支持。

对于任何给定的测试,如果未执行动态验证功能,上次数据包传输结果字段中会显示 N/A-

注意事项

在决定是否使用 Connectivity Tests 时,请评估以下注意事项。

Connectivity Tests 执行的配置分析完全基于 Google Cloud 资源的配置信息,并不代表 VPC 网络的数据平面的实际条件或状态。

虽然 Connectivity Tests 确实会获取一些动态配置信息,例如 Cloud VPN 隧道状态和 Cloud Router 上的动态路由,但它不会访问或维护 Google 内部生产基础架构和数据平面组件的运行状况。

Connectivity Tests 的 Packet could be delivered 状态不能保证流量可以通过数据平面。该测试的目的是验证可能导致流量舍弃的配置问题。

对于支持的路由,动态验证结果会通过测试传输数据包是否到达目标来补充配置分析结果。

Connectivity Tests 对 Google Cloud 之外的网络一无所知

外部网络的定义如下:

  • 数据中心或其他设施(您可以在其中操作硬件设备和软件应用)所在的本地网络。
  • 运行资源的其他云服务商。
  • 互联网上将流量发送到 VPC 网络的主机。

Connectivity Tests 不会执行防火墙连接跟踪

VPC 防火墙的连接跟踪功能存储有关新连接和已建立连接的信息,并根据这些信息启用或限制后续流量。

Connectivity Tests 配置分析不支持防火墙连接跟踪,因为防火墙连接表位于虚拟机实例的数据平面中,无法访问。但是,只要 Connectivity Tests 启动出站连接,配置分析就可以通过允许通常由入口防火墙规则拒绝的返回连接来模拟连接跟踪。

动态验证不支持测试防火墙连接跟踪。

Connectivity Tests 无法测试配置为修改转发行为的虚拟机实例

Connectivity Tests 无法测试已配置为在数据平面中充当路由器、防火墙、NAT 网关、VPN 等的虚拟机实例。这种类型的配置使得很难评估虚拟机实例上运行的环境。 此外,动态验证不支持这种测试场景。

Connectivity Tests 的测试结果产生时间可能会有所不同

获得 Connectivity Tests 结果可能需要 30 秒到最多 10 分钟。测试所花费的时间取决于 VPC 网络配置的大小以及您使用的 Google Cloud 资源数量。

下表显示了针对查询中的示例配置运行测试的所有用户的预期响应时间。此配置包含虚拟机实例、Cloud VPN 隧道和 Google Cloud 负载平衡器。

每个查询的响应时间
项目规模 Google Cloud 资源数量 响应延迟时间
小型项目 不到 50 来自所有用户的 95% 的查询需要 60 秒
中型项目 大于 50 但小于 5000 来自所有用户的 95% 的查询需要 120 秒
大型项目 大于 5000 来自所有用户的 95% 的查询需要 600 秒

动态验证不适用于持续监控

动态验证会执行网络连接的一次性验证,以用于诊断。如需持续监控连接和丢包情况,请使用性能信息中心

动态验证不会测试多个跟踪记录

如果路由不确定,则不支持执行动态验证。

可达性是什么?

如果网络配置(如防火墙和路由)允许流量从一个端点到达另一个端点,则资源可以从另一个端点访问。例如,如果网络配置应允许 VM1 将数据包发送到 VM2,则系统认为 VM2 可通过 VM1 访问

Connectivity Tests 可测量从特定来源到特定目的地的可达性。VM1 能够访问 VM2 并不一定意味着 VM3 可以访问 VM2。

Connectivity Tests 用于衡量单向可达性。VM1 可以打开与 VM2 的连接并不意味着 VM2 可以打开与 VM1 的连接。防火墙规则可能允许一个方向的流量,但不允许另一个方向的流量。

Connectivity Tests 可测量特定协议和目标端口的可达性。VM1 可以在 tcp:443 连接到 VM2,这并不意味着它可以在 tcp:80 上连接。

连接测试仅会测试可能会影响从来源到目标的数据包递送的 Google Cloud VPC 网络配置。它不会检查有效的服务器是否在目标位置运行,操作系统防火墙规则是否会阻止流量,或者安全软件是否阻止了携带病毒载荷的数据包。

可达性概念来自图论。从概念上讲,网络的整个可达性图包含所有端点作为节点,以及指示从源节点到目标节点的可达性的有向边缘。

可达性分析是一个较通用的术语,旨在描述可以用来确定网络可达性的分析正文。可达性分析中的一种用例是连接测试。在这种情况下,连接性是指网络连接的状态。

对于网络转发路径中的每个步骤,可达性分析都会针对底层网络配置进行测试并提供结果。例如,Connectivity Tests 会分析应用于模拟测试数据包的 Google Cloud 防火墙规则和路由。

Connectivity Tests 的工作方式

Connectivity Tests 包括两个主要组件:配置分析和动态验证。本部分会介绍这两种类型的分析的工作原理。

配置分析的工作原理

本部分介绍了 Connectivity Tests 及其组件的工作方式。

Connectivity Tests 会执行可达性分析,该测试根据理想配置模型评估测试路径中的 Google Cloud 资源。Connectivity Tests 可通过动态验证功能得到增强,该功能会发送数据包来验证数据层面的状态,并为受支持的配置提供基准信息。如需详细了解动态验证的工作原理,请参阅实时数据层面分析的工作原理

作为网络管理员,您可以控制可能会影响分析结果的很多配置,不过也有一些例外情况。例如,您无法控制托管由 Google 管理的服务(如 Cloud SQL 实例)的 VPC 网络。此外,由于权限限制,您可能无法控制会影响网络的分层防火墙政策规则。

运行 Connectivity Tests 时,您输入一组特定的参数并以网络跟踪记录或查询的形式接收格式化的结果。如果一项测试在网络中具有多个可能的路径,则 Connectivity Tests 会生成多条跟踪记录(例如,在目标端点是具有多个后端的 Google Cloud 负载平衡器的情况下)。

  • “匹配”表示 Connectivity Tests 找到一项 Google Cloud 配置,该配置允许模拟的数据包继续通过测试路径。
  • “不匹配”表示 Connectivity Tests 找不到匹配项。因此,配置不存在。
  • “遭拒匹配”表示 Connectivity Tests 找到必须丢弃模拟测试数据包的 Google Cloud 配置。

Connectivity Tests 组件

Connectivity Tests 是顶级组件,其中包含配置分析所需的所有测试子组件。这些部分包括以下几项:

  • 来源端点和目标端点
  • 测试及其跟踪的可达性详细信息,包括由配置分析确定的总体可达性结果
  • 一条或多条跟踪记录,每条跟踪记录包含一个或多个步骤
  • 每个步骤的状态

每个测试都有一个唯一的名称,每个步骤都有一个状态以及与之关联的 Info 元数据。例如,如果某个步骤检查路由,则该步骤中将包含 RouteInfo 元数据。

下图展示了从一个 Compute Engine 虚拟机实例到另一个 Compute Engine 实例的测试。如需查看测试组件的说明,请参阅以下各部分。

虚拟机到虚拟机跟踪记录的状态机。
虚拟机到虚拟机跟踪记录的状态机

来源端点和目标端点

Connectivity Tests 配置分析支持没有来源端口的 5 元组数据包标头。这是因为不使用源端口验证 Google Cloud 网络配置中的资源。因此,您无需在运行测试时提供源端口。

数据包标头包含以下组件:

  • 网络协议
  • 源端点,包括以下各项之一:
    • 来源 IP 地址
    • 虚拟机实例名称
    • GKE 控制层面的集群名称
    • Cloud SQL 实例名称
  • 目标端点,包含以下各项之一和端口号:
    • 目标 IP 地址
    • 虚拟机实例名称
    • GKE 控制层面的集群名称
    • Cloud SQL 实例名称

您还可以指定 Google Cloud 或非 Google Cloud 网络类型,或者结合使用网络类型和 IP 地址或虚拟机实例名称来唯一标识网络位置。

任何受支持的 Google Cloud 资源均支持以下目标协议:

  • TCP
  • UDP
  • ICMP
  • ESP
  • AH
  • SCTP
  • IPIP

支持 TCP 或 UDP 协议的目标端口。如果未指定端口,则默认设置为端口 80

跟踪记录、步骤和状态

配置分析包含一条或多条跟踪记录。每条跟踪记录表示测试中的一条唯一的模拟数据包转发路径。

  • 每条跟踪记录包含多个有序的步骤
  • 每个步骤都包含一个与 Google Cloud 配置相关的状态,Connectivity Tests 会检查此配置以发现该步骤。
  • 状态分为非最终状态和最终状态。
非最终状态

非最终状态表示针对测试路径中的每项 Google Cloud 资源(例如虚拟机实例、端点、防火墙规则、路由或 Google Cloud 负载平衡器)的配置检查。

非最终状态有四种:

  • 初始
  • 配置检查
  • 转发
  • 转换

如需了解详情,请参阅测试状态

最终状态

每条跟踪记录必须以最终状态结束,这是跟踪过程的最后一步。

最终状态可能有四种:

  • Drop
  • Abort
  • Forward
  • Deliver

每种状态都有与之相关的原因。如需了解详情,请参阅每种最终状态的详细信息

总体可达性结果

配置分析还提供了总体可达性结果,该结果可以采用以下四个值之一:ReachableUnreachableAmbiguousUndetermined

了解总体可达性结果会有助于设置监控或自动化。

如需了解详情,请参阅总体可达性结果

仿冒检查

当往返虚拟机实例的模拟数据包使用并非归该实例拥有的 IP 地址时,连接测试将执行仿冒检查。虚拟机拥有的 IP 地址包含所有虚拟机内部 IP 地址和次要 IP 地址。

如果该地址似乎是来自外部流量的地址(也称为外部地址),则该 IP 地址无法通过仿冒检查。

元数据

每种状态可以具有 Info 字段形式的与之关联的元数据。例如,InstanceInfo 包含虚拟机实例的详情,包括名称和 IP 地址。

配置分析提供测试本身的元数据和测试的每个步骤的元数据。

实时数据平面分析的工作原理

动态验证的探测机制不涉及客机操作系统,并且对用户完全透明。探测将代表源端点注入网络,并在发送到目标端点之前被丢弃。探测不包括在常规网络计费、遥测指标和流日志中。

VPC Service Controls 支持(预览版)

VPC Service Controls 可为 Connectivity Tests 提供额外的安全保护,有助于降低发生数据渗漏的风险。使用 VPC Service Controls,您可以将项目添加到服务边界,从而防止资源和服务受到源自边界外部的请求的影响。

如需详细了解服务边界,请参阅 VPC Service Controls 文档的服务边界详情和配置页面。

后续步骤