路由概览

Google Cloud Platform(GCP) 路由定义网络流量从虚拟机实例到其他目标所采用的路径。这些目标可以位于您的 VPC 网络之内(例如,在另一个虚拟机中),也可以位于它之外。

每个路由都包含目标位置和下一个跃点。目标 IP 在目标范围内的流量会发送到下一个跃点以进行传送。此页概述了路由在 GCP 中的工作方式。

在 GCP 中路由

每个 VPC 网络都使用一种可扩展的分布式虚拟路由机制。即使可以选择性地应用某些路由,也可以在 VPC 网络级别定义 VPC 网络的路由表。

每个虚拟机实例都有一个控制器,可以从网络路由表中获知所有适用的路由。离开虚拟机的每个数据包都将按照某种路由顺序传送到适用的路由的下一个合适跃点。当您添加或删除路由时,系统会使用最终一致的设计将这组更改传播到虚拟机控制器。

路由类型

GCP 拥有四种不同类型的路由,这些路由分别属于两个类别。当您创建网络、添加子网或修改子网的次要 IP 范围时,GCP 会自动创建系统生成的路由。自定义路由是指您直接(或通过使用云端路由器)创建和维护的路由。下表汇总了不同类型的路由:

类型 类别 目标 下一个跃点 可移除 应用对象
默认路由 系统生成 0.0.0.0/0 default-internet-gateway 网络中的所有实例
子网路由 系统生成 主要和次要子网 IP 范围
VPC 网络,会将数据包转发到其子网中的虚拟机 仅在删除子网或更改子网的次要 IP 范围时 网络中的所有实例
静态路由 自定义 • 不会与任何子网 IP 范围部分或完全重叠的 IP 范围
• 比子网 IP 范围更广的 IP 范围
以下各项中的一项:
• 通过名称指代的实例
• 通过 IP 地址指代的实例
• Cloud VPN 隧道
网络中的所有实例(除非仅限通过网络标记指代的特定实例)
动态路由 自定义 • 不会与任何子网 IP 范围部分或完全重叠的 IP 范围
• 比子网 IP 范围更广的 IP 范围
云端路由器的 BGP 对等体的 IP 地址 仅通过云端路由器 (如果不再接收来自其 BGP 对等体的路由) • 与云端路由器位于同一区域内的实例(如果 VPC 网络处于区域动态路由模式)
• 所有实例(如果 VPC 网络处于全局动态路由模式)

默认路由

创建 VPC 网络时,GCP 会创建一个系统生成的默认路由。此路由有以下两种用途:

  • 定义 VPC 网络之外的路径,包括指向互联网的路径。除具有此路由之外,如果实例需要访问互联网,还必须符合其他要求

  • 专用 Google 访问权限提供标准路径。

系统生成的默认路由的优先级为 1000。由于其目标需要尽可能广泛 (0.0.0.0/0),因此,只有目标更具体的路由并不适用于数据包时,GCP 才会使用该默认路由。若需详细了解如何使用目标具体程度和路由优先级来选择路由,请参阅路由顺序

如果要将网络与互联网完全隔离,或者需要将其替换为自定义路由,则可以删除默认路由:

  • 如果要将“互联网流量”路由到不同的下一个跃点,可以将默认路由替换为自定义静态路由或自定义动态路由。例如,您可以将其替换为自定义静态路由,该静态路由的下一个跃点为 Cloud VPN 隧道或其他实例(例如代理服务器)。

  • 如果您移除默认路由,但没有提供取而代之的路由,则流向未被其他路由覆盖的 IP 范围的数据包会被丢弃。

子网路由

子网路由是系统生成的路由,用于定义指向 VPC 网络中每个子网的路径。

每个子网至少有一个子网路由,其目标与子网主要 IP 范围一致。如果子网具有次要 IP 范围,则 GCP 会为每个次要范围创建一个具有对应目标的子网路由。如需详细了解子网 IP 范围,请参阅网络和子网

其他路由的目标不能与子网路由的目标一致,也不能比子网路由的目标更具体。您可以创建目标范围更广泛的自定义路由,该目标范围包含子网路由的目标范围。如果 IP 范围重叠:由于 GCP 使用目标具体程度作为路由顺序的第一标准,因此对于目标适合其目标范围的数据包,子网路由将始终是首选的下一个跃点。即使目标“包含”子网路由目标的另一路由具有更高的路由优先级,也是如此。

