创建和管理 VPC 网络

本文档介绍了如何创建、修改和删除 Virtual Private Cloud (VPC) 网络和子网。在阅读本文档之前,请确保您熟悉 VPC 网络中所述的 VPC 网络的特性。网络和子网在 Google Cloud 中是不同的资源

如果您计划在子网上启用 IPv6 范围,请参阅 IPv6 子网范围

自行试用

如果您是 Google Cloud 新手,请创建一个账号来评估 VPC 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 VPC

创建网络

您可以选择创建自动模式 VPC 网络或自定义模式 VPC 网络。 您创建的每个新网络在同一项目内必须具有唯一的名称。

创建自动模式 VPC 网络

当您创建自动模式 VPC 网络时,系统会在每个 Google Cloud 区域中创建一个子网。在新区域可用后,这些区域中的新子网将自动添加到自动模式 VPC 网络中。自动创建的子网的 IPv4 范围来自预定范围集。所有自动模式 VPC 网络都使用同一组 IPv4 地址范围。

自动模式 VPC 网络不支持具有 IPv6 范围的子网。如果要创建双栈子网,请创建自定义模式 VPC 网络

如需创建自动模式 VPC 网络,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 输入网络的名称

  4. 最大传输单元 (MTU):选择网络的 MTU 是 1460(默认值)、1500 还是 8896。在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

  5. 子网创建模式选择自动

  6. 防火墙规则部分中,选择零条或更多预定义防火墙规则。这些规则适用于实例连接的常见使用场景。

    无论您是否选择预定义的规则,都可以在创建网络之后创建自己的防火墙规则

    每个预定义的规则名称都以您创建的 VPC 网络的名称 NETWORK 开头。在 IPv4 防火墙规则标签页中,可修改名为 NETWORK-allow-custom 的预定义入站防火墙规则。默认情况下,该规则指定来源范围 10.128.0.0/9,其中包含自动模式网络中子网的当前和未来 IPv4 范围。在包含该规则的行的右侧,点击修改以选择子网,添加其他 IPv4 范围并指定协议和端口。

  7. 为 VPC 网络选择动态路由模式

    如需了解详情,请参阅动态路由模式。稍后,您可以更改动态路由模式

  8. 点击创建

gcloud

使用 networks create 命令

gcloud compute networks create NETWORK \
    --subnet-mode=auto \
    --bgp-routing-mode=DYNAMIC_ROUTING_MODE \
    --mtu=MTU

请替换以下内容:

  • NETWORK:VPC 网络的名称。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 globalregional。默认值为 regional。 如需了解详情,请参阅动态路由模式
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

Terraform

使用 google_compute_network Terraform 资源

MTU 是网络的最大传输单元或最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

resource "google_compute_network" "vpc_network" {
  project                 = var.project_id # Replace this with your project ID in quotes
  name                    = "my-auto-mode-network"
  auto_create_subnetworks = true
  mtu                     = 1460
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

API

networks.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
  "autoCreateSubnetworks": true,
  "name": "auto-network1",
  "mtu": MTU
}

请替换以下内容:

  • PROJECT_ID:在其中创建 VPC 网络的项目的 ID。
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

如需指定 VPC 网络的动态路由模式,请包括 routingConfig 字段:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
  "routingConfig": {
    "routingMode": "DYNAMIC_ROUTING_MODE"
  },
  "autoCreateSubnetworks": true,
  "name": "NETWORK",
  "mtu": MTU
}

请替换以下内容:

  • PROJECT_ID:在其中创建 VPC 网络的项目的 ID。
  • NETWORK:VPC 网络的名称。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 GLOBALREGIONAL。默认值为 REGIONAL。 如需了解详情,请参阅动态路由模式
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

创建仅具有 IPv4 子网的自定义模式 VPC 网络

对于自定义模式的 VPC 网络,创建一个网络,随后在区域内创建所需子网。您不必立即为所有区域指定子网,甚至根本不必指定子网,但不能在没有定义子网的区域中创建实例。 最后,为您的网络定义防火墙规则。

如需创建仅包含 IPv4 子网的自定义模式 VPC 网络,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 输入网络的名称

  4. 最大传输单元 (MTU):选择网络的 MTU 是 1460(默认值)、1500 还是 8896。在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

  5. 子网创建模式选择自定义

  6. 新子网部分,为子网指定以下配置参数:

    1. 为子网提供名称
    2. 选择区域
    3. 输入 IP 地址范围。这是子网的主要 IPv4 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    4. 要为子网定义次要范围,请点击创建次要 IP 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    5. 专用 Google 访问通道:选择是在创建子网时为它启用专用 Google 访问通道,还是稍后通过修改来启用。

    6. 流日志:选择是在创建子网时为它启用 VPC 流日志,还是稍后通过修改来启用。

    7. 点击完成

  7. 如需添加更多子网,请点击添加子网,然后重复上述步骤。此外,您还可以在创建网络后向网络添加更多子网

  8. 防火墙规则部分中,选择 IPv4 防火墙规则中的零条或更多预定义防火墙规则。这些规则适用于实例连接的常见使用场景。

    如果您不选择任何预定义规则,则可以在创建网络之后创建自己的防火墙规则

    每个预定义的规则名称都以您创建的 VPC 网络的名称 NETWORK 开头。在 IPv4 防火墙规则标签页中,可修改名为 NETWORK-allow-custom 的预定义入站防火墙规则。在包含规则的行的右侧,点击修改以选择子网,添加其他 IPv4 范围并指定协议和端口。

    如果您以后添加其他子网,则 NETWORK-allow-custom 防火墙规则不会自动更新。如果需要将防火墙规则用于新子网,则必须更新防火墙配置以添加规则。

  9. 为 VPC 网络选择动态路由模式

    如需了解详情,请参阅动态路由模式。稍后,您可以更改动态路由模式

  10. 点击创建

