通告特定的 VPC 子网

您可以创建自定义通告路由来限制 Cloud Router 路由器通告的 Virtual Private Cloud (VPC) 网络中的子网。只有您通告的子网对本地客户端可见。除非您将 Cloud Router 路由器配置为通告所有子网,否则 Cloud Router 路由器不会动态通告新子网。如果您选择仅通告特定子网,并且要通告新子网,则必须将其作为自定义通告路由添加。

对于启用 IPv6 的 BGP 会话,您可以为特定内部 (ULA) 和外部 (GUA) IPv6 子网范围配置自定义通告路由。如需了解 IPv6 子网类型,请参阅 IPv6 子网范围

如需在创建 Cloud Router 路由器或配置 BGP 会话时指定自定义通告路由,请参阅创建 Cloud Router 路由器建立 BGP 会话

准备工作

gcloud

如果您要使用本指南中的命令行示例,请执行以下操作:

  1. 安装或更新到 Google Cloud CLI 的最新版本。
  2. 设置默认区域和可用区

API

如果希望使用本指南中的 API 示例,请设置 API 访问权限

在 Cloud Router 路由器上指定自定义通告路由

如需在现有 Cloud Router 路由器上指定自定义通告路由,请按以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 选择要更新的 Cloud Router 路由器。

  3. 路由器详情页面上,点击 修改

  4. 通告的路由部分,对于路由,选择创建自定义路由

  5. 如果选中通告向 Cloud Router 公开的所有子网复选框,请将其清除。

  6. 选择添加自定义路由以添加自定义通告路由。

  7. 配置自定义通告路由:

    • 来源:选择预定义的子网列表。Cloud Router 会根据 VPC 网络的动态路由模式列出所有可用的子网。
    • IP 地址范围:您可以修改通告的子网 IP 范围。例如,您可以缩小指定的范围,使 Cloud Router 仅通告部分子网。 您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。
    • 说明:添加说明以帮助标识此自定义通告路由的用途,然后点击完成
  8. 添加完自定义通告路由后,点击保存

gcloud

在开始之前,请记录要通告的子网 IP 范围。

运行 update 命令。如需指定要通告的子网 IP 范围,请使用 --set-advertisement-ranges 标志。如需将 IP 范围附加到现有通告,请使用 --add-advertisement-ranges 标志。

  1. 使用 --set-advertisement-ranges 标志;所有现有的自定义通告路由都会被替换:

    gcloud compute routers update ROUTER_NAME \
       --advertisement-mode custom \
       --set-advertisement-ranges=ADVERTISED_IP_RANGES
    

    请替换以下内容:

    • ROUTER_NAME:Cloud Router 路由器的名称
    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。

    以下示例更新 my-router Cloud Router 路由器,以通告 10.0.0.0/2410.0.10.0/24 子网;现有的自定义通告路由将被替换:

    gcloud compute routers update my-router \
       --advertisement-mode custom \
       --set-advertisement-ranges 10.0.0.0/24,10.0.10.0/24
    

    以下示例更新 my-router Cloud Router 路由器,以通告 10.0.0.0/2410.0.10.0/24 IPv4 子网以及 2001:db8:abcd:12::/64 IPv6 子网:

    gcloud compute routers update my-router \
       --advertisement-mode custom \
       --set-advertisement-ranges 10.0.0.0/24,10.0.10.0/24,2001:db8:abcd:12::/64
    

    Cloud Router 路由器仅在启用了 IPv6 的 BGP 会话中通告 IPv6 范围。

  2. 以下示例使用 --add-advertisement-ranges 标志将 IP 范围附加到现有通告:

    gcloud compute routers update my-router \
       --add-advertisement-ranges 10.0.20.0/24
    

    以下示例将 2001:db8:abcd:12::/64 自定义 IPv6 范围添加到 Cloud Router 路由器的通告中:

    gcloud compute routers update my-router \
       --add-advertisement-ranges 2001:db8:abcd:12::/64
    

    Cloud Router 路由器仅在启用了 IPv6 的 BGP 会话中通告 IPv6 范围。