以下几点介绍了如何创建和删除子网路由:

  • 创建子网时,还会为该子网的主要 IP 范围创建一个相应的子网路由。

    • 如果将次要 IP 范围添加到子网,则系统会为该次要范围创建相应的子网路由。
  • 自动模式 VPC 网络会为每个自动创建的子网的主要 IP 范围创建子网路由。仅当您将自动模式网络转换为自定义模式时,才能删除这些子网。如需了解详情,请参阅 VPC 网络的类型

  • 除非修改或删除子网本身,否则无法删除子网路由:

    • 从子网中移除次要范围时,将自动删除该次要范围的子网路由。

    • 当您删除子网时,系统将同时自动删除主要范围和次要范围的所有子网路由。不能以任何其他方式删除子网主要范围的子网路由。

  • 使用 VPC 网络对等互连连接网络时,可以将来自一个网络的子网路由导入另一个网络,反之亦然。因此,所有主要和次要子网 IP 范围都必须是唯一的。

    • 除非您中断对等关系,否则无法移除对等网络中的子网的子网路由。一旦中断对等关系,系统将自动移除来自其他网络的所有已导入的子网路由。

防火墙规则可以阻止实例间的通信。如需详细了解实例间通信,请参阅网络内通信

自定义路由

自定义路由可以是您手动创建的静态路由,也可以是通过一个或多个云端路由器自动维护的动态路由。

自定义路由的目标不能与网络中的任何子网路由一致,也不能比其更具体。

如果您使用的是自动模式 VPC 网络,请不要使用属于 10.128.0.0/9 CIDR 块的目标,因为该块定义了子网路由的当前地址空间和未来地址空间。如需了解详情,请参阅自动模式 IP 范围。在自动模式 VPC 网络中,目标在 10.128.0.0/9 内的静态路由可能会随时被停用。当新的 GCP 区域可用,并且系统自动创建新的子网(及其子网路由)时,就会发生这种情况。若需了解详情,请仔细阅读自动模式网络的注意事项

静态路由

静态路由可以使用任何静态路由的下一个跃点。可以通过以下两种方式之一创建静态路由:

  • 手动创建静态路由

  • 如果您使用 GCP Console 创建使用基于政策的路由的 Cloud VPN 隧道,或创建属于基于路由的 VPN 的 Cloud VPN 隧道,则系统会为您创建用于远程流量选择器的静态路由。若需了解详情,请参阅有关网络和隧道路由的 Cloud VPN 文档。

如需了解详情,请参阅静态路由参数

动态路由

动态路由通过一个或多个云端路由器进行管理。其目标始终代表 VPC 网络之外的 IP 范围,并且其下一个跃点始终是 BGP 对等地址。云端路由器可以管理以下各项的动态路由:

适用范围和顺序

适用的路由

路由根据以下规则应用于实例:

  • 系统生成的路由将应用于 VPC 网络中的所有实例。 应用子网路由的实例的范围不能更改;但是,您可以替换默认路由

  • 自定义静态路由可以应用于所有实例或特定实例,具体取决于路由的标记属性。 具有标记属性的静态路由适用于具有相应网络标记的实例。如果未指定标记属性,则静态路由将应用于网络中的所有实例。

  • 动态路由将应用于基于 VPC 网络的动态路由模式的实例。如果 VPC 网络处于区域动态路由模式,则所有云端路由器都将会应用其在各自区域内学到的路由。如果网络处于全局动态路由模式,则所有云端路由器都会应用其在整个网络中学到的路由。

路由顺序

GCP 使用以下过程从适用路由池中为数据包选择下一个跃点:

  1. 首先考虑子网路由,因为 GCP 要求子网路由具有与各自子网的 IP 地址范围相匹配的最具体的目标。如果数据包的目标正好位于子网路由的目标内,则会将其传递到 GCP 子网。不能使用任何其他类型的路由来覆盖子网路由。

    • GCP 不允许静态路由具有与子网路由相同或更具体的目标。

    • 对于动态路由,每个云端路由器都会忽略它接收的具有与任何子网路由相同或更具体的目标的任何路由。

  2. 如果数据包不适合子网路由的目标,则 GCP 将查找具有最具体的目标的另一个路由。

    • 假设离开虚拟机的数据包的目标是 10.240.1.4,并且存在两个路由具有不同的目标:10.240.1.0/2410.240.0.0/16。因为 10.240.1.4 的最具体的目标是 10.240.1.0/24,目标是 10.240.1.0/24 的路由定义数据包的下一个跃点。
  3. 如果多个路由具有相同的最具体目标,则 GCP 会考虑路由的优先级

    • 如果具有最高优先级的单个路由可用,则将数据包发送到其下一个跃点。

    • 如果多个路由具有相同的最高优先级并且可用,则使用五元组哈希值在多个下一个跃点之间分配流量,以进行关联,从而实现 ECMP 路由设计。根据协议、来源和目标 IP 地址以及发送中的数据包的来源和目标端口计算该哈希值,并在可用路由数量发生变化时重新计算。

  4. 如果未找到适用的目标,GCP 将丢弃数据包,并传回 ICMP 目标或网络不可达错误。

静态路由的参数