gcloud

使用 networks create 命令

gcloud compute networks create NETWORK \
    --subnet-mode=custom \
    --bgp-routing-mode=DYNAMIC_ROUTING_MODE \
    --mtu=MTU

请替换以下内容:

  • NETWORK:VPC 网络的名称。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 globalregional。默认值为 regional。 如需了解详情,请参阅动态路由模式
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

接下来,向网络添加子网

Terraform

使用 google_compute_network Terraform 资源

MTU 是网络的最大传输单元或最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

resource "google_compute_network" "vpc_network" {
  project                 = var.project_id # Replace this with your project ID in quotes
  name                    = "my-custom-mode-network"
  auto_create_subnetworks = false
  mtu                     = 1460
}

接下来,向网络添加子网

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

API

networks.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
  "autoCreateSubnetworks": false,
  "name": "NETWORK",
  "mtu": MTU,
  "routingConfig": {
    "routingMode": "DYNAMIC_ROUTING_MODE"
  }
}

请替换以下内容:

  • PROJECT_ID:在其中创建 VPC 网络的项目的 ID。
  • NETWORK:VPC 网络的名称。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 GLOBALREGIONAL。默认值为 REGIONAL。 如需了解详情,请参阅动态路由模式
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

接下来,向网络添加子网

创建具有双栈子网的自定义模式 VPC 网络

您可以在创建网络时创建子网,也可以稍后添加子网。

子网可以具有其主要 IP 地址范围的以下配置之一:

  • 单栈:仅限内部 IPv4 范围
  • 双栈:内部 IPv4 范围和内部 IPv6 范围
  • 双栈:内部 IPv4 范围和外部 IPv6 范围

因此,VPC 网络中的每个子网都可以有不同的配置;例如,您无需将它们全部配置为双栈。

如需配置具有内部 IPv6 范围的子网,请启用 VPC 网络 ULA 内部 IPv6 范围。内部 IPv6 子网范围是从此范围分配的。

如需创建具有双栈子网的自定义模式 VPC 网络,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 输入网络的名称

  4. 最大传输单元 (MTU):选择网络的 MTU 是 1460(默认值)、1500 还是 8896。在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

  5. 对于子网创建模式,选择自定义

  6. 如果您要在此网络中的子网上配置内部 IPv6 地址范围,请完成以下步骤:

    1. 专用 IPv6 地址设置部分,选择为此 VPC 网络配置 ULA 内部 IPv6 范围
    2. 对于分配内部 IPv6 范围,选择自动手动

      如果您选择手动,请在 fd20::/20 范围内输入 /48 范围。如果此范围正在使用中,系统会提示您提供其他范围。

  7. 新子网部分,为子网指定以下配置参数:

    1. 为子网提供名称
    2. 选择区域
    3. 如需创建双栈子网,对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
    4. 输入 IPv4 范围。这是子网的主要 IPv4 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    5. 选择 IPv6 访问权限类型外部内部

    6. 点击完成

  8. 要添加更多子网,请点击添加子网,然后重复上述步骤。

    VPC 网络中的每个子网可以具有不同的栈类型和 IPv6 访问权限类型配置。您无需将给定网络中的所有子网都配置为双栈子网。

    此外,您还可以在创建网络后向网络添加更多单栈双栈子网。

  9. IPv4 防火墙规则IPv6 防火墙规则标签页的防火墙规则部分,选择零条或更多预定义防火墙规则。这些规则适用于实例连接的常见使用场景。

    如果您不选择任何预定义规则,则可以在创建网络之后创建自己的防火墙规则

    每个预定义的规则名称都以您创建的 VPC 网络的名称 NETWORK 开头。IPv4 防火墙规则标签页和 IPv6 防火墙规则标签页中都有可修改的预定义入站防火墙规则;IPv4 规则名为 NETWORK-allow-custom,IPv6 规则名为 NETWORK-allow-ipv6-custom。在包含规则的行的右侧,点击修改以选择子网,添加其他 IP 范围并指定协议和端口。

    如果您以后添加其他子网,NETWORK-allow-customNETWORK-allow-ipv6-custom 防火墙规则不会自动更新。如果需要将防火墙规则用于新子网,则必须更新防火墙配置以添加规则。

  10. 为 VPC 网络选择动态路由模式

    如需了解详情,请参阅动态路由模式。稍后,您可以更改动态路由模式

  11. 点击创建