如果 Cloud Router 路由器的通告组包含所有子网,请移除通告组以阻止 Cloud Router 路由器通告其他子网。通告组是 Cloud Router 路由器动态通告的 IP 范围,由 Google 定义。如需查看完整的通告组列表,请参阅 Google SDK 文档中的 set-advertisement-groups 标志。

  1. 以下示例使用 describe 命令检查 Cloud Router 路由器的通告路由:

    gcloud compute routers describe my-router
    
  2. 如果输出包含值为 all_subnetsadvertisedGroups 字段,请将其移除。以下示例使用带有 --remove-advertisement-groups 标志的 update 命令:

    gcloud compute routers update my-router \
       --remove-advertisement-groups all_subnets
    

API

使用 routers.patch 方法更新 bgp.advertisedIpRanges[] 字段。如果 bgp.advertisedGroups[] 字段当前的值为 ALL_SUBNETS,则您可能还需要更新该字段。

bgp.advertisedGroups[]bgp.advertisedIpRanges[] 字段接受通告组和通告 IP 地址范围的数组。PATCH 这些字段时,您将使用请求中的新数组覆盖现有数组。

  1. 发送 GET 请求以获取路由器上的当前通告组和通告 IP 地址范围的数组。如需了解详情,请参阅查看 Cloud Router 路由器状态和路由

  2. 发送 PATCH 请求,其中包含新的通告组和通告 IP 地址范围的数组。

    • 将您要在路由器上使用的任何子网 IP 地址范围添加到 bgp.advertisedIpRanges[] 字段中。
    • 如果 advertisedGroups[] 字段当前指定了值 ALL_SUBNETS,请通过发送空数组将其移除,如以下示例所示。这样做可以阻止 Cloud Router 路由器通告其他子网。
    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME
    {
      "bgp": {
        "advertisedGroups": [],
        "advertisedIpRanges": [
        ADVERTISED_IP_RANGES
       ]
     }
    }
    

    替换以下内容:

    • PROJECT_ID:Cloud Router 路由器所属的项目
    • REGION:Cloud Router 路由器所在的区域
    • ROUTER_NAME:Cloud Router 路由器的名称
    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。除了 IPv4 地址范围之外,您还可以指定 IPv6 自定义 IP 地址范围。但是,仅当您为此 BGP 会话启用 IPv6 交换时,才会通告 IPv6 范围。

    以下示例包含两个子网 IPv4 地址范围和一个 IPv6 地址范围:

        {
          "range": "10.0.0.0/24",
          "description": "First example range"
        },
        {
          "range": "10.0.10.0/24",
          "description": "Second example range"
        },
        {
          "range": "2001:db8:abcd:12::/64",
          "description: "Third example range"
        }
    

为 BGP 会话指定自定义通告路由

如需为现有 BGP 会话指定自定义通告路由,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 选择待更新 BGP 会话所属的 Cloud Router 路由器。

  3. 路由器详细信息页面上,选择要更新的 BGP 会话。

  4. BGP 会话详情页面中,点击 修改

  5. 对于路由,选择创建自定义路由

  6. 如果选中通告向 Cloud Router 公开的所有子网复选框,请将其清除。

  7. 选择添加自定义路由以添加通告路由。

  8. 配置自定义通告路由:

    • 来源:选择预定义的子网列表。Cloud Router 会根据 VPC 网络的动态路由模式列出所有可用的子网。
    • IP 地址范围:您可以修改通告的子网 IP 范围。例如,您可以缩小指定的范围,使 Cloud Router 仅通告部分子网。 除了 IPv4 地址范围之外,您还可以指定 IPv6 自定义 IP 地址范围。但是,仅当您为此 BGP 会话启用 IPv6 交换时,才会通告 IPv6 范围。
    • 说明:添加说明以帮助标识此自定义通告路由的用途,然后点击完成
  9. 添加完自定义路由后,点击保存

gcloud

在开始之前,请记录要通告的子网 IP 范围。