每个静态路由均由以下成分组成:

  • 名称说明:这些字段用来标识路由。名称为必填字段,但说明是选填字段。项目中的每个路由都必须具有唯一的名称。

  • 网络:每个路由必须与刚好一个 VPC 网络关联。

  • 目标范围:目标范围是单个 IPv4 CIDR 块,包含接收传入数据包的系统的 IP 地址。GCP 不支持 IPv6 目标范围。目标必须以 CIDR 表示法表示,并且最宽泛的目标是 0.0.0.0/0

  • 优先级:优先级用于确定多个路由具有相同目标时应使用的路由。数字越小表明优先级越高;例如,优先级值为 100 的路由的优先级高于优先级值为 200 的路由。

  • 下一个跃点:静态路由可以具有指向默认互联网网关、GCP 实例或 Cloud VPN 隧道的下一个跃点。如需了解详情,请参阅静态路由的下一个跃点

  • 标记:您可以指定网络标记列表,以便路由应用于具有至少一个所列标记的实例。如果未指定标记,GCP 会将路由应用于网络中的所有实例。

静态路由的下一个跃点

下面介绍静态路由的有效下一个跃点。如需详细了解每种类型,请参阅 gcloud 参考文档

  • 下一个跃点网关 (next-hop-gateway):您可以指定默认互联网网关来定义前往公共 IP 地址的路径。

  • 下一个跃点实例 (next-hop-instance):您可以通过指定实例的名称和地区,将流量定向到 GCP 中的现有实例。流量将被定向到网络中的主要内部 IP 地址。

    • 如果实例的主要网络接口的内部 IP 地址发生更改,GCP 将自动更新路由表,以便继续将流量发送到位于新 IP 地址的该实例。

    • 如果用同一地区中具有相同名称的新实例替换了该实例,GCP 将自动更新路由表,以便将流量定向到替换实例。自动替换实例还是手动替换实例无关紧要。

  • 下一个跃点 IP (next-hop-address):您可以使用某个现有实例主要网络接口的内部 IP 地址来引用 GCP 中的该实例。

    • 如果用新实例替换该实例,则替换时必须使用相同的内部 IP 地址。GCP 会将流量定向到当前具有下一个跃点的指定内部 IP 地址的任何实例。

    • 下一个跃点 IP 地址必须是 VPC 网络中的现有实例。连接到 VPC 网络的网络公共 IP 地址和专用 IP 地址是有效的下一个跃点。

  • 下一个跃点 VPN 隧道 (next-hop-vpn-tunnel):对于 Cloud VPN 隧道,如果使用基于政策的路由基于路由的 VPN,则可以通过创建路由来将流量定向到 VPN 隧道,而所创建的路由的下一个跃点应按名称和区域引用该隧道。

实例充当下一个跃点

当创建下一个跃点为实例的静态路由时,无论是使用下一个跃点实例还是下一个跃点 IP,都必须将充当下一个跃点的实例配置为从其他实例接收传入的流量:

  • 充当下一个跃点的实例必须配置为允许 IP 转发 只有在创建虚拟机时,才能按每个虚拟机启用 IP 转发。如果需要为作为托管实例组的一部分自动创建的虚拟机启用 IP 转发,则必须在实例组所用的实例模板上启用 IP 转发。

  • 充当下一个跃点的实例必须具有经过适当配置的防火墙规则。 配置路由和指定充当下一个跃点的实例不会自动调整防火墙规则。隐式拒绝入站规则会阻止传入的流量,除非创建了允许传入流量的防火墙规则。如需了解详情,请参阅防火墙规则概览

  • 防火墙规则适用于数据包的来源和目标,而不是下一个跃点实例。应将下一个跃点实例配置为使数据包来源和目标保持不变。例如,如果入站防火墙规则的来源包含 IP 范围 10.240.0.3/32,则即使正确配置的 NAT 实例的 IP 地址不是 10.240.0.3,防火墙规则也允许传送具有通过该 NAT 实例路由的来源的数据包。

  • 将实例用作下一个跃点时,请记住该实例是地区资源。选择区域就意味着选择了一个区域。GCP 不考虑路由的区域距离,因此可以创建一个路由,以将流量发送到另一个区域中的下一个跃点实例。这将增加出站成本并招致网络延迟。

  • 对于下一个跃点是实例的路由,只要该实例正在运行,GCP 就会认为路由有效。如果实例中的软件(如其操作系统或负责路由数据包的进程)挂起或崩溃,将丢弃数据包。当可配置运行状况检查失败时,考虑使用托管实例组和自动修复指示 GCP 重新创建下一个跃点实例。

  • 如果通过配置实例的客机操作系统来停用网络接口,则系统不会指示 GCP 停止将其视为路由的下一个跃点。

后续步骤

  • 如需了解如何创建和使用路由,请参阅使用路由
  • 请参阅 VPC 概览,了解 GCP VPC 网络。
  • 请参阅使用 VPC,了解如何创建和修改 VPC 网络。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页