gcloud

使用 networks create 命令。创建此网络后,您可以向其添加仅限 IPv4 的子网双栈子网

如果您要在此网络的任何子网上配置内部 IPv6 范围,请使用 --enable-ula-internal-ipv6 标志。此选项会分配 Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的/48 ULA 前缀。如果您要选择分配的 /48 IPv6 范围,请使用 --internal-ipv6-range 标志指定范围。

如果您只想在此 VPC 网络中的子网上配置外部 IPv6,则可以省略这两个标志。

gcloud compute networks create NETWORK \
    --subnet-mode=custom \
    [ --enable-ula-internal-ipv6 [ --internal-ipv6-range=ULA_IPV6_RANGE ]] \
    --bgp-routing-mode=DYNAMIC_ROUTING_MODE \
    --mtu=MTU

请替换以下内容:

  • NETWORK:VPC 网络的名称。

  • ULA_IPV6_RANGE:Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 前缀。如果您不使用 --internal-ipv6-range 标志,则 Google 会为该网络选择 /48 前缀。

  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 globalregional。默认值为 regional。 如需了解详情,请参阅动态路由模式

  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

API

networks.insert 方法发出 POST 请求。创建此网络后,您可以向其添加仅限 IPv4 的子网双栈子网

如果您要在此网络中的任何子网上配置内部 IPv6 范围,请将 enableUlaInternalIpv6 设置为 true。此选项会分配 Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 范围。如果您要选择分配的 /48 IPv6 范围,还请使用 internalIpv6Range 字段指定范围。

如果您只想在此 VPC 网络中的子网上配置外部 IPv6,则可以省略这两个字段。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
  "autoCreateSubnetworks": false,
  "name": "NETWORK",
  "mtu": MTU,
  "enableUlaInternalIpv6": true,
  "internalIpv6Range": "ULA_IPV6_RANGE",
  "routingConfig": {
    "routingMode": "DYNAMIC_ROUTING_MODE"
  }
}

请替换以下内容:

  • PROJECT_ID:在其中创建 VPC 网络的项目的 ID。
  • NETWORK:VPC 网络的名称。
  • MTU:最大传输单元 (MTU) 是该网络的最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元
  • ULA_IPV6_RANGE:Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 前缀。如果您没有为 internalIpv6Range 提供值,Google 会为该网络选择 /48 前缀。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 GLOBALREGIONAL。默认值为 REGIONAL。 如需了解详情,请参阅动态路由模式

关于防火墙规则

创建网络后,创建防火墙规则以允许或拒绝网络中资源之间的流量,例如虚拟机实例之间的通信。您还可以使用防火墙规则来控制哪些流量从 VPC 网络流向互联网或哪些流量从互联网流向 VPC 网络。

查看网络

查看项目中的 VPC 网络和旧式网络。对于 VPC 网络,您可以查看有关其子网及其子网创建模式的信息。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

    控制台会列出所有 VPC 网络和旧式网络。

  2. 选择一个 VPC 网络以查看其详细信息,例如该 VPC 网络的对等互连连接和子网。

gcloud

  1. 如需列出项目中的网络,请使用 networks list 命令

    gcloud compute networks list
    

    该命令会列出所有 VPC 网络和旧式网络。旧式网络显示子网创建模式为 LEGACY,而 VPC 网络显示 AUTOCUSTOM

    NAME             SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE     GATEWAY_IPV4
    custom-network   CUSTOM       REGIONAL
    default          AUTO         REGIONAL
    legacy-network1  LEGACY       REGIONAL          10.240.0.0/16  10.240.0.1
    
  2. 如需描述网络并查看其详细信息,例如对等互连连接和子网,请使用 networks describe 命令

    gcloud compute networks describe NETWORK
    

    NETWORK 替换为网络的名称。

API

  1. 如需列出项目中的所有网络,请向 networks.list 方法发出 GET 请求。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    

    PROJECT_ID 替换为包含所要列出 VPC 网络的项目 ID。

  2. 如需描述网络并查看其详细信息,请向 networks.get 方法发出 GET 请求。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK
    

    请替换以下内容:

    • PROJECT_ID:包含 VPC 网络的项目的 ID。
    • NETWORK:要描述的 VPC 网络的名称。

使用子网

以下部分介绍如何创建和管理子网。

列出子网

您可以看到一个项目存在的所有子网。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 如需查看子网,请执行以下操作之一:

    • 点击网络名称,然后点击 VPC 网络详细信息页面上的子网标签页。

      通过此视图,您可以为单个所选网络添加新子网和修改其他配置。

    • 点击当前项目中的子网标签页,然后从 VPC 网络列表中选择一个或多个网络。

      通过此视图,您可以列出多个网络中的子网。