运行 update-bgp-peer 命令。如需指定要通告的子网 IP 范围,请使用 --set-advertisement-ranges 标志。如需将 IP 范围附加到现有通告,请使用 --add-advertisement-ranges 标志。

  1. 使用 --set-advertisement-ranges 标志;所有现有的自定义通告都会被替换:

    gcloud compute routers update-bgp-peer ROUTER_NAME \
       --peer-name=PEER_NAME \
       --advertisement-mode custom \
       --set-advertisement-ranges=ADVERTISED_IP_RANGES
    

    替换以下内容:

    • ROUTER_NAME:Cloud Router 路由器的名称
    • PEER_NAME:您的 BGP 对等体的名称
    • (可选)如果您要添加自定义 IPv6 范围,请添加 --enable-ipv6 标志。
    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。

    以下示例更新 my-router Cloud Router 路由器上的 my-bgp-session BGP 会话,以通告 10.0.0.0/2410.0.10.0/242001:db8:abcd:12::/64 子网;现有的自定义通告路由将被替换:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --enable-ipv6 \
       --advertisement-mode custom \
       --set-advertisement-ranges 10.0.0.0/24,10.0.10.0/24
    
  2. 以下示例使用 --add-advertisement-ranges 标志将 IP 范围附加到现有通告:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --add-advertisement-ranges 10.0.20.0/24
    

    以下示例将 2001:db8:abcd:12::/64 自定义 IPv6 地址添加到 Cloud Router 路由器的通告路由中:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --enable-ipv6 \
        --add-advertisement-ranges 2001:db8:abcd:12::/64
    

如果 BGP 会话的通告组包含所有子网,请移除该通告组,以防止 Cloud Router 路由器通告其他子网。通告组是 Cloud Router 路由器动态通告的 IP 范围,由 Google 定义。如需查看完整的通告组列表,请参阅 Google SDK 文档中的 set-advertisement-groups 标志。

  1. 以下示例使用 describe 命令检查 Cloud Router 路由器的通告路由:

    gcloud compute routers describe my-router
    
  2. 如果相关 BGP 会话包含值为 all_subnetsadvertisedGroups 字段,请将其移除。以下示例使用带有 --remove-advertisement-groups 标志的 update 命令:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --remove-advertisement-groups all_subnets
    

API

使用 routers.patch 方法来更新 bgpPeers[] 字段。

bgpPeers[] 字段接受 BGP 对等端数组。PATCH 此字段时,您将使用请求中包含的新数组覆盖现有 BGP 对等方数组。

  1. 发送 GET 请求以获取路由器的当前 BGP 对等方数组。如需了解详情,请参阅查看 BGP 会话配置

  2. 发送带有新 BGP 对等端数组的 PATCH 请求。对要添加自定义通告路由的每个 BGP 对等端,执行以下操作:

    • 将所需的任何子网 IP 地址范围通告添加到 bgpPeers[].advertisedIpRanges[] 字段中。
    • 如果 bgpPeers[].advertisedGroups[] 字段当前指定了值 ALL_SUBNETS,请移除该值,以阻止 BGP 会话通告其他子网。
    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME
    {
      "bgpPeers": [
        BGP_PEERS
      ]
    }
    

    替换以下内容:

    • PROJECT_ID:Cloud Router 路由器所属的项目
    • REGION:Cloud Router 路由器所在的区域
    • ROUTER_NAME:Cloud Router 路由器的名称
    • BGP_PEERS:新 BGP 对等体数组的内容

    以下示例包含两个具有自定义通告路由的 BGP 对等端:

        {
          "name": "peer-1",
          "interfaceName": "if-peer-1",
          "ipAddress": "169.254.10.1",
          "peerIpAddress": "169.254.10.2",
          "peerAsn": 64512,
          "enableIpv6": true,
          "advertisedRoutePriority": 100,
          "advertiseMode": "CUSTOM",
          "advertisedGroups": [],
          "advertisedIpRanges": [
            {
              "range": "10.0.0.0/24",
              "description": "First example subnet"
            },
            {
              "range": "10.0.10.0/24",
              "description": "Second example subnet"
            },
            {
              "range": "2001:db8:abcd:12::/64",
              "description: "Third example subnet"
            }
          ]
        },
        {
          "name": "peer-2",
          "interfaceName": "if-peer-2",
          "ipAddress": "169.254.20.1",
          "peerIpAddress": "169.254.20.2",
          "peerAsn": 64513,
          "advertisedRoutePriority": 100,
          "advertiseMode": "CUSTOM",
          "advertisedGroups": [],
          "advertisedIpRanges": [
            {
              "range": "10.0.20.0/24",
              "description": "Fourth example subnet"
            }
          ]
        }
    

后续步骤