IBM Cloud Docs
创建路径

创建路径

您可以通过配置路由来控制 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 服务创建路由。

在控制台中创建路由

要在控制台中创建路由,请按照以下步骤操作:

  1. 确保查看 限制和准则

  2. IBM Cloud 控制台,选择导航菜单 导航菜单图标,然后单击基础架构 VPC 图标 > 网络 > 路由表。 此时将显示 VPC 页面的路由表。

  3. 选择与要查看的路由表相关联的 VPC。 然后,单击路由表的名称以显示其详细信息。

  4. 滚动到“检修路线”部分,然后单击 创建

  5. 在“创建路由”侧面板中,输入以下信息:

    • 区域-选择路线的可用性区域。

    • Name(名称 )- 输入新路由的名称。

    • Destination CIDR-路由的目标 CIDR (例如,10.0.0.0/16)。

    • 优先级-输入从 04 的优先级。 默认值为 2。 有关更多信息,请参阅 确定路由首选项

    • Action- 对匹配路由的数据包执行的操作。 值为:

      • 代表-使用系统路由表来路由包。
      • 代表-VPC-代表系统的内置路由,忽略因特网绑定的路由。 如果 VPC 使用 non-RFC-1918 地址并且还具有公共连接,那么是必需的。 有关详细信息,请参阅 IANA 注册的 IP 分配的路由注意事项
      • 交付-将包路由到下一个中继段目标。 您可以添加多个具有相同地址前缀的路由。 虚拟路由器通过使用不同的下一个中继段 IP 地址来执行同等成本的多路径路由 (ECMP)。
      • Drop-丢弃包。

    对子网进行处理的流量使用与子网关联的定制路由表。 如果在定制路由表中找不到匹配的路由,那么将使用 VPC 系统路由表继续路由。 您可以使用 删除操作的定制路由表缺省路由来避免此行为。

    • 类型-选择 IP 地址VPN 连接

    • 下一个中继段 (IP 地址)-输入下一个中继段。

      您可以修改现有路由的下一个中继段 IP 地址。

    • 广告-向入口源发布广告。 目前,支持 Direct Link 和 Transit Gateway。 可选。

  6. 单击“**保存 **”保存新路线。 路由将显示在“路由表详细信息”页面上。

通过 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
路由的优先级。 值为 01234。 默认值为 2。 数值越小,优先级越高。 如果定制路由表包含具有相同目标的路由,那么将选择具有最高优先级 (最小值) 的路由。
--next-hop
如果操作为传递,则输入要路由数据包的下一跳的 IP 地址或 VPN 连接 ID。
--vpngw
是 VPN 网关的名称。
--advertise
向直接链路和/或中转网关源发布广告。 truefalse 之一。
--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 创建目标路由,请执行以下步骤:

  1. 设置 API 环境

  2. 存储要在 API 命令中使用的以下变量的值:

    export VpcId=<your_vpc_id>
    export RoutingTableId=<your_routing_table_id>
    
  3. 创建路径:

    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 创建路由,请执行以下步骤:

  1. 设置 Terraform 环境

  2. 创建路径:

    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