gcloud

您可以列出项目中所有网络中的所有子网,也可以仅显示特定网络或区域的子网。以下示例演示了如何使用 subnets list 命令

  • 如需列出所有 VPC 网络中的所有子网,请使用以下命令:

    gcloud compute networks subnets list
    
  • 如需列出特定 VPC 网络中的所有子网,请使用以下命令:

    gcloud compute networks subnets list \
       --network=NETWORK
    

    NETWORK 替换为网络的名称。

  • 如需列出特定区域中的所有子网,请使用以下命令:

    gcloud compute networks subnets list \
       --filter="region:( REGION … )"
    

    REGION 替换为区域的名称。

API

如需列出项目中的所有子网,请向 subnetworks.aggregatedList 方法发出 GET 请求。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/subnetworks

PROJECT_ID 替换为包含所要列出子网的项目的 ID。

描述子网

您可以按照本部分中的步骤查看现有子网的详细信息,例如子网的主要 IPv4 范围、次要 IP 范围、IPv6 范围和区域。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

    项目中的所有网络和子网都以层次视图呈现,其中子网显示为网络中的条目。

  2. 要关注特定网络的子网,请点击网络的名称。在网络的 VPC 网络详情页面上,点击子网标签页中具体子网的名称,以查看其“子网详情”页面。

gcloud

  1. 列出子网可确定项目中现有子网的名称和地区。

  2. 使用 subnets describe 命令

    gcloud compute networks subnets describe SUBNET \
        --region=REGION
    

    请替换以下内容:

    • SUBNET:要描述的子网
    • REGION:要描述的子网的区域

API

  1. 如需列出特定区域中的子网并查找子网名称,请向 subnetworks.list 方法发出 GET 请求。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    

    请替换以下内容:

    • PROJECT_ID:包含要列出的子网的项目的 ID。
    • REGION:包含要列出的子网的 Google Cloud 区域的名称。
  2. subnetworks.get 方法发出 GET 请求。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    请替换以下内容:

    • PROJECT_ID:包含要描述的子网的项目的 ID。
    • REGION:包含要描述的子网的 Google Cloud 区域的名称。
    • SUBNET:要描述的子网的名称。

添加仅限 IPv4 的子网

在创建子网时,请根据名称IPv4 子网范围限制来设置名称、区域和至少一个主要 IPv4 地址范围。

如需创建仅限 IPv4 的子网,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击添加子网。在显示的面板中:

    1. 提供名称
    2. 选择区域
    3. 输入 IP 地址范围。这是子网的主要 IPv4 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    4. 要为子网定义次要范围,请点击创建次要 IP 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    5. 专用 Google 访问通道:您可以在创建子网时为它启用专用 Google 访问通道,也可以稍后通过修改来启用。

    6. 流日志:您可以在创建子网时为它启用 VPC 流日志,也可以稍后通过修改来启用。

    7. 点击添加

gcloud

使用 subnets create 命令

gcloud compute networks subnets create SUBNET \
    --network=NETWORK \
    --range=PRIMARY_RANGE \
    --region=REGION

请替换以下内容:

  • SUBNET:新子网的名称。
  • NETWORK:包含新子网的 VPC 网络的名称。
  • PRIMARY_RANGE:新子网的主要 IPv4 范围(采用 CIDR 表示法)。如需了解详情,请参阅 IPv4 子网范围
  • REGION:在其中创建新子网的 Google Cloud 区域。

您可以使用以下可选标志修改以上命令:

  • --secondary-range=SECONDARY_RANGE_NAME=SECONDARY_RANGE:将 SECONDARY_RANGE_NAME 替换为次要范围的名称。将 SECONDARY_RANGE 替换为次要范围(采用 CIDR 表示法)。每个网络的限制说明了您可以为每个子网定义的次要范围的数量上限。
  • --enable-flow-logs:创建子网时在子网中启用 VPC 流日志
  • --enable-private-ip-google-access:创建子网时在子网中启用专用 Google 访问通道
  • --purpose:可让您指定子网的用途
  • --role:可让您为代理专用子网指定角色(活跃或备用)。

接下来,创建防火墙规则

Terraform

使用 Terraform 模块

MTU 是网络的最大传输单元或最大数据包大小。可以将 MTU 设置为 13008896 之间的任何值。默认值为 1460。 在将 MTU 设置为高于 1460 的值之前,请查看最大传输单元

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-custom-mode-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "subnet-01"
      subnet_ip     = "10.10.10.0/24"
      subnet_region = "us-west1"
    },
    {
      subnet_name           = "subnet-02"
      subnet_ip             = "10.10.20.0/24"
      subnet_region         = "us-west1"
      subnet_private_access = "true"
      subnet_flow_logs      = "true"
    },
    {
      subnet_name               = "subnet-03"
      subnet_ip                 = "10.10.30.0/24"
      subnet_region             = "us-west1"
      subnet_flow_logs          = "true"
      subnet_flow_logs_interval = "INTERVAL_10_MIN"
      subnet_flow_logs_sampling = 0.7
      subnet_flow_logs_metadata = "INCLUDE_ALL_METADATA"
      subnet_flow_logs_filter   = "false"
    }
  ]
}

