使用路由
本页面介绍如何在 Google Cloud 中为 Virtual Private Cloud (VPC) 网络创建和管理路由。本页面假定您熟悉路由中介绍的不同类型的 Google Cloud 路由及其特性。
每个新网络都具有两种由系统生成的路由:默认路由(您可以将其移除或替换);以及子网路由(每个子网具有一个对应的子网路由)。除非删除相应的子网本身,否则无法移除子网路由。
除了由系统生成的路由外,您还可以创建其他自定义静态路由。
检查路由
列出 VPC 网络的路由
您可以使用以下任一方法查看路由:
控制台
要列出所有网络的路由,请执行以下操作:
gcloud
如需列出默认路由、子网路由和自定义静态路由,请使用以下 gcloud
命令,需将 NETWORK_NAME 替换为您的网络名称:
gcloud compute routes list --filter="network=NETWORK_NAME"
gcloud
compute routes list
不会显示自定义动态路由。如需查看动态路由,您必须查询知悉该路由的 Cloud Router 路由器的状态。请使用以下命令作为模板,需将 CLOUD_ROUTER_NAME 替换为 Cloud Router 的名称,并将 REGION 替换为其地区:
gcloud compute routers get-status CLOUD_ROUTER_NAME \ --region=REGION \ --format="flattened(result.bestRoutes)"
API
在您的 VPC 网络中列出默认路由、子网路由和自定义静态路由。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes?filter=network="NETWORK_URL
请将占位符替换为有效值:
- PROJECT_ID 是您的 VPC 网络所在项目的 ID。
- NETWORK_URL 是包含所要列出路由的 VPC 网络的网址。
如需了解详情,请参阅 routes.list
方法。
列表路由 API 不会显示自定义动态路由。如需查看动态路由,您必须查询知悉该路由的 Cloud Router 路由器的状态。如需了解详情,请参阅 Cloud Router 文档。
描述路由
如需查看系统生成的路由和自定义静态路由(包括目标和下一个跃点)的详细信息,请执行以下操作:
控制台
- 转到 Google Cloud Console 中的“路由”页面。
转到“路由”页面 - 点击某个路由的名称。
gcloud
如需查看系统生成的路由和自定义静态路由的详细信息,请使用以下 gcloud
命令,需将 ROUTE_NAME 替换为要检查的路由的名称:
gcloud compute routes describe ROUTE_NAME --format="flattened()"
API
描述系统生成的路由或自定义静态路由以查看其详细信息。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME
请将占位符替换为有效值:
- PROJECT_ID 是您的路由所在项目的 ID。
- ROUTE_NAME 是要描述的路由的名称。
如需了解详情,请参阅 routes.get
方法。
虚拟机路由
您可以按照本部分中的说明,来查看虚拟机实例的给定网络接口的适用路由和有效路由。有效路由是考虑路由顺序的适用路由的子集。
网络接口的适用路由
您可以使用 Google Cloud 控制台查看虚拟机网络接口的适用路由。这种查看方式会将可用于出站流量的路由的列表缩小到一定的范围。
如需查看虚拟机的特定网络接口的适用路由,请执行以下操作:
- 转到 Google Cloud Console 中的“虚拟机实例”页面。
转到“虚拟机实例”页面 - 在列表中找到虚拟机实例。在更多操作菜单 (
) 中,选择查看网络详情。
- 如果某个实例具有多个网络接口,请在网络接口详情部分中选择要查看的网络接口。
- 点击路由标签,以查看适用于该网络接口的所有路由(按路由名称排序)。
路由分析和有效路由
路由分析可帮助您确定有效路由,这种分析会将适用的路由和路由顺序纳入考虑范围。路由会按目标 IP 范围列出,因此您可以确定使用哪种适用的路由将流量发送到给定目标范围。
例如,一个网络接口可能会使用多个适用的路由。如需了解详情,请参阅路由顺序。
如需按路由适用性和路由顺序查看路由,请使用路由分析:
- 转到 Google Cloud Console 中的“虚拟机实例”页面并找到要查看的实例。
转到“虚拟机实例”页面 - 在该实例的更多操作菜单 (
) 中,选择查看网络详情。
- 如果某个实例具有多个网络接口,请在网络接口详情部分中选择要查看的网络接口。
- 在网络分析部分,选择路由分析标签。
- 查看出现的表(按照从最具体的 IP 地址范围到最宽泛的 IP 地址范围的顺序排列),以确定适用于给定目标范围的路由。
路由分析标签的示例输出如下:

添加和移除路由
添加静态路由
请按照以下步骤创建新的静态路由。在创建之前,请确保您熟悉以下内容:
自定义静态路由的目标范围和 VPC 网络中任何子网路由的目标范围都不能相同,而且前者不能比后者更具体。
- 使用 VPC 网络对等互连来连接两个 VPC 网络时,一个网络中的自定义静态路由的目标和两个网络中任何子网路由的目标都不能相同,而且前者不能比后者更具体。Google Cloud 会拒绝在这方面与子网路由相冲突的自定义静态路由。
为避免在使用自动模式网络时发生冲突,请不要创建目标在
10.128.0.0/9
范围内的静态路由。如需了解详情,请查看为自动模式网络保留的 IP 范围。自定义静态路由的目标不能与任何内部分配的范围重叠。
在创建将虚拟机用作下一跃点的自定义静态路由之前,请确保您熟悉充当下一个跃点的实例。如果选择下一个跃点实例,Google Cloud 仅验证在创建路由时虚拟机是否存在。
如果您使用网络标记创建路由,则只有具有该标记的虚拟机才会接收该路由。但是,已标记的 VM 仍会接收所有没有网络标记的路由。
控制台
- 转到 Google Cloud Console 中的“路由”页面。
转到“路由”页面 - 点击创建路由。
- 指定该路由的名称和说明。
- 选择将应用该路由的现有网络。
- 指定目标 IP 范围以定义该路由的目标。
- 指定该路由的优先级。只有在多个路由具有等效目标时,才会使用优先级来确定路由顺序。 如需了解详情,请参阅静态路由参数。
- 如需使该路由仅适用于具有匹配网络标记的部分实例,请在实例标记字段中指定标记。将该字段留空以使路由适用于网络中的所有实例,或选择内部 TCP/UDP 负载平衡器作为路由的下一个跃点。网络标记不适用于将内部 TCP/UDP 负载平衡器作为下一个跃点的路由。
为该路由选择下一个跃点:
- 默认互联网网关可创建通向互联网的路由。
- 指定实例允许您按名称选择实例。 流量将路由到该实例(或同一区域中同名的任何替换实例),即使该实例的 IP 地址发生更改也是如此。
- 指定 IP 地址允许您输入 VPC 网络中现有实例的 IP 地址。如需了解有效的下一个跃点 IP 地址的重要限制,请参阅静态路由的下一个跃点。
- 指定 VPN 隧道允许您选择现有的 Cloud VPN 隧道作为下一个跃点。隧道必须使用基于政策的路由,或者必须是基于路由的 VPN。
- 指定内部 TCP/UDP 负载均衡器的转发规则名称或 IP 地址会显示一个文本框,允许您将现有的内部 TCP/UDP 负载均衡器指定为下一个跃点。
如需详细了解不同类型的下一个跃点,请参阅“路由概览”中的静态路由的下一个跃点。
点击创建。
gcloud
使用以下 gcloud
命令创建新的自定义静态路由:
gcloud compute routes create ROUTE_NAME \ --destination-range=DEST_RANGE \ --network=NETWORK \ NEXT_HOP_SPECIFICATION
请将占位符替换为有效值:
- ROUTE_NAME 是该路由的名称。
- DESTINATION_RANGE 表示该路由适用的目标 IP 地址。最宽泛的目标是
0.0.0.0/0
。 - NETWORK 是包含该路由的 VPC 网络的名称。
- NEXT_HOP_SPECIFICATION 表示自定义静态路由的下一个跃点。您必须将下面其中一项指定为下一个跃点。如需详细了解不同类型的下一个跃点,请参阅静态路由的下一个跃点。
--next-hop-gateway=default-internet-gateway
:通过此类型的下一个跃点,可将流量发送到 VPC 网络之外,包括发送到互联网或专用 Google 访问通道的 IP 地址。--next-hop-instance=
INSTANCE_NAME 和--next-hop-instance-zone=
ZONE:通过此类型的下一个跃点,可按名称和区域将流量定向到现有虚拟机实例。流量将被发送到与路由位于同一网络中的虚拟机网络接口的主要内部 IP 地址。--next-hop-address=
ADDRESS:通过此类型的下一个跃点,可将流量定向到现有虚拟机实例的 IP 地址。--next-hop-ilb=
FORWARDING_RULE_NAME 和--next-hop-ilb-region=
REGION:将此类型的下一个跃点与内部 TCP/UDP 负载均衡器结合使用,可将流量分配到由内部转发规则名称(或 IP 地址)和区域指定的负载均衡器。负载均衡器通过线缆串接设备的方式在运行状况良好的后端(在这些后端,负载均衡器对客户端透明)之间分配流量。--next-hop-vpn-tunnel=
VPN_TUNNEL_NAME 和--next-hop-vpn-tunnel-region=
REGION:通过此类型的下一个跃点,可将流量定向到使用静态路由的 Cloud VPN 隧道。
如需详细了解不同类型的下一个跃点,请参阅“路由概览”中的静态路由的下一个跃点。
如需使自定义静态路由仅适用于精选虚拟机(按网络标记),请添加 --tags
标志并指定一个或多个网络标记。如需详细了解网络标记与自定义静态路由如何协同工作,请参阅“路由概览”中的适用路由。您可以将标记与任何自定义静态路由搭配使用。
如需详细了解 gcloud
语法,请参阅 SDK 文档。
API
创建一个新的自定义静态路由。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes { "destRange": "DESTINATION_RANGE", "name": "ROUTE_NAME", "network": "NETWORK_NAME", "priority": PRIORITY, "NEXT_HOP_SPECIFICATION": "VALUE" }
请将占位符替换为有效值:
- PROJECT_ID 是创建您的路由所在项目的 ID。
- DESTINATION_RANGE 表示该路由适用的目标 IP 地址。最宽泛的目标是
0.0.0.0/0
。 - ROUTE_NAME 是路由的名称。
- NETWORK_NAME 是包含该路由的 VPC 网络的名称。
- NEXT_HOP_SPECIFICATION 的 VALUE 表示自定义静态路由的下一个跃点。对于 NEXT_HOP_SPECIFICATION,您必须仅指定以下下一个跃点字段中的一个:
nextHopIp
、nextHopGateway
、nextHopInstance
、nextHopIlb
或nextHopVpnTunnel
。如需详细了解不同类型的下一个跃点,请参阅“路由概览”中的静态路由的下一个跃点。
如需了解详情,请参阅 routes.insert
方法。
Terraform
您可以使用 Terraform 模块来创建静态路由。
此静态路由会创建一个通向互联网的默认路由。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
添加 IPv6 默认路由
唯一支持的 IPv6 路由是默认路由 (::/0
),其中 next-hop-gateway
设置为 default-internet-gateway
。
创建双栈子网时,系统会自动为 VPC 网络配置此路由。您可以删除路由,以阻止从虚拟机到互联网的所有 IPv6 流量。如果需要,您可以重新创建路由。
控制台
gcloud
重新创建网络的 IPv6 默认路由。
gcloud compute routes create ROUTE_NAME \ --destination-range=::/0 \ --network=NETWORK \ --next-hop-gateway=default-internet-gateway
请将占位符替换为有效值:
- ROUTE_NAME 是路由的名称。
- NETWORK 是包含该路由的 VPC 网络的名称。
API
重新创建网络的 IPv6 默认路由。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes { "destRange": "::/0", "name": "ROUTE_NAME", "network": "NETWORK_NAME", "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway" }
请将占位符替换为有效值:
- PROJECT_ID 是创建您的路由所在项目的 ID。
- ROUTE_NAME 是路由的名称。
- NETWORK_NAME 是包含该路由的 VPC 网络的名称。
删除多个路由
您可以删除由系统生成的默认路由或任何自定义静态路由。对于其他类型的路由:
如需删除 IPv6 默认路由,请使用 Google Cloud CLI 或 API 说明。如果您删除 IPv6 的默认路由,则虚拟机无法使用其 IPv6 地址连接到其他区域中的虚拟机。
控制台
- 转到 Google Cloud Console 中的“路由”页面。
转到“路由”页面 - 选中要删除的规则旁边的复选框。
- 点击删除。
- 再次点击删除进行确认。
gcloud
使用以下 gcloud
命令删除自定义静态路由,需将 ROUTE_NAME 替换为要移除的路由的名称:
gcloud compute routes delete ROUTE_NAME
API
删除自定义静态路由以将其从您的 VPC 网络中移除。
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME
请将占位符替换为有效值:
- PROJECT_ID 是您的路由所在项目的 ID。
- ROUTE_NAME 是要删除的路由的名称。
如需了解详情,请参阅 routes.delete
方法。
操作顺序
在您发出添加或删除路由的请求时,您的更改将被暂存,然后以最终一致的方式传播到网络中的各个实例。如果更改请求的状态为 PENDING
或 RUNNING
,则表示该请求尚未处理。处理完毕后,更改请求的状态为 DONE
。
如果您发出一系列更改请求,则更改可能按任何顺序应用。您提交更改请求的顺序不一定就是服务处理请求的顺序。此外,不同实例可能会在不同时间实施这些更改。
为实例启用 IP 转发
默认情况下,Google Cloud 会对数据包执行严格的来源和目标检查,以便:
- 只有在数据包的来源与网络中某个实例接口的内部 IP 地址相匹配时,该虚拟机实例才能发送数据包。
- 只有在数据包的目标与网络中某个实例接口的 IP 地址相匹配时,数据包才会传送给该实例。
因此,默认情况下,虚拟机无法转发由另一个虚拟机发出的数据包。
如需将某个虚拟机用作路由的下一个跃点,该虚拟机需要接收目标并非该虚拟机自身的数据包。由于虚拟机要转发这些数据包,所以数据包的来源不同于该虚拟机自己的内部 IP。为了实现此目标,您必须为虚拟机启用 IP 转发。启用 IP 转发后,Google Cloud 不会强制执行数据包来源和目标检查。
您可以在创建虚拟机时启用 IP 转发,也可以在现有虚拟机上更新 canIpForward
实例属性。IP 转发在虚拟机级层启用,适用于挂接到该虚拟机的所有接口。
在创建虚拟机时启用 IP 转发
以下说明介绍了如何在创建虚拟机时启用 IP 转发。如果您需要在现有虚拟机上启用 IP 转发,请更新 canIpForward
实例属性。
控制台
- 转到“虚拟机实例”页面。
转到“虚拟机实例”页面 - 点击创建实例。
- 展开网络、磁盘、安全、管理、单独租用部分。
- 展开网络部分。
- 在 IP 转发部分中,选择启用。
启用 IP 转发后,请继续创建虚拟机。
gcloud
使用 gcloud
创建实例时,请在命令中添加 --can-ip-forward
标志:
gcloud compute instances create ... --can-ip-forward
API
创建实例时,请使用 canIpForward
字段启用 IP 转发。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "canIpForward": true, ...other fields }
请将占位符替换为有效值:
- PROJECT_ID 是将创建实例的项目的 ID。
- ZONE 是将在其中创建实例的 Google Cloud 区域。
如需了解详情,请参阅 instances.insert
方法。
Terraform
您可以使用 Terraform 资源创建启用了 IP 转发的虚拟机实例。
在此示例中,Terraform 参数分配了您可以更改的值。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
后续步骤
- 如需了解路由,请参阅路由。
- 如需了解 Google Cloud VPC 网络,请参阅 Virtual Private Cloud (VPC) 概览。
- 如需了解如何创建和修改 VPC 网络,请参阅创建和管理 VPC 网络。