静态路由
本页面简要介绍了静态路由在 Google Cloud 中的工作原理。
如需大致了解 Google Cloud 中的路由,请参阅路由概览。
创建静态路由的注意事项
您可以通过以下两种方式之一来创建静态路由:
您可以使用 Google Cloud 控制台、
gcloud compute routes create
或routes.insert
API 手动创建静态路由。如果您使用 Google Cloud 控制台创建不使用动态路由的传统 VPN 隧道,则 Cloud VPN 可能会自动创建相应的静态路由。如需了解详情,请参阅 Cloud VPN 网络和隧道路由。
您可以与对等互连的 VPC 网络交换静态路由,如 VPC 网络对等互连文档中的用于交换自定义静态路由的选项中所述。
路由参数
静态路由支持以下属性:
名称和说明。这些字段用于标识路由。名称为必填字段,但说明是选填字段。项目中的每个路由都必须具有唯一的名称。
网络。每个路由必须恰好与一个 VPC 网络关联。
下一个跃点。下一个跃点标识数据包发送到的网络资源。所有下一个跃点类型都支持 IPv4 目的地,并且某些下一个跃点类型支持 IPv6 目的地。如需了解详情,请参阅下一个跃点和功能。
目的地范围。目的地范围是单个 IPv4 或 IPv6 CIDR 表示法
静态路由的目的地必须遵循与静态路由的交互以及子网和静态路由交互中所述的规则。IPv4 静态路由的最广泛的可能目的地是
0.0.0.0/0
。IPv6 静态路由的最广泛的可能目的地是::/0
。优先级。数字越小表示优先级越高。可能的最高优先级为
0
,可能的最低优先级为65,535
。网络标记。您可以将静态路由仅应用于 VPC 网络中由网络标记标识的选定虚拟机实例。如果您不指定网络标记,则 Google Cloud 会将静态路由应用于网络中的所有实例。使用 VPC 网络对等互连时,带标记的静态路由永不会交换。
下一个跃点和功能
下表汇总了按下一个跃点类型支持的静态路由功能:
下一个跃点类型 | IPv4 | IPv6 | ECMP1 |
---|---|---|---|
下一个跃点网关 (next-hop-gateway )指定默认互联网网关来定义前往外部 IP 地址的路径。 |
|||
按名称和可用区指定的下一个跃点实例 (next-hop-instance )
将数据包发送到通过名称和可用区标识且与路由位于同一项目中的下一个跃点虚拟机。如需了解详情,请参阅下一个跃点实例的注意事项。 |
|||
按地址标识的下一个跃点实例 (next-hop-address )将数据包发送到由主内部 IPv4 地址标识,或由网络接口的外部 IPv6 地址标识的下一个跃点虚拟机。如需了解详情,请参阅下一个跃点实例的注意事项。 |
(预览版) | ||
按转发规则名称 (next-hop-ilb ) 和区域 (next-hop-ilb-region ) 标识的下一个跃点内部直通式网络负载均衡器
将数据包发送到由转发规则的名称、区域和可选项目标识的内部直通式网络负载均衡器的后端。如需了解详情,请参阅内部直通式网络负载均衡器下一个跃点的注意事项。 |
|||
按地址标识的下一个跃点内部直通网络负载均衡器 (next-hop-ilb )将数据包发送到由负载均衡器的转发规则的 IP 地址标识的内部直通网络负载均衡器的后端。如需了解详情,请参阅内部直通式网络负载均衡器下一个跃点的注意事项。 |
|||
下一个跃点传统 VPN 隧道 (next-hop-vpn-tunnel )
使用基于政策的路由或基于路由的 VPN 将数据包发送到下一个跃点传统 VPN 隧道。如需了解详情,请参阅传统 VPN 隧道下一个跃点的注意事项。 |
下一个跃点项目和网络
静态路由下一个跃点同时与 VPC 网络和项目相关联:
网络:除下表所示外,下一个跃点的 VPC 网络必须与路由的 VPC 网络匹配。
项目:除下表所示外,下一个跃点必须位于包含下一个跃点的 VPC 网络的项目(独立项目或共享 VPC 宿主项目)中。某些下一个跃点可以位于共享 VPC 服务项目中。
下一个跃点类型 | 可以位于对等互连 VPC 网络中 | 可以位于共享 VPC 服务项目中 |
---|---|---|
下一个跃点网关 (next-hop-gateway ) |
||
按名称标识的下一个跃点实例 (next-hop-instance ) |
||
按地址标识的下一个跃点实例 (next-hop-address ) |
||
按转发规则名称和区域标识的下一个跃点内部直通网络负载均衡器 (next-hop-ilb ) |
||
按地址标识的下一个跃点内部直通网络负载均衡器 (next-hop-ilb ) |
||
下一个跃点传统 VPN 隧道 (next-hop-vpn-tunnel ) |
实例和内部直通式网络负载均衡器下一个跃点共同的注意事项
基于实例的路由是指下一个跃点为虚拟机实例(next-hop-instance
或 next-hop-address
)的静态路由。
内部下一个跃点网络负载均衡器作为下一个跃点是指下一个跃点为内部直通式网络负载均衡器 (next-hop-ilb
) 的静态路由。
将基于实例的路由或内部直通式网络负载均衡器配置为下一个跃点时,请遵循以下准则:
您必须将后端虚拟机或下一个跃点实例配置为转发来自任何来源 IP 地址的数据包。如需配置转发,请在创建虚拟机时基于每个虚拟机启用 IP 转发 (
can-ip-forward
)。对于作为托管式实例组的一部分自动创建的虚拟机,请在实例组使用的实例模板中启用 IP 转发。除了路由数据包所需的任何操作系统配置以外,您还必须更改上述配置。您必须适当配置后端虚拟机或下一个跃点实例上运行的软件。例如,您必须根据制造商的说明配置充当路由器或防火墙的第三方设备虚拟机。
后端虚拟机或下一个跃点实例必须具有适当的防火墙规则。您必须配置适用于所路由的数据包的防火墙规则。请注意以下几点:
- 适用于执行路由功能的实例的入站流量防火墙规则必须包含路由数据包来源的 IP 地址。隐式拒绝入站流量规则会阻止所有传入的数据包,因此您必须至少创建自定义入站流量允许防火墙规则。
- 适用于执行路由功能的实例的出站流量防火墙规则必须包含路由数据包目标的 IP 地址。隐式允许出站流量规则允许此操作,除非您创建了特定的出站流量拒绝规则来替换它。
- 在创建防火墙规则时,请考虑后端虚拟机或下一个跃点实例是否执行网络地址转换 (NAT)。
如需了解详情,请参阅隐式防火墙规则。
后端虚拟机或下一个跃点实例发送的数据包的来源区域是后端虚拟机或下一个跃点实例所在的区域。例如,由后端虚拟机或
us-west1
中的下一个跃点实例处理的数据包可以发送到只能在us-west1
进行访问的目的地,即使后端虚拟机或下一个跃点实例最初从不同于us-west1
的区域中的资源接收数据包也是如此。只有在发送数据包的虚拟机所在的区域才能访问的资源的示例包括:- 内部直通式网络负载均衡器、内部应用负载均衡器和关闭全球访问权限的区域内部代理网络负载均衡器
- Cloud VPN 隧道、Cloud Interconnect VLAN 连接和 Network Connectivity Router 设备虚拟机(如果 VPC 网络使用区域动态路由)
下一个跃点实例的注意事项
由实例名称和可用区指定的下一个跃点 (
next-hop-instance
):当您创建具有由实例名称和可用区指定的下一个跃点实例的静态路由时,Google Cloud 会要求指定可用区中已存在同名的实例,并且该实例满足以下条件:- 该实例与路由位于同一项目中。
- 该实例在路由的 VPC 网络(不是对等互连的 VPC 网络)中具有网络接口 (NIC)。
只要静态路由存在,则以下规则适用:
在以下任一情况下,Google Cloud 都会自动更新下一个跃点的编程:
- 下一个跃点实例的主要内部 IPv4 地址发生更改,或者
- 替换下一个跃点实例,并且替换实例具有相同的名称,位于同一可用区和项目中,并且在路由的 VPC 网络中具有网络接口。
在以下情况下,Google Cloud 不会更新下一个跃点的编程:
- 删除实例时。
- 分配给实例的 NIC 的 IPv6 地址范围会发生变化。
- 实例的 IPv4 或 IPv6 地址未分配。
- 下一个跃点实例 IP 地址 (
next-hop-address
):有效的下一个跃点虚拟机 IP 地址如下:- 虚拟机网络接口的主要内部 IPv4 地址。
- 分配给虚拟机网络接口的
/96
IPv6 地址范围内的任何内部或外部 IPv6 地址。
当您创建具有由 IP 地址指定的下一个跃点实例的静态路由时,Google Cloud 会接受任何虚拟机分配的 IP 地址,该地址应位于路由所在 VPC 网络中的子网的子网范围内。但是,仅当下一个跃点地址是有效的下一个跃点虚拟机 IP 地址时,Google Cloud 才会对路由进行编程。例如,如果您创建路由并将下一个跃点指定为来自别名 IP 地址范围的 IP 地址,系统会创建该路由。但是,由于别名 IP 地址不是有效的下一个跃点虚拟机 IP 地址,因此系统不会对路由进行编程。
如果下一个跃点 IP 地址迁移到其他虚拟机,且该 IP 地址仍然是有效的下一个跃点虚拟机 IP 地址,Google Cloud 会自动更新下一个跃点的编程。
共享 VPC 服务项目中的下一个跃点实例:当您通过 IP 地址指定下一跳虚拟机时,该虚拟机可以位于与路由相同的项目中(独立项目或共享 VPC 宿主项目),也可以位于共享 VPC 服务项目中。按实例名称和可用区指定下一个跃点虚拟机时,下一个跃点虚拟机必须与路由和 VPC 网络位于同一项目(独立项目或共享 VPC 宿主项目)中。
区域到区域成本和延迟:使用虚拟机作为下一个跃点时,下一个跃点位于某个区域的可用区中。使用下一个跃点的路由适用于同一 VPC 网络中的所有实例,或具有匹配网络标记的部分实例。Google Cloud 不会考虑使用实例作为下一个跃点的路由的区域距离,因此您可创建一个路由以将流量发送到其他区域中的下一个跃点虚拟机。如果将数据包从一个区域发送到另一个区域,则会增加出站数据传输成本并导致网络延迟。
不执行健康检查,不执行配置验证:Google Cloud 绝不会检查下一个跃点实例是否满足实例和内部直通式网络负载均衡器下一个跃点共同的注意事项中所述的所有要求。如果通过配置实例的客机操作系统来停用虚拟机的网络接口,则不会使 Google Cloud 忽略下一个跃点实例。
连接两个 VPC 网络时不进行对称哈希:使用在满足以下所有条件的配置中具有多个网络接口的两个或更多下一个跃点虚拟机时,Google Cloud 不会提供对称哈希:
- 虚拟机在一个 VPC 网络中具有一个网络接口,在另一个 VPC 网络中具有另一个网络接口。
- 在每个 VPC 网络中,同一目的地存在一组自定义静态路由(至少包含两个),这些路由使用相同的优先级,该组中的每个路由都会引用唯一的下一个跃点虚拟机。
如果您使用具有多个接口的两个或更多虚拟机来连接 VPC 网络,并且要求同一虚拟机双向处理给定连接的数据包,则需要对称哈希,只有下一个跃点内部直通网络负载均衡器才支持对称哈希。如需了解详情,请参阅对称哈希。
- 停止或删除实例时的行为:Google Cloud 不会阻止您停止或删除静态路由下一个跃点虚拟机(由名称和可用区或内部地址指定)。如果下一个跃点虚拟机未运行时,则目标的路由取决于是否存在完全相同的目标的其他路由,以及这些其他路由是否具有正在运行的下一个跃点。如需了解此行为,请参考以下示例:
- 当最高优先级路由的下一个跃点未运行时,目的地为
192.168.168.0/24
的数据包将发送到route-vm-b
的下一个跃点。发生这种路由是因为 Google Cloud 在考虑路由顺序中的“忽略低优先级路由”步骤之前会忽略未运行的下一个跃点: route-vm-a
,目标192.168.168.0/24
,优先级10
,下一个跃点虚拟机已停止route-vm-b
,目的地192.168.168.0/24
,优先级20
,下一个跃点虚拟机正在运行route-vm-c
,目的地192.168.168.0/24
,优先级30
,下一个跃点虚拟机正在运行目标在
192.168.168.0/24
范围内的数据包将在下一个示例中被丢弃,其中192.168.168.0/24
路由的所有下一个跃点虚拟机均未运行,即使更宽泛的192.168.0.0/16
的路由具有正在运行的下一个跃点虚拟机也是如此。数据包会被丢弃,因为 Google Cloud 在最具体的目标步骤中忽略具有更广泛(更短的子网掩码长度)目的地范围的路由,这种情况发生在忽略下一个跃点未运行路由顺序的步骤的自定义静态路由之前:route-vm-x
,目标192.168.168.0/24
,优先级10
,下一个跃点虚拟机已停止route-vm-y
,目标192.168.168.0/24
,优先级20
,下一个跃点虚拟机已停止route-vm-z
,目的地192.168.0.0/16
,优先级0
,下一个跃点虚拟机正在运行
- 当最高优先级路由的下一个跃点未运行时,目的地为
内部直通式网络负载均衡器下一个跃点的注意事项
支持的转发规则。Google Cloud 仅支持下一个跃点内部直通式网络负载均衡器转发规则。Google Cloud 不支持其他负载均衡器、协议转发或作为 Private Service Connect 端点使用的下一个跃点转发规则。
规范方法以及转发规则网络和项目。您可以使用以下三种方法之一指定下一个跃点转发规则。您使用的规范方法决定了转发规则的网络是否必须与路由的网络匹配,以及转发规则可位于哪个项目中:
按转发规则名称 (
--next-hop-ilb
) 和区域 (--next-hop-ilb-region
):按名称和区域指定下一个跃点转发规则时,转发规则的网络必须与路由的 VPC 网络匹配。转发规则必须位于包含转发规则的网络的项目(独立项目或共享 VPC 宿主项目)中。通过转发规则资源链接:转发规则的资源链接使用以下格式
/projects/
PROJECT_ID/regions/
REGION/forwardingRules/
FORWARDING_RULE_NAME,其中 PROJECT_ID 是包含转发规则的项目的 ID,REGION 是转发规则的区域,FORWARDING_RULE_NAME 是转发规则的名称。按资源链接指定下一个跃点转发规则时,转发规则的网络必须与路由的 VPC 网络匹配。转发规则可以位于包含转发规则的网络的项目(独立项目或共享 VPC 宿主项目)中或共享 VPC 服务项目中。按转发规则 IPv4 地址:当您按 IPv4 地址指定下一个跃点转发规则时,转发规则的网络可以是路由的 VPC 网络或对等互连的 VPC 网络。转发规则可以位于包含转发规则网络的项目(独立项目或共享 VPC 宿主项目)或共享 VPC 服务项目。
全球访问权限的影响。使用内部直通式网络负载均衡器下一个跃点的自定义静态路由在所有区域进行编程。下一个跃点是否可用取决于负载均衡器的全球访问权限设置。启用全球访问权限后,负载均衡器下一个跃点可在 VPC 网络的所有区域中访问。停用全球访问权限后,负载均衡器下一个跃点只能在与负载均衡器相同的区域中访问。停用全球访问权限后,系统会丢弃从另一个区域发送到使用内部直通式网络负载均衡器下一个跃点的路由的数据包。
当所有后端运行状况不佳时。当内部直通式网络负载均衡器的所有后端都未通过健康检查时,使用该负载均衡器下一个跃点的路由仍然有效。该路由处理的数据包根据流量分配发送到其中一个下一个跃点负载均衡器的后端。
不支持使用公共内部 IP 地址 (
--purpose=SHARED_LOADBALANCER_VIP
) 的转发规则。下一个跃点内部直通式负载均衡器和具有相同 IP 地址的内部直通式网络负载均衡器转发规则是互斥的功能。下一个跃点内部直通式网络负载均衡器必须使用负载均衡器的转发规则独有的 IP 地址,以便明确引用一个后端服务(一个负载均衡器)。转发规则可以使用公共内部 IP 地址来引用不同的后端服务(不同的内部直通式网络负载均衡器)。具有相同的目的地和优先级,但具有不同的下一个跃点内部直通式网络负载均衡器的多个路由。Google Cloud 绝不会使用 ECMP 在两个或多个下一个跃点内部直通式网络负载均衡器之间分配流量。相反,Google Cloud 会使用确定性内部算法只选择一个下一个跃点内部直通式网络负载均衡器。为避免这种不确定性,您可以为每个路由使用唯一的网络标记。
具有相同目的地、优先级和下一个跃点内部直通式网络负载均衡器的多个路由。如果不使用网络标记,则 Google Cloud 不允许创建具有相同目的地、优先级和内部直通式网络负载均衡器下一个跃点组合的多个静态路由。使用网络标记,您可以创建具有相同目的地、优先级和内部直通式网络负载均衡器下一个跃点组合的多个静态路由。
传统 VPN 隧道下一个跃点的注意事项
区域到区域的费用和延迟:Google Cloud 不会考虑使用下一个跃点传统 VPN 隧道的路由的区域距离。将流量发送到其他区域中的下一个跃点传统 VPN 隧道会增加出站数据传输费用并导致网络延迟。最佳实践是将高可用性 VPN 隧道与动态路由结合使用,因为该配置会考虑区域距离。
传统 VPN 隧道未运行时的行为:在传统 VPN 隧道未运行时,其下一个跃点为传统 VPN 隧道的自定义静态路由不会自动移除。如需详细了解隧道未运行时会发生的情况,请参阅传统 VPN 文档中的隧道关停时。