接下来,创建防火墙规则

API

subnetworks.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
{
  "ipCidrRange": "IP_RANGE",
  "network": "NETWORK_URL",
  "name": "SUBNET"
}

请替换以下内容:

  • PROJECT_ID:包含要修改 VPC 网络的项目的 ID。
  • REGION:在其中添加子网的 Google Cloud 区域的名称。
  • IP_RANGE:子网的主要 IPv4 地址范围。如需了解详情,请参阅 IPv4 子网范围
  • NETWORK_URL:要添加子网的 VPC 网络的网址。
  • SUBNET:子网的名称。

接下来,创建防火墙规则

添加双栈子网

双栈子网同时具有 IPv4 和 IPv6 地址范围。

您可以创建启用外部或内部 IPv6 地址的子网。如果您在子网上配置 IPv6 范围,则系统不会在连接到该子网的虚拟机上配置 IPv6。如需详细了解如何在虚拟机上配置 IPv6,请参阅在虚拟机上配置 IPv6 地址

如需创建双栈子网,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击添加子网。在显示的面板中:

    1. 提供名称
    2. 选择区域
    3. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
    4. 输入 IPv4 范围。这是子网的主要 IPv4 范围

      如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围

    5. 选择 IPv6 访问权限类型内部外部

      如果您要将访问权限类型设置为内部,但内部选项不可用,请检查是否为网络分配了内部 IPv6 范围

    6. 点击添加

gcloud

使用 subnets create 命令

gcloud compute networks subnets create SUBNET \
    --network=NETWORK \
    --range=PRIMARY_IPv4_RANGE \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=IPv6_ACCESS_TYPE \
    --region=REGION

请替换以下内容:

  • SUBNET:新子网的名称。
  • NETWORK:将包含新子网的 VPC 网络的名称。
  • PRIMARY_IPv4_RANGE:新子网的主要 IPv4 范围(采用 CIDR 表示法)。如需了解详情,请参阅 IPv4 子网范围
  • IPv6_ACCESS_TYPE:IPv6 访问权限类型。可以是 EXTERNALINTERNAL
  • REGION:将在其中创建新子网的 Google Cloud 区域。

API

subnetworks.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
{
  "ipCidrRange": "IP_RANGE",
  "network": "NETWORK_URL",
  "name": "SUBNET"
  "stackType": IPV4_IPV6,
  "ipv6AccessType": IPv6_ACCESS_TYPE
}

请替换以下内容:

  • PROJECT_ID:包含要修改 VPC 网络的项目的 ID。
  • REGION:在其中添加子网的 Google Cloud 区域的名称。
  • IP_RANGE:子网的主要 IPv4 地址范围。如需了解详情,请参阅 IPv4 子网范围
  • NETWORK_URL:要添加子网的 VPC 网络的网址。
  • SUBNET:子网的名称。
  • IPv6_ACCESS_TYPE:IPv6 访问权限类型。 可以为 EXTERNALINTERNAL

将子网的栈类型更改为双栈

双栈子网同时具有 IPv4 和 IPv6 子网范围。您可以将内部或外部 IPv6 子网范围添加到自定义模式 VPC 网络中的现有 IPv4 子网。如需了解详情,请参阅 IPv6 子网范围

如果您向子网添加 IPv6 子网范围,则系统不会在连接的虚拟机上配置 IPv6。如需了解如何配置虚拟机,请参阅在虚拟机上配置 IPv6

如需将子网的栈类型更改为双栈,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击网络名称以查看 VPC 网络详细信息页面。

  3. 子网标签页中,点击要修改的子网的名称。

  4. 子网详情页面上,点击 修改

  5. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)

  6. 选择 IPv6 访问权限类型内部外部

    如果您要将访问权限类型设置为内部,但内部选项不可用,请检查是否为网络分配了内部 IPv6 范围

  7. 点击保存

gcloud

使用 subnets update 命令

gcloud compute networks subnets update SUBNET \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=IPv6_ACCESS_TYPE \
    --region=REGION

请替换以下内容:

  • SUBNET:子网的名称。
  • REGION:子网的区域。
  • IPv6_ACCESS_TYPE:子网的 IPv6 访问权限类型。可以是 EXTERNALINTERNAL

API

subnetworks.patch 方法发出 PATCH 请求。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET
{
  "stackType": IPV4_IPV6,
  "ipv6AccessType": IPv6_ACCESS_TYPE
}

请替换以下内容:

  • PROJECT_ID:包含要修改 VPC 网络的项目的 ID。
  • REGION:子网的区域。
  • SUBNET:子网的名称。
  • IPv6_ACCESS_TYPE:IPv6 访问权限类型。 可以为 EXTERNALINTERNAL

