创建路径
您可以通过配置路由来控制 VPC 中的网络流量。 根据包的目标地址,使用 VPC 路由来指定包的下一个中继段。
对于 VPC 中的每个区域,可以存在多个路由表。 对于出口流量,当包离开子网时,系统会根据子网区域中的路由表来评估其目标,以确定下一步发送包的位置。 每个 VPC 都有一个默认路由表,它附加到每个子网,除非用户明确将子网附加到不同的路由表。
VPC 定制路由具有四个主要组件:
-
目标 CIDR:指定该路由适用的目标 IP 地址范围。
-
下一个跳点:指定当路由操作为“
Deliver”时,匹配的流量将被转发到的 IP 地址。您可以编辑现有路由的下一个中继段 IP 地址。
-
区域:指定评估该路由的区域。 对于出站路由,该区域通常指源流量的来源区域。 对于入站路由,该区域指的是处理入站流量且下一跳必须位于其中的区域。
-
操作:指定如何处理匹配的流量,例如转发、委派或丢弃该流量。
源自 VPC 的指定区域且具有指定目标 CIDR 路由到下一个中继段的目标地址的任何流量。 如果目标地址位于多个 VPC 路由的目标 CIDR 中,那么将使用最具体的路由。 如果 VPC 具有两个或更多相同的特定路由,那么流量是在每个路由之间分布的循环。
每个路由都有一个目标属性,其中包含前缀长度 ( 10.2.0.0/24 中的 /24 )。 每个定制路由表支持的唯一前缀长度为 14。 具有相同前缀的多条路由仅被视为一个唯一前缀。
VPC地址前缀不再仅限于 RFC-1918 地址。 现在,您必须通过包含新 Delegate-VPC 操作的自定义路由,来配置同时使用 non-RFC-1918 地址且具有公共连接性(浮动IP地址或公共网关)的VPC。 对于符合 non-RFC-1918 规范且位于VPC外部的目标CIDR,必须指定此操作。例如,通过 Direct Link、Transit Gateway 或VPC经典访问方式可达的目标即属于此类情况。 有关何时使用 Delegate-VPC 操作的更多信息,请参阅 IANA 注册的 IP 分配的路由注意事项。
如果两者都为 true,那么需要 Delegate-VPC 操作:
- VPC 使用 non-RFC-1918 地址
- VPC 具有公共连接
在下列情况下,不需要 Delegate-VPC 操作:
- VPC 仅使用 RFC-1918 地址
- VPC 没有公共连接
在创建自定义路由之前,请阅读 《关于路由表和路由》 一文,以了解入站和出站路由的行为。
你可以使用控制台、CLI、API 或 Terraform 为 IBM Cloud 服务创建路由。
在控制台中创建路由
要在控制台中创建路由,请按照以下步骤操作:
-
确保查看 限制和准则。
-
从 IBM Cloud 控制台,选择导航菜单
,然后单击基础架构
> 网络 > 路由表。 此时将显示 VPC 页面的路由表。
-
选择与要查看的路由表相关联的 VPC。 然后,单击路由表的名称以显示其详细信息。
-
滚动到“检修路线”部分,然后单击 创建。
-
在“创建路由”侧面板中,输入以下信息:
-
区域-选择路线的可用性区域。
-
名称- 输入新路线的名称。
-
Destination CIDR-路由的目标 CIDR (例如,
10.0.0.0/16)。 -
优先级-输入从
0到4的优先级。 默认值为2。 有关更多信息,请参阅 确定路由首选项。 -
操作 ——对匹配该路由的数据包执行的操作。 值为:
- 代表-使用系统路由表来路由包。
- 代表-VPC-代表系统的内置路由,忽略因特网绑定的路由。 如果 VPC 使用 non-RFC-1918 地址并且还具有公共连接,那么是必需的。 有关详细信息,请参阅 IANA 注册的 IP 分配的路由注意事项。
- 交付-将包路由到下一个中继段目标。 您可以添加多个具有相同地址前缀的路由。 虚拟路由器通过使用不同的下一个中继段 IP 地址来执行同等成本的多路径路由 (ECMP)。
- Drop-丢弃包。
对子网进行处理的流量使用与子网关联的定制路由表。 如果在定制路由表中找不到匹配的路由,那么将使用 VPC 系统路由表继续路由。 您可以使用 删除操作的定制路由表缺省路由来避免此行为。
-
类型-选择 IP 地址 或 VPN 连接。
-
下一个中继段 (IP 地址)-输入下一个中继段。
您可以修改现有路由的下一个中继段 IP 地址。
-
广告-向入口源发布广告。 目前,支持 Direct Link 和 Transit Gateway。 可选。
-
-
点击 “保存”以保存新路线。 路由将显示在“路由表详细信息”页面上。
通过命令行界面(CLI)创建路由
开始之前,请 设置 CLI 环境。
要从 CLI 创建 VPC 路由,请运行以下命令:
ibmcloud is vpc-routing-table-route-create VPC ROUTING_TABLE --zone ZONE_NAME --destination DESTINATION_CIDR [--action delegate_vpc | delegate | deliver | drop] [--priority PRIORITY] [--next-hop NEXT_HOP [--vpngw VPNGW]][--advertise true | false] [--name NAME] [--output JSON] [-q, --quiet]
其中:
VPC- VPC 的标识或名称。
ROUTING_TABLE- VPC 路由表的 ID 或名称。
--zone- 该区域的名称。
--destination- 路由的目标 CIDR。 在表中的每个区域内,至多有两条路由的目的地相同,且仅当这两条路由的操作均为
deliver时才成立。 --action- 要对匹配路由的数据包执行的操作。 之一:
delegate_vpc,delegate,deliver,drop。默认:deliver --priority- 路由的优先级。 之一:
0,1,2,3,4。默认值:2。 值越低,优先级越高。 如果自定义路由表中包含目的地相同的路由,则选择优先级最高(值最低)的路由。 --next-hop- 如果操作为“
deliver”,请输入要将数据包路由到的下一跳的 IP 地址或 VPN 连接 ID。 --vpngw- VPN网关的名称。
--advertise- 向直接链路和/或中转网关源发布广告。
true网站之一,false。 --name- VPC 路由表的名称。
--output- 输出格式。 以下项之一:
json。 --q, quiet- 禁止冗长输出。
CLI 示例
-
通过指定区域名称、目标 CIDR 以及作为 IP 地址的下一跳来创建路由:
ibmcloud is vpc-routing-table-route-create r134-b754e387-8b06-43be-a5ea-909595a50676 r134-6cfaceb8-99d6-4743-bee8-ebbcbba6a563 --zone us-south-1 --destination 10.2.2.0/24 --action deliver --priority 1 --next-hop 10.0.0.2 --name my-vpc-route -
通过指定区域名称、目标 CIDR 以及将 VPN 连接 ID 设为下一跳来创建一条路由:
ibmcloud is vpc-routing-table-route-create r134-b754e387-8b06-43be-a5ea-909595a50676 r134-6cfaceb8-99d6-4743-bee8-ebbcbba6a563 --zone us-south-1 --destination 10.2.2.0/24 --action deliver --priority 1 --next-hop 02h7-1cf20e69-e2ce-400b-b070-0897521e2eb6 --name my-vpc-route
使用 API 创建路线
要使用 API 创建目标路由,请执行以下步骤:
-
设置 API 环境。
-
存储要在 API 命令中使用的以下变量的值:
export VpcId=<your_vpc_id> export RoutingTableId=<your_routing_table_id> -
通过指定
next_hop作为 IP 地址或 VPN 连接 ID 来创建一条路由:curl -X POST "$vpc_api_endpoint/v1/vpcs/$VpcId/routing_tables/$RoutingTableId/routes?version=$api_version&generation=2" \ -H "Authorization: Bearer $iam_token" \ -d '{ "name": "my-new-route", "zone": {"name": "us-south-2"}, "action": "deliver", "destination": "10.10.10.0/24", "next_hop": {"address": "10.0.0.3"} }'curl -X POST "$vpc_api_endpoint/v1/vpcs/$VpcId/routing_tables/$RoutingTableId/routes?version=$api_version&generation=2" \ -H "Authorization: Bearer $iam_token" \ -d '{ "name": "my-new-route", "zone": {"name": "us-south-2"}, "action": "deliver", "destination": "10.10.10.0/24", "next_hop": {"id": "02h7-1cf20e69-e2ce-400b-b070-0897521e2eb6"} }'
有关更多信息和可选参数,请 参 阅 VPC API 参考文档中的“在 VPC 路由表中创建路由”。
使用 Terraform 创建路由
要使用 Terraform 创建路由,请执行以下步骤:
-
配置您的 Terraform 环境。
-
创建路径:
resource "ibm_is_vpc_routing_table_route" "example" { vpc = ibm_is_vpc.example.id routing_table = ibm_is_vpc_routing_table.example.routing_table zone = "us-south-1" name = "custom-route-2" destination = "192.168.4.0/24" action = "deliver" next_hop = ibm_is_vpn_gateway_connection.example.gateway_connection // Example value "10.0.0.4" }
有关该 ibm_is_vpc_routing_table_route 资源的更多信息,请参阅 Terraform 注册表。