创建路径
您可以通过配置路由来控制 VPC 中的网络流量。 根据包的目标地址,使用 VPC 路由来指定包的下一个中继段。
对于 VPC 中的每个区域,可以存在多个路由表。 对于出口流量,当包离开子网时,系统会根据子网区域中的路由表来评估其目标,以确定下一步发送包的位置。 每个 VPC 都有一个默认路由表,它附加到每个子网,除非用户明确将子网附加到不同的路由表。
VPC 定制路由具有四个主要组件:
-
目标 CIDR
-
包将路由的下一个中继段 (当操作为
Deliver
时)您可以编辑现有路由的下一个中继段 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。 然后,单击路由表的名称以显示其详细信息。
-
滚动到“检修路线”部分,然后单击 创建。
-
在“创建路由”侧面板中,输入以下信息:
-
区域-选择路线的可用性区域。
-
Name(名称 )- 输入新路由的名称。
-
Destination CIDR-路由的目标 CIDR (例如,
10.0.0.0/16
)。 -
优先级-输入从
0
到4
的优先级。 默认值为2
。 有关更多信息,请参阅 确定路由首选项。 -
Action- 对匹配路由的数据包执行的操作。 值为:
- 代表-使用系统路由表来路由包。
- 代表-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 的 ID 或名称。
ROUTING_TABLE
- 是 VPC 路由表的 ID 或名称。
--zone
- 是区域的名称。
--destination
- 是路由的目的地 CIDR。 表中每个区域最多只能有两条路由具有相同的目的地,而且只有当这两条路由的操作都是递送时才行。
--action
- 是对匹配路由的数据包执行的操作。 操作包括 Delegate_vpc,委派,交付和 删除。
--priority
- 路由的优先级。 值为
0
,1
,2
,3
和4
。 默认值为2
。 数值越小,优先级越高。 如果定制路由表包含具有相同目标的路由,那么将选择具有最高优先级 (最小值) 的路由。 --next-hop
- 如果操作为传递,则输入要路由数据包的下一跳的 IP 地址或 VPN 连接 ID。
--vpngw
- 是 VPN 网关的名称。
--advertise
- 向直接链路和/或中转网关源发布广告。 true、false 之一。
--name
- 是 VPC 路由表的名称。
--output
- 以 JSON 格式格式化输出。
--q, quiet
- 使命令以静默方式运行,并且不会生成任何输出。
CLI 示例
ibmcloud is vpc-routing-table-route-update 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 72b27b5c-f4b0-48bb-b954-5becc7c1d456 72b27b5c-f4b0-48bb-b954-5becc7c1d4ef --name my-vpc-route --priority 1
ibmcloud is vpc-routing-table-route-update 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 72b27b5c-f4b0-48bb-b954-5becc7c1d456 72b27b5c-f4b0-48bb-b954-5becc7c1d4ef --name my-vpc-route --next-hop 10.0.0.2
使用 API 创建路由
要使用 API 创建目标路由,请执行以下步骤:
-
设置 API 环境。
-
存储要在 API 命令中使用的以下变量的值:
export VpcId=<your_vpc_id> export RoutingTableId=<your_routing_table_id>
-
创建路径:
curl -X POST "$vpc_api_endpoint/v1/vpcs/$VpcId/routing_tables/$RoutingTableId/routes?version=$api_version&generation=2" \ -H "Authorization: $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"} }'
使用 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 Registry。