将子网栈类型更改为仅限 IPv4

如果 IPv6 访问权限类型为外部,则您可以将子网的栈类型从 IPv4 和 IPv6(双栈)更改为仅限 IPv4(单栈)。

如果您进行此更改,则无法创建连接到该子网的新双栈虚拟机。但是,现有的双栈虚拟机不受影响。如果您需要将虚拟机的堆栈类型更改为仅 IPv4,请参阅更改虚拟机的堆栈类型

此更改仅在 Google Cloud CLI 和 API 中受支持。

如果 IPv6 访问权限类型为内部,则不支持将栈类型从 IPv4 和 IPv6(双栈)更改为仅限 IPv4(单栈)。

如需仅将子网的栈类型更改为 IPv4,请执行以下操作。

gcloud

使用 subnets update 命令

gcloud compute networks subnets update SUBNET \
    --stack-type=IPV4_ONLY \
    --region=REGION

请替换以下内容:

  • SUBNET:子网的名称。
  • REGION:子网的 Google Cloud 区域

API

subnetworks.patch 方法发出 PATCH 请求。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET
{
  "stackType": IPV4_ONLY,
}

请替换以下内容:

  • PROJECT_ID:包含要修改 VPC 网络的项目的 ID。
  • REGION:子网的 Google Cloud 区域。
  • SUBNET:子网的名称。

删除子网

使用以下说明可删除手动创建的子网。在删除子网之前,您必须先删除使用该子网的所有资源。例如,您需要删除使用该子网的虚拟机、预留的内部 IP 地址、内部转发规则以及 Cloud NAT 网关。

如需删除子网,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

    项目中的所有网络和子网都以层次视图呈现,其中子网显示为网络中的条目。

  2. 如需查看特定网络,请点击网络的名称。在网络的 VPC 网络详情页面上,点击子网标签中某一子网的名称,以查看其子网详情页面。

  3. 点击删除子网

  4. 在显示的消息中,点击删除进行确认。

gcloud

使用 subnets delete 命令

gcloud compute networks subnets delete SUBNET \
    --region=REGION

请替换以下内容:

  • SUBNET:要删除的子网的名称。
  • REGION:要删除的子网的区域。

API

subnetworks.delete 方法发出 DELETE 请求。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET

请替换以下内容:

  • PROJECT_ID:包含要删除子网的项目的 ID。
  • REGION:包含要删除的子网的 Google Cloud 区域的名称。
  • SUBNET:要删除的子网的名称。

扩展主要 IPv4 范围

您可以扩展现有子网的主要 IPv4 范围,方法是修改其子网掩码,然后将前缀长度设置为较小的数字。新的建议子网主要 IPv4 范围必须遵循 IPv4 子网范围限制中列出的规则。

在自动模式 VPC 网络(或者曾是自动模式 VPC 网络的自定义模式 VPC 网络)中扩展自动创建的子网的 IPv4 范围时,您可以使用的最宽泛的前缀(子网掩码)是 /16。比 /16 更宽泛的任何前缀都会与其他自动创建的子网的主要 IPv4 范围发生冲突。

您无法扩展负载均衡器代理专用的子网。如需了解详情,请参阅负载均衡器的代理专用子网

扩展子网的主要 IPv4 范围这一操作可能需要几分钟才能完成。在扩展期间,子网内的流量不会中断。

如果您扩展子网的主要 IPv4 范围,则可能需要修改采用此 IP 地址范围的其他配置。

如需扩展子网的主要 IPv4 范围,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

    项目中的所有网络和子网都以层次视图呈现,其中子网显示为网络中的条目。

  2. 要关注特定网络的子网,请点击网络的名称。在网络的 VPC 网络详情页面上,点击子网标签中某一子网的名称,以查看其子网详情页面。

  3. 点击修改

  4. IP 地址范围字段中输入一个更宽泛的新 CIDR 块。

    如需了解有效范围,请参阅 IPv4 子网范围

  5. 点击保存

gcloud

使用 subnets expand-ip-range 命令

gcloud compute networks subnets expand-ip-range SUBNET \
  --region=REGION \
  --prefix-length=PREFIX_LENGTH

请替换以下内容:

  • SUBNET:子网的名称。
  • REGION:子网所在的区域。
  • PREFIX_LENGTH:子网的掩码大小(以位为单位)。如果主要 IPv4 范围是 10.1.2.0/24,则可以输入 20,以将子网掩码减少到 20 位,从而将主要 IP 范围更改为 10.1.2.0/20。如需了解有效范围,请参阅 IPv4 子网范围

API

subnetworks.expandIpCidrRange 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET/expandIpCidrRange
{
  "ipCidrRange": "IP_RANGE"
}

请替换以下内容:

  • PROJECT_ID:包含要修改子网的项目的 ID。
  • REGION:包含要修改的子网的 Google Cloud 区域的名称。
  • SUBNET:要修改的子网的名称。
  • IP_RANGE:子网的扩展的 IPv4 地址范围。如需了解有效范围,请参阅 IPv4 子网范围

