使用基于政策的路由
通过基于政策的路由,您可以根据多个数据包的目的地 IP 地址选择下一个跃点。本页面介绍如何创建、列出、描述和删除基于政策的路由。
准备工作
- 如需使用本指南中的命令行示例,请安装或更新到最新版本的 Google Cloud CLI。
- 您必须在项目中启用 Network Connectivity API。
- 您需要内部直通式网络负载均衡器。我们建议启用全球访问权限,以便内部直通式网络负载均衡器不会丢弃除定义区域之外的区域中的数据包。
所需的角色
如需获得使用基于政策的路由所需的权限,请让管理员向您授予项目的 Compute Network Admin (roles/compute.networkAdmin
) IAM 角色。
如需详细了解如何授予角色,请参阅管理访问权限。
创建基于政策的路由
创建基于政策的路由时,您需要指定以下内容:
- 路由范围:路由适用的资源。
- 分类标准:来源 IP 地址范围、目标 IP 地址范围以及用于确定路由适用的数据包的协议。基于政策的路由适用于与所有指定分类条件匹配的数据包。
下一个跃点:下一个跃点内部直通式网络负载均衡器,或者跳过其他基于政策的路由的下一个跃点。
控制台
在 Google Cloud Console 中,转到路由。
点击路由管理。
点击创建路由。
输入该路由的名称。
(可选)输入说明。
点击网络,然后选择要添加基于政策的路由的网络。
点击路由类型,然后选择基于政策的路由。
在路由范围部分中,执行以下操作之一:
如需将路由应用于 Virtual Private Cloud 网络中的所有虚拟机 (VM) 实例、Cloud Interconnect 的 VLAN 连接以及 Cloud VPN 隧道,请选择此路由会应用于所有虚拟机实例、VLAN 连接和 VPN 隧道。
在创建此类型的路由时,Google 建议您谨慎操作。路由会应用于符合分类条件的所有出站流量数据包,其中可能包括来自内部直通网络负载均衡器的后端的出站流量。
如需使该路由仅适用于特定虚拟机实例,请选择此路由仅会应用于虚拟机实例,然后输入要应用此路由的虚拟机的网络标记。您可以在英文逗号分隔列表中输入多个网络标记。
如需使该路由适用于该路由的 VPC 网络中 Cloud Interconnect 的所有 VLAN 连接,请选择此路由仅会应用于 VLAN 连接。
如需使该路由适用于特定区域中 Cloud Interconnect 的 VLAN 连接,请选择此路由仅会应用于 VLAN 连接,然后选择 VLAN 连接的区域。您无法创建适用于特定 VLAN 连接的基于政策的路由。
在分类条件部分,执行以下操作:
- 输入来源 IP 地址范围。
- 输入一个目标 IP 地址范围。
- 点击协议,然后选择此路由适用的协议。
输入优先级。
在下一个跃点部分中,点击下一个跃点,然后执行以下操作:
- 如需指定下一个跃点内部直通式网络负载均衡器,请选择指定内部直通式网络负载均衡器的转发规则,然后执行以下操作:
- 如需从现有转发规则列表中选择转发规则,请执行以下操作:
- 选择当前项目中的某个内部负载均衡器的转发规则正在使用。
- 点击转发规则 IP 地址,然后选择与所选项目中的内部负载均衡器关联的 IP 地址。
- 如需输入 IP 地址,请执行以下操作:
- 选择未使用。
- 在转发规则 IP 地址字段中,输入 IP 地址。该 IP 地址必须来自您要创建此基于政策的路由的网络的 IP 地址范围。您可以指定已与内部直通式负载均衡器的转发规则关联的 IP 地址,也可以在创建此基于政策的路由后指定未使用的 IP 地址并创建转发规则。
- 如需从现有转发规则列表中选择转发规则,请执行以下操作:
- 如需创建跳过其他基于政策的路由的基于政策的路由,请选择跳过其他基于政策的路由。
- 如需指定下一个跃点内部直通式网络负载均衡器,请选择指定内部直通式网络负载均衡器的转发规则,然后执行以下操作:
点击创建。
gcloud
使用 policy-based-routes create
命令。
如需将路由应用于所有虚拟机实例、Cloud Interconnect 的 VLAN 连接以及 Virtual Private Cloud 网络中的 Cloud VPN 隧道,请使用以下命令。
在创建此类型的路由时,Google 建议您谨慎操作。路由会应用于符合分类条件的所有出站流量数据包,其中可能包括来自内部直通网络负载均衡器的后端的出站流量。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY
替换以下内容:
ROUTE_NAME
:基于政策的路由的名称。SOURCE_RANGE
:来源 IP CIDR 范围。DESTINATION_RANGE
:目标 IP CIDR 范围。PROTOCOL
:要转发的流量的协议。选项为ALL
、TCP
或UDP
。默认值为ALL
。PROJECT_ID
:项目的 ID。NETWORK
:要应用基于政策的路由的网络的名称。NEXT_HOP
:路由的下一个跃点内部直通式网络负载均衡器的 IPv4 地址。DESCRIPTION
:路由的可选说明。PRIORITY
:基于政策的路由与其他基于政策的路由相比的优先级。
如需将路由仅应用于某些虚拟机实例,请使用以下命令:
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY \ --tags=NETWORK_TAGS
将
NETWORK_TAGS
替换为要应用路由的虚拟机的一个或多个网络标记。您可以在逗号分隔列表中包含多个网络标记。如需将路由仅应用于 Cloud Interconnect 的 VLAN 连接,请使用以下命令。您可以将路由应用于特定区域中 Cloud Interconnect 互连的 VLAN 连接,也可以应用于 VPC 网络中 Cloud Interconnect 互连的所有 VLAN 连接。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY \ --interconnect-attachment-region=INTERCONNECT_REGION
将
INTERCONNECT_REGION
替换为要应用此路由的 Cloud Interconnect 互连的 VLAN 连接的区域。如需将基于政策的路由应用于路由的 VPC 网络中 Cloud Interconnect 的所有 VLAN 连接,请使用all
。如需为网络标记标识的特定虚拟机指定跳过其他基于政策的路由的下个一个跃点,请使用以下命令:
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-other-routes=DEFAULT_ROUTING \ --description=DESCRIPTION \ --priority=PRIORITY \ --tags=NETWORK_TAGS
API
向 policyBasedRoutes.create
方法发送 POST
请求:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes?policyBasedRouteId=ROUTE_NAME
如需将路由应用于所有虚拟机实例、Cloud Interconnect 的 VLAN 连接以及 Virtual Private Cloud 网络中的 Cloud VPN 隧道,请添加以下请求正文。
在创建此类型的路由时,Google 建议您谨慎操作。路由会应用于符合分类条件的所有出站流量数据包,其中可能包括来自内部直通网络负载均衡器的后端的出站流量。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IPv4" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY" }
请替换以下内容:
PROJECT_ID
:项目的 ID。ROUTE_NAME
:基于政策的路由的名称。SOURCE_RANGE
:来源 IP CIDR 范围。DESTINATION_RANGE
:目标 IP CIDR 范围。PROTOCOL
:要转发的流量的协议。选项为ALL
、TCP
或UDP
。默认值为ALL
。NETWORK
:要应用基于政策的路由的网络的名称。路由适用于来自此网络中符合其他分类条件的实例的出站流量。NEXT_HOP
:路由的下一个跃点内部直通式网络负载均衡器的 IPv4 地址。DESCRIPTION
:路由的可选说明。PRIORITY
:基于政策的路由与其他基于政策的路由相比的优先级。
如需将路由仅应用于某些虚拟机实例,请添加以下请求正文:
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IPv4" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY", "virtualMachine": { "tags": [ "NETWORK_TAGS" ] } }
将
NETWORK_TAGS
替换为一个或多个网络标记。基于政策的路由适用于至少具有这些标记之一的实例的出站流量。您可以按照以下形式添加多个标记:"tag1","tag2","tag3"
。如需将路由仅应用于 Cloud Interconnect 的 VLAN 连接,请添加以下请求正文。您无法创建适用于特定 VLAN 连接的基于政策的路由。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IPv4" }, "interconnectAttachment": { "region": "INTERCONNECT_REGION" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY" }
将
INTERCONNECT_REGION
替换为要应用此路由的 Cloud Interconnect 互连的 VLAN 连接的区域。 如需将基于政策的路由应用于路由的 VPC 网络中 Cloud Interconnect 的所有 VLAN 连接,请使用all
。如需为网络标记标识的特定虚拟机指定跳过其他基于政策的路由的下个一个跃点,请使用以下命令:
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IPv4" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopOtherRoutes": "DEFAULT_ROUTING", "description": "DESCRIPTION", "priority": "PRIORITY", "virtualMachine": { "tags": [ "NETWORK_TAGS" ] } }
验证基于政策的路由的连接
Connectivity Tests 是一种诊断工具,可让您检查网络中端点之间的连接。它会分析您的配置,并且在某些情况下会执行运行时验证。Connectivity Tests 支持基于政策的路由。如需使用基于政策的路由运行 Connectivity Tests,请参阅创建和运行 Connectivity Tests。
列出基于政策的路由
您可以列出基于政策的路由以查看项目或网络和区域中的所有基于政策的路由。
控制台
在 Google Cloud Console 中,转到路由。
如需查看 VPC 网络和区域中的所有基于政策的路由,请执行以下操作:
- 点击有效路由。
- 点击网络,然后选择一个网络。
- 点击区域,然后选择一个区域。
- 点击视图。
如需查看项目中的所有基于政策的路由,请执行以下操作:
- 点击路由管理。
gcloud
使用 policy-based-routes list
命令。
gcloud network-connectivity policy-based-routes list
API
向 policyBasedRoutes.list
方法发送 GET
请求。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes
将 PROJECT_ID
替换为要用于列出基于政策的路由的项目的 ID。
描述基于政策的路由
您可以描述基于政策的路由,以查看路由的详细信息。
控制台
在 Google Cloud Console 中,转到路由。
点击有效路由。
点击网络,然后选择一个网络。
点击区域,然后选择一个区域。
点击视图。
点击基于政策的路由的名称以查看其详细信息。
gcloud
如需描述基于政策的路由,请使用 policy-based-routes describe
命令。
gcloud network-connectivity policy-based-routes describe NAME
将 NAME
替换为要描述的路由的名称。
API
向 policyBasedRoutes.get
方法发送 GET
请求。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes/ROUTE_NAME
请替换以下内容:
PROJECT_ID
:项目的 ID。ROUTE_NAME
:要描述的基于政策的路由的名称。
删除基于政策的路由
您可以删除基于政策的路由,以将其从 VPC 网络中移除。
控制台
在 Google Cloud Console 中,转到路由。
点击有效路由。
点击网络,然后选择一个网络。
点击区域,然后选择一个区域。
点击视图。
点击基于政策的路由的名称。
点击删除,然后再次点击删除进行确认。
gcloud
如需删除基于政策的路由,请使用 policy-based-routes delete
命令。
gcloud network-connectivity policy-based-routes delete NAME
将 NAME
替换为要删除的路由的名称。
API
向 policyBasedRoutes.delete
方法发送 DELETE
请求。
DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes/ROUTE_NAME
请替换以下内容:
PROJECT_ID
:项目的 ID。ROUTE_NAME
:要删除的基于政策的路由的名称。
兼容性
通过以下方式使用基于政策的路由需要特殊配置。
将基于政策的路由与 GKE 搭配使用
如果您在具有 Google Kubernetes Engine (GKE) 集群的 VPC 网络中创建基于政策的路由,请注意以下几点:
- 请勿创建目标包含集群节点或 Pod IP 地址的基于政策的路由。
- 请勿创建目标包含集群控制平面专用端点的基于政策的路由。
- 某些公共 Google Kubernetes Engine (GKE) 集群具有 Private Service Connect 控制平面专用端点。对于这些集群,在默认情况下,GKE 会在集群子网的主要 IPv4 地址范围内创建 Private Service Connect 控制平面专用端点。如需为 Private Service Connect 控制平面专用端点选择自定义子网范围(位于同一区域的子网),请参阅创建集群并选择控制平面 IP 范围。
- 创建专用 GKE 集群时,请为控制平面专用端点 (
--master-ipv4-cidr
) 指定 IP 地址范围。切勿创建目标包含此范围的基于政策的路由。如需了解详情,请参阅专用集群中的端点。
基于政策的路由和用于已发布服务的 Private Service Connect
基于政策的路由不能用于将流量从虚拟机路由到已发布服务的 Private Service Connect 端点或已发布服务的 Private Service Connect 后端。 将基于政策的路由和 Private Service Connect 用于已发布的服务时:
- 使用网络标记,以便基于政策的路由适用于特定虚拟机。
- 避免创建来源或目标 IP 地址范围为
0.0.0.0/0
的基于政策的路由。 - 如果您需要创建目标范围包含 Private Service Connect 端点或后端的 IP 地址的基于政策的路由,请创建可跳过其他基于政策的路由的优先级更高的基于政策的路由。使用更具体的 IP 地址范围(包括 Private Service Connect 端点或后端的 IP 地址)配置优先级较高的基于政策的路由的目的地。
基于政策的路由以及访问 Google API 和服务
Google Cloud 不支持通过其他虚拟机实例或自定义下一个跃点将流量路由到 Google API 和服务,包括路由到基于政策的路由中的下一个跃点内部直通网络负载均衡器的虚拟机后端。
如果您使用以下任一方法访问 Google API 和服务,请参阅下一部分中列出的最佳做法:
- 使用专用 Google 访问通道访问 Google API 和服务
- 从具有外部 IP 地址的虚拟机访问 Google API 和服务
- 使用 Google API 的 Private Service Connect 端点
- 使用 Google API 的 Private Service Connect 后端
最佳做法
我们建议通过上述最佳做法访问 Google API 和服务:
- 使用网络标记,以便基于政策的路由适用于特定虚拟机。
- 避免创建来源范围或目标范围为
0.0.0.0/0
的基于政策的路由。 - 如果您创建基于政策的路由(包括 Google API 和服务使用的目标范围、Google API 的 Private Service Connect 端点或 API 的 Private Service Connect 后端),请创建可跳过其他基于政策的路由的优先级更高的基于政策的路由。
为这些优先级更高的基于政策的路由设置目的地,以匹配 Google API 和服务的 IP 地址、Private Service Connect 端点或您使用的 Private Service Connect 后端。Google API 和服务使用的 IP 地址范围包括:
- Google API 和服务使用的默认网域的 IP 地址
- 专用 Google 访问通道虚拟 IP 地址 (VIP):
private.googleapis.com
(199.36.153.8/30)restricted.googleapis.com
(199.36.153.4/30)