修改次要 IPv4 范围

您可以为子网添加次要 IPv4 范围,也可以移除任何次要 IPv4 范围,前提是没有任何资源在使用该次要范围内的 IP 地址。

gcloud

如需向子网添加新的次要 IPv4 范围,请使用 subnets update 命令

gcloud compute networks subnets update SUBNET \
  --region=REGION \
  --add-secondary-ranges=SECONDARY_RANGE_NAME=SECONDARY_RANGE

请替换以下内容:

  • SUBNET:子网的名称。
  • REGION:子网所在的区域。
  • SECONDARY_RANGE_NAME:次要范围的名称。
  • SECONDARY_RANGE:次要 IPv4 地址范围(采用 CIDR 表示法)。如需了解有效范围,请参阅 IPv4 子网范围

如需从子网中移除次要 IPv4 范围,请使用 subnets update 命令

gcloud compute networks subnets update SUBNET \
  --region=REGION \
  --remove-secondary-ranges=SECONDARY_RANGE_NAME

请替换以下内容:

  • SUBNET:子网的名称。
  • REGION:子网所在的区域。
  • SECONDARY_RANGE_NAME:要移除的次要范围的名称。

API

如需修改现有子网的次要 IPv4 地址范围,请向 subnetworks.patch 方法发出 PATCH 请求。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET
{
  "secondaryIpRanges": [
  {
    "rangeName": "SECONDARY_RANGE_NAME",
    "ipCidrRange": "IP_RANGE"
  },
  {
    "rangeName": "SECONDARY_RANGE_NAME",
    "ipCidrRange": "IP_RANGE"
  }],
  "fingerprint": "SUBNETWORK_FINGERPRINT"
}

请替换以下内容:

  • PROJECT_ID:包含要修改子网的项目的 ID。
  • REGION:包含要修改的子网的 Google Cloud 区域的名称。
  • SUBNET:要修改的子网的名称。
  • SECONDARY_RANGE_NAME:次要 IPv4 地址范围的名称。
  • IP_RANGE:子网的扩展的 IPv4 地址范围。如需了解有效范围,请参阅 IPv4 子网范围
  • SUBNET_FINGERPRINT:现有子网的指纹 ID,由您在描述子网时提供。

修改网络

将自动模式 VPC 网络转换为自定义模式

您可以通过此过程将自动模式 VPC 网络转换为自定义模式 VPC 网络。如需了解为什么可能需要执行此操作的背景信息,请查看自动模式 VPC 网络的注意事项

将自动模式 VPC 网络转换为自定义模式 VPC 网络可以保留其自动创建的所有子网和已添加的任何子网。子网名称和 IP 范围不会更改。

将自动模式 VPC 网络转换为自定义模式后,您必须检查所有隐式引用在网络处于自动模式时自动创建的任何子网的 API 调用和 gcloud CLI 命令。您需要修改 API 调用和命令,以便它们显式引用子网。对于具有子网规范标志 (--subnet) 的 gcloud CLI 命令,需要使用该标志来引用自定义模式 VPC 网络中的子网。

如需将自动模式 VPC 网络转换为自定义模式 VPC 网络,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击修改

  4. 子网创建模式部分,选择自定义

  5. 点击保存

gcloud

使用 networks update 命令

gcloud compute networks update NETWORK \
    --switch-to-custom-subnet-mode

NETWORK 替换为要更新的网络的名称。

API

networks.switchToCustomMode 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK/switchToCustomMode

请替换以下内容:

  • PROJECT_ID:包含要转换的 VPC 网络的项目的 ID。
  • NETWORK:要转换的 VPC 网络的名称。

为网络分配内部 IPv6 范围

如果您要在子网上配置内部 IPv6 地址,则必须先在 VPC 网络上启用内部 IPv6 地址。启用内部 IPv6 后,系统会为该网络分配 /48 唯一的本地地址 (ULA) 范围。

为您的 VPC 网络启用内部 IPv6 范围后,您可以添加双栈子网将 IPv4 子网转换为双栈子网

如需为网络分配内部 IPv6 范围,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击修改

  4. 专用 IPv6 地址设置部分,选择为此 VPC 网络配置 ULA 内部 IPv6 范围

  5. 可选:您可以提供用于内部 IPv6 范围的前缀。

    1. 对于分配 ULA 内部 IPv6 范围,点击手动
    2. 输入 fd20::/20 范围内的 /48 范围。

      如果此范围正在使用中,系统会提示您输入其他范围。

  6. 点击保存

gcloud

使用 networks update 命令

--enable-ula-internal-ipv6 标志会分配 Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 前缀。如果您要选择分配的 /48 IPv6 范围,请使用 --internal-ipv6-range 标志指定范围。

gcloud compute networks update NAME \
    --enable-ula-internal-ipv6 \
    [ --internal-ipv6-range=ULA_IPV6_RANGE ]

请替换以下内容:

  • NAME:VPC 网络的名称。
  • ULA_IPV6_RANGE:您需要为其分配 ULA 前缀的 IPv6 地址范围。

API

networks.insert 方法发出 PATCH 请求。

enableUlaInternalIpv6 设置为 true 会分配 Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 范围。如果您要选择分配的 /48 IPv6 范围,还请使用 internalIpv6Range 字段指定范围。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networksa/NETWORK
{
  "enableUlaInternalIpv6": true,
  "internalIpv6Range": "ULA_IPV6_RANGE",
}

请替换以下内容:

  • PROJECT_ID:在其中创建 VPC 网络的项目的 ID。
  • NETWORK:VPC 网络的名称。
  • ULA_IPV6_RANGE:Google 用于内部 IPv6 子网范围的 fd20::/20 范围内的 /48 前缀。如果您没有为 internalIpv6Range 提供值,Google 会为该网络选择 /48 前缀。

更改动态路由模式

每个 VPC 网络都有一个关联的动态路由模式,用于控制网络中 Cloud Router 路由器的行为。如需了解每种模式对 Cloud Router 路由器共享路由及应用已知路由的方式有何影响,请参阅“VPC 网络”中的动态路由模式部分。

如需更改 VPC 网络的动态路由模式,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击修改

  4. 动态路由模式部分中,选择全局区域

  5. 点击保存

gcloud

使用 networks update 命令

gcloud compute networks update NETWORK \
    --bgp-routing-mode=DYNAMIC_ROUTING_MODE

请替换以下内容:

  • NETWORK:要更新的 VPC 网络的名称。
  • DYNAMIC_ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 globalregional。默认值为 regional。 如需了解详情,请参阅动态路由模式

API

subnetworks.patch 方法发出 PATCH 请求。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK
{
  "routingConfig": {
    "routingMode": "ROUTING_MODE"
  }
}

请替换以下内容:

  • PROJECT_ID:包含要修改 VPC 网络的项目的 ID。
  • NETWORK:要修改的 VPC 网络的名称。
  • ROUTING_MODE:控制网络中 Cloud Router 路由器的行为。可以是 GLOBALREGIONAL。默认值为 REGIONAL。 如需了解详情,请参阅动态路由模式

更改网络的 MTU

如需了解如何更改 VPC 网络的 MTU,请参阅更改 VPC 网络的 MTU 设置

删除网络

您可以删除未使用的网络。如需删除某个网络,您必须先删除其所有子网中的所有资源,以及引用该网络的所有资源。引用网络的资源包括 VPC 网络对等互连连接Cloud VPN 网关Cloud Router 路由器无服务器 VPC 访问通道连接器及其连接的服务、防火墙规则自定义静态路由

如需删除 VPC 网络,请执行以下操作。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击删除 VPC 网络

  4. 在显示的消息中,点击删除进行确认。

gcloud

使用 networks delete 命令

gcloud compute networks delete NETWORK

NETWORK 替换为要删除的网络的名称。

API

networks.delete 方法发出 DELETE 请求。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK

请替换以下内容:

  • PROJECT_ID:包含要删除的 VPC 网络的项目的 ID。
  • NETWORK:要删除的 VPC 网络的名称。

监控您的 VPC 网络

您可以对进出虚拟机的网络流启用日志记录功能。如需了解相关说明,请参阅使用 VPC 流日志

您可以为防火墙规则启用日志记录功能,以便了解哪些规则允许或阻止了哪些流量。如需了解相关说明,请参阅使用防火墙规则日志记录

迁移虚拟机

在给定项目内,您可以将虚拟机 (VM) 实例从一个网络迁移到另一个网络。如需了解相关说明,请参阅在网络之间迁移虚拟机

问题排查

错误:Constraint constraints/compute.requireVpcFlowLogs violated

如果同时满足以下两个条件,就会出现此错误:

  • 已设置组织政策限制条件,该限制条件要求配置 VPC 流日志。

  • 您创建了一个子网或更新了现有子网的 VPC 流日志配置,而该配置不符合政策的要求。

如需详细了解此限制条件及其对子网创建和更新的影响,请参阅 VPC 流日志的组织政策限制条件

“找不到资源”错误

删除 VPC 网络时,您可能会看到如下所示的消息:The resource "aet-uscentral1-subnet--1-egrfw" was not found.

如需了解此错误及其解决方案,请参阅 VPC 防火墙规则文档中的“找不到资源”错误

由于存在 gk3- 资源,因此无法删除子网

如果由于存在名为 gk3- 的资源而无法删除子网,则即使您没有与该子网关联的任何现有 GKE 集群,仍请与 Google Cloud 支持团队联系。如需了解详情,请参阅已删除的 GKE 集群(使用 Private Service Connect)中的剩余资源

错误消息示例:

The subnetwork resource 'projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME' is already being used by 'projects/PROJECT_ID/regions/REGION/addresses/gk3-ID'

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个账号来评估 VPC 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 VPC