连接到 VPC 网络

您可以使用以下两种机制之一,将 Cloud Run functions 直接连接到 VPC 网络:

对于无服务器 VPC 访问通道连接器,您需要为两种类型的费用付费:计算(按 Compute Engine 虚拟机计费)和网络出站流量(按虚拟机的流量计费)。对于直接 VPC 出站流量,您只需为网络出站流量付费(与连接器相同的费率)。您无需支付任何计算费用。

如需详细了解这些方法,请参阅对照表

本页面介绍了如何使用无服务器 VPC 访问通道将 Cloud Run functions 直接连接到 VPC 网络,从而允许访问 Compute Engine 虚拟机实例、Memorystore 实例以及具有内部 IP 地址的任何其他资源。

准备工作

创建 Serverless VPC Access 连接器

如需在不使用公共互联网的情况下向您的 VPC 网络发送请求并接收相应的响应,您可以使用无服务器 VPC 访问通道连接器。

如果连接器与其 VPC 网络位于同一项目中,您可以使用现有子网创建连接器,也可以创建连接器和新子网。

如果连接器位于服务项目中并使用共享 VPC 网络,则连接器与其关联的 VPC 网络位于不同的项目中。如果连接器与其 VPC 网络位于不同的项目中,则共享 VPC 网络管理员必须先在共享 VPC 网络中创建连接器的子网,然后您才能创建连接器,并且您必须使用现有子网创建该连接器。

如需详细了解子网要求,请参阅连接器子网要求

如需了解连接器吞吐量,包括机器类型和扩缩,请参阅吞吐量和扩缩

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建连接器。

控制台

  1. 打开无服务器 VPC 访问通道概览页面。

    打开“无服务器 VPC 访问通道”页面

  2. 点击创建连接器

  3. 名称字段中,为连接器输入一个名称,该名称遵循 Compute Engine 命名惯例,但还需注意,其长度必须少于 21 个字符,且连字符 (-) 计为 2 个字符。

  4. 区域字段中,选择连接器的区域。此区域必须与您的无服务器服务的区域相匹配。

    如果您的服务或作业位于 us-centraleurope-west 区域,请使用 us-central1europe-west1

  5. 网络字段中,选择要将连接器连接到的 VPC 网络。

  6. 子网字段中,选择以下选项之一:

    • 使用现有子网创建连接器:在“子网”字段中选择现有子网。

    • 创建连接器和新子网:在“子网”字段中选择自定义 IP 范围然后,输入未使用的 /28 CIDR 中的第一个地址(例如 10.8.0.0/28),用作 Google Cloud 在连接器的 VPC 网络中创建的新子网的主要 IPv4 地址范围。确保此 IP 范围与连接器的 VPC 网络中的所有现有路由都不冲突。新子网的名称以“aet-”前缀开头。

  7. (可选)如需设置扩缩选项以更好地控制连接器,请点击显示扩缩设置以显示扩缩表单。

    1. 设置连接器的实例数下限和上限,或使用默认值 2(下限)和 10(上限)。如果流量需要,连接器会扩容到指定的上限,但流量下降时,连接器实例数量不会缩减回来。您必须使用介于 210 之间的值。
    2. 实例类型菜单中,选择要用于连接器的机器类型,或者使用默认的 e2-micro。当您选择实例类型时,请注意右侧的费用边栏,其中显示带宽和费用估算值。
  8. 点击创建

  9. 准备就绪后,连接器名称旁边会出现绿色的对勾标记。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. gcloud 组件更新到最新版本:

    gcloud components update
  3. 确保已为您的项目启用 Serverless VPC Access API:

    gcloud services enable vpcaccess.googleapis.com
  4. 使用以下任一选项创建连接器:

    如需了解详情和可选的参数,请参阅 gcloud 参考文档

    • 使用现有子网创建连接器

      gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
       --region REGION \
       --subnet SUBNET_NAME \
       --subnet-project HOST_PROJECT_ID \
       --min-instances MIN \
       --max-instances MAX \
       --machine-type MACHINE_TYPE

      请替换以下内容:

      • CONNECTOR_NAME:连接器的名称,该名称遵循 Compute Engine 命名惯例,但还需注意,其长度必须少于 21 个字符,且连字符 (-) 计为 2 个字符。
      • REGION:连接器的区域,与无服务器服务或作业的区域相匹配。如果您的服务或作业位于 us-centraleurope-west 区域,请使用 us-central1europe-west1
      • SUBNET_NAME:现有子网的名称。
      • HOST_PROJECT_ID:共享 VPC 宿主项目 ID。如果连接器和现有子网位于同一项目中,请省略 --subnet-project 标志。
      • MIN:用于连接器的实例数下限。请使用介于 2(默认值)到 9 之间的整数。
      • MAX:用于连接器的实例数上限。请使用介于 310(默认值)之间的整数。如果连接器扩容到实例数上限,便不会再缩减回来。
      • MACHINE_TYPE:必须是以下值之一:f1-microe2-microe2-standard-4
    • 创建连接器和新子网

      gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
       --region REGION \
       --network VPC_NETWORK \
       --range IP_RANGE
       --min-instances MIN \
       --max-instances MAX \
       --machine-type MACHINE_TYPE

      请替换以下内容:

      • CONNECTOR_NAME:连接器的名称,该名称遵循 Compute Engine 命名惯例,但还需注意,其长度必须少于 21 个字符,且连字符 (-) 计为 2 个字符。
      • REGION:连接器的区域,与无服务器服务或作业的区域相匹配。如果您的服务或作业位于 us-centraleurope-west 区域,请使用 us-central1europe-west1
      • VPC_NETWORK:要将连接器连接到的 VPC 网络的名称。连接器和 VPC 网络必须位于同一项目中。
      • IP_RANGE:提供一个未使用的 /28 CIDR(例如 10.8.0.0/28),用作 Google Cloud 在连接器的 VPC 网络中创建的新子网的主要 IPv4 地址范围。确保此 IP 范围与连接器的 VPC 网络中的所有现有路由都不冲突。新子网的名称以“aet-”前缀开头。
      • MIN:用于连接器的实例数下限。请使用介于 2(默认值)到 9 之间的整数。
      • MAX:用于连接器的实例数上限。请使用介于 310(默认值)之间的整数。如果连接器扩容到实例数上限,便不会再缩减回来。
      • MACHINE_TYPE:必须是以下值之一:f1-microe2-microe2-standard-4
  5. 在使用之前,验证连接器处于 READY 状态:

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region REGION

    替换以下内容:

    • CONNECTOR_NAME:连接器的名称;这是您在上一步中指定的名称。
    • REGION:连接器的区域;这是您在上一步中指定的区域。

    输出应包含 state: READY 行。

Terraform

您可以使用 Terraform 资源启用 vpcaccess.googleapis.com API。

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

您可以使用 Terraform 模块创建 VPC 网络和子网,然后创建连接器。

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-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

配置函数以连接到 VPC 网络

您必须将每个函数配置为使用无服务器 VPC 访问通道连接器来连接到 VPC 网络以发送出站流量。您可以通过 Google Cloud 控制台或 Google Cloud CLI 将函数配置为使用连接器:

控制台

  1. 前往 Cloud Run 函数

  2. 如果要配置新函数,请点击创建函数。如果您要配置现有函数,请点击该函数,然后点击修改

  3. 如果您要配置新函数,请根据需要填写初始函数设置页面,然后点击运行时、构建...展开函数配置页面。

  4. 点击连接标签页,然后在“出站流量设置”下,从 VPC 网络菜单中选择以下选项之一:

    • 如需断开函数与 VPC 网络的连接,请选择
    • 如需使用现有连接器,请从下拉列表中选择,或者选择自定义以使用下拉列表中未显示的现有连接器。
    • 如需创建新的连接器,请选择添加新的 VPC 连接器。(预览版

    如需详细了解如何创建连接器,请参阅创建无服务器 VPC 访问通道连接器

  5. 点击下一步

gcloud

使用 gcloud functions deploy 命令部署该函数并指定 --vpc-connector 标志:

gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
FLAGS...

其中:

  • FUNCTION_NAME 是函数的名称。
  • CONNECTOR_NAME 是连接器的名称。
  • FLAGS... 是指在函数部署期间传递的其他标志。

使用 --clear-vpc-connector 标志断开函数与 VPC 网络的连接:

gcloud functions deploy FUNCTION_NAME \
--clear-vpc-connector \
FLAGS...

如需更好地控制通过连接器路由哪些请求,请参阅出站流量设置

访问 VPC 资源

服务项目中连接器的必需防火墙规则

如果您在独立 VPC 网络或共享 VPC 网络的宿主项目中创建连接器,Google Cloud 会为连接器的操作创建所有必需的防火墙规则。如需了解详情,请参阅适用于独立 VPC 网络或共享 VPC 主机项目中的连接器的防火墙规则

但是,如果您在服务项目中创建连接器,并且该连接器连接宿主项目中的共享 VPC 网络,则必须添加防火墙规则,以允许来自以下范围的连接器操作所需的流量:

这些范围由 Google 基础设施底层 Cloud Run、Cloud Run functions 和 App Engine 标准环境使用。来自这些 IP 地址的所有请求都来自 Google 基础设施,以确保每个无服务器资源仅与其所连接的连接器进行通信。

您还必须允许从连接器的子网到 VPC 网络中的资源的流量。

要执行这些步骤,您必须在宿主项目上拥有以下角色之一:

对于基本配置,请应用规则,以允许连接到共享 VPC 网络的任何服务项目中的无服务器资源将请求发送到网络中的任何资源。

如需应用这些规则,请在宿主项目中运行以下命令:

  1. 创建防火墙规则,以允许来自 Google 无服务器基础设施的请求和健康检查探测到达网络中的所有连接器。在这些命令中,UDP 端口和 TCP 端口分别用作代理和用于 HTTP 健康检查。请勿更改指定的端口。

    gcloud compute firewall-rules create serverless-to-vpc-connector \
        --allow tcp:667,udp:665-666,icmp \
        --source-ranges=35.199.224.0/19 \
        --direction=INGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
        --allow tcp:667,udp:665-666,icmp \
        --destination-ranges=35.199.224.0/19 \
        --direction=EGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
        --allow tcp:667 \
        --source-ranges=35.191.0.0/16,35.191.192.0/18,130.211.0.0/22 \
        --direction=INGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK

    VPC_NETWORK 替换为要将连接器连接到的 VPC 网络的名称。

  2. 在 VPC 网络上创建入站流量防火墙规则,以允许来自连接此网络的连接器的请求:

    gcloud compute firewall-rules create vpc-connector-requests \
        --allow tcp,udp,icmp \
        --direction=INGRESS \
        --source-tags vpc-connector \
        --network=VPC_NETWORK

    此规则授予连接器对网络中每个资源的访问权限。如需限制您的无服务器环境可以使用无服务器 VPC 访问通道访问的资源,请参阅限制连接器虚拟机对 VPC 网络资源的访问权限

为特定连接器创建防火墙规则

按照服务项目中连接器的必需防火墙规则中的过程操作会使防火墙规则应用于所有连接器,包括当前连接器和将来创建的连接器。如果您不希望这样,而是希望仅为特定的连接器创建规则,您可以限制规则的范围,使其仅应用于这些连接器。

要将规则的范围限制为特定连接器,您可以使用以下机制之一:

  • 网络标记:每个连接器都有两个网络标记:vpc-connectorvpc-connector-REGION-CONNECTOR_NAME。使用后一种格式将防火墙规则的范围限制为特定的连接器。
  • IP 范围:仅用于出站流量规则,因为它不适用于入站流量规则。您可以使用连接器子网的 IP 范围将防火墙规则范围限制为单个 VPC 连接器。

限制连接器虚拟机对 VPC 网络资源的访问权限

您可以使用 VPC 防火墙规则防火墙政策中的规则来限制连接器对其目标 VPC 网络中的资源的访问权限。您可以使用以下策略之一实施这些限制:

  • 创建入站流量规则,其目的地表示您要限制连接器虚拟机访问权限的资源,并且其来源表示连接器虚拟机。
  • 创建出站流量规则,其目标表示连接器虚拟机,其目的地表示要限制连接器虚拟机访问权限的资源。

以下示例说明了每种策略。

使用入站规则限制访问权限

选择网络标记或 CIDR 范围来控制传入您的 VPC 网络的流量。

网络标记

以下步骤介绍了如何创建入站规则,以根据连接器网络标记限制对 VPC 网络的访问权限。

  1. 确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:

  2. 拒绝您的 VPC 网络中的连接器流量。

    在您的 VPC 网络上创建优先级低于 1000 的入站防火墙规则,以拒绝来自连接器网络标记的入站流量。这会替换无服务器 VPC 访问通道默认情况下在您的 VPC 网络中创建的隐式防火墙规则。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY

    替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 deny-vpc-connector

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

      出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG:通用连接器网络标记(如果要限制对所有连接器的访问,包括将来创建的任何连接器)或唯一网络标记(如果要限制对特定连接器的访问)。

      • 通用网络标记vpc-connector
      • 唯一网络标记vpc-connector-REGION-CONNECTOR_NAME

        您需要进行如下替换:

        • REGION:您要限制的连接器所在的区域
        • CONNECTOR_NAME:您要限制的连接器的名称

      如需详细了解连接器网络标记,请参阅网络标记

    • VPC_NETWORK:您的 VPC 网络的名称

    • PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。

  3. 允许应接收连接器流量的资源接收连接器流量。

    使用 allowtarget-tags 标志创建一条入站防火墙规则,用于定位您的 VPC 网络中您希望 VPC 连接器访问的资源。将此规则的优先级设置为低于您在上一步中创建的规则的优先级值。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY

    替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 allow-vpc-connector-for-select-resources

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

    • VPC_CONNECTOR_NETWORK_TAG:通用连接器网络标记(如果要限制对所有连接器的访问,包括将来创建的任何连接器)或唯一网络标记(如果要限制对特定连接器的访问)。必须与您在上一步中指定的网络标记相匹配。

      • 通用网络标记vpc-connector
      • 唯一网络标记vpc-connector-REGION-CONNECTOR_NAME

        您需要进行如下替换:

        • REGION:您要限制的连接器所在的区域
        • CONNECTOR_NAME:您要限制的连接器的名称

      如需详细了解连接器网络标记,请参阅网络标记

    • VPC_NETWORK:您的 VPC 网络的名称

    • RESOURCE_TAG:您希望 VPC 连接器访问的 VPC 资源的网络标记

    • PRIORITY:小于您在上一步中设置的优先级值的整数。例如,如果您将在上一步中创建的规则的优先级设置为 990,请尝试 980。

如需详细了解用于创建防火墙规则的必需和可选标志,请参阅 gcloud compute firewall-rules create 的文档

CIDR 范围

以下步骤介绍了如何创建入站规则,以根据连接器的 CIDR 范围限制对 VPC 网络的访问权限。

  1. 确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:

  2. 拒绝您的 VPC 网络中的连接器流量。

    在您的 VPC 网络上创建优先级低于 1000 的入站防火墙规则,以拒绝来自连接器的 CIDR 范围的入站流量。这会替换无服务器 VPC 访问通道默认情况下在您的 VPC 网络中创建的隐式防火墙规则。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY

    替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 deny-vpc-connector

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

      出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_CIDR_RANGE:您要限制其访问权限的连接器的 CIDR 范围

    • VPC_NETWORK:您的 VPC 网络的名称

    • PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。

  3. 允许应接收连接器流量的资源接收连接器流量。

    使用 allowtarget-tags 标志创建一条入站防火墙规则,用于定位您的 VPC 网络中您希望 VPC 连接器访问的资源。将此规则的优先级设置为低于您在上一步中创建的规则的优先级值。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY

    替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 allow-vpc-connector-for-select-resources

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

    • VPC_CONNECTOR_CIDR_RANGE:您要限制其访问权限的连接器的 CIDR 范围

    • VPC_NETWORK:您的 VPC 网络的名称

    • RESOURCE_TAG:您希望 VPC 连接器访问的 VPC 资源的网络标记

    • PRIORITY:小于您在上一步中设置的优先级值的整数。例如,如果您将在上一步中创建的规则的优先级设置为 990,请尝试 980。

如需详细了解用于创建防火墙规则的必需和可选标志,请参阅 gcloud compute firewall-rules create 的文档

使用出站规则限制访问权限

以下步骤介绍了如何创建出站规则以限制连接器的访问权限。

  1. 确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:

  2. 拒绝连接器的出站流量。

    在无服务器 VPC 访问通道连接器上创建出站防火墙规则,以防止其将传出流量(已建立的响应除外)发送到任何目的地。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --direction=EGRESS \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --network=VPC_NETWORK \
    --priority=PRIORITY

    请替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 deny-vpc-connector

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

      出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG:通用 VPC 连接器网络标记 - 如果您希望将此规则应用于所有现有 VPC 连接器和未来的任何 VPC 连接器。或者,如果要控制特定连接器,则是唯一的 VPC 连接器网络标记。

    • VPC_NETWORK:您的 VPC 网络的名称

    • PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。

  3. 当目的地位于您希望连接器访问的 CIDR 范围内时,允许出站流量。

    使用 allowdestination-ranges 标志可创建一条防火墙规则,以允许来自连接器的出站流量进入特定目的地范围。将目的地范围设置为您的 VPC 网络中您希望连接器访问的资源的 CIDR 范围。将此规则的优先级设置为低于您在上一步中创建的规则的优先级值。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --destination-ranges=RESOURCE_CIDR_RANGE \
    --direction=EGRESS \
    --network=VPC_NETWORK \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --priority=PRIORITY

    替换以下内容:

    • RULE_NAME:新防火墙规则的名称。例如 allow-vpc-connector-for-select-resources

    • PROTOCOL:您希望 VPC 连接器允许使用的一个或多个协议。支持的协议为 tcpudp。例如,tcp:80,udp 允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅 allow 标志的文档。

    • RESOURCE_CIDR_RANGE:您要限制其访问权限的连接器的 CIDR 范围

    • VPC_NETWORK:您的 VPC 网络的名称

    • VPC_CONNECTOR_NETWORK_TAG:通用 VPC 连接器网络标记 - 如果您希望将此规则应用于所有现有 VPC 连接器和未来的任何 VPC 连接器。或者,如果要控制特定连接器,则是唯一的 VPC 连接器网络标记。如果您在上一步中使用了唯一的网络标记,请使用该唯一的网络标记。

    • PRIORITY:小于您在上一步中设置的优先级值的整数。例如,如果您将在上一步中创建的规则的优先级设置为 990,请尝试 980。

如需详细了解用于创建防火墙规则的必需和可选标志,请参阅 gcloud compute firewall-rules create 的文档

管理连接器

断开函数与 VPC 网络的连接

您可以使用 Google Cloud 控制台或 Google Cloud CLI 来断开函数与 VPC 网络的连接:

控制台

  1. 前往 Google Cloud 控制台中的 Cloud Run functions 概览页面:

    前往 Cloud Run 函数

  2. 点击现有函数以转至其详情页面,然后点击修改

  3. 点击运行时、构建...展开高级设置。

  4. 在“出站流量”设置下的连接标签页中,在 VPC 连接器字段中输入连接器的名称,或清除该字段以断开函数与 VPC 网络的连接。

gcloud

使用 --clear-vpc-connector 标志断开函数与 VPC 网络的连接:

gcloud functions deploy FUNCTION_NAME \
--clear-vpc-connector \
FLAGS...

其中:

  • FUNCTION_NAME 是函数的名称。
  • CONNECTOR_NAME 是连接器的名称。
  • FLAGS... 是指在函数部署期间传递的其他标志。

即使没有流量并断开连接,连接器也会继续产生费用。如需了解详情,请参阅价格。如果您不再需要连接器,请务必删除连接器,以避免继续计费。

更新连接器

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 API 更新和监控连接器的以下属性:

  • 机器(实例)类型
  • 实例数下限和上限
  • 最近的吞吐量、实例数和 CPU 利用率

更新机器类型

控制台

  1. 打开无服务器 VPC 访问通道概览页面。

    转到无服务器 VPC 访问通道

  2. 选择要修改的连接器,然后点击修改

  3. 实例类型列表中,选择所需的机器(实例)类型。如需了解可用的机器类型,请参阅有关吞吐量和扩缩的文档。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需更新连接器机器类型,请在终端中运行以下命令:

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
    替换以下内容:

    • CONNECTOR_NAME:连接器的名称
    • REGION:连接器的区域名称
    • MACHINE_TYPE:所需的机器类型。如需了解可用的机器类型,请参阅有关吞吐量和扩缩的文档。

减少实例数下限和上限

如需减少实例数下限和上限,您必须执行以下操作:

  1. 使用所需值创建一个新连接器。
  2. 更新服务或函数以使用新的连接器。
  3. 在迁移流量后删除旧连接器。

如需了解详情,请参阅创建无服务器 VPC 访问通道连接器

增加实例数下限和上限

控制台

  1. 打开无服务器 VPC 访问通道概览页面。

    转到无服务器 VPC 访问通道

  2. 选择要修改的连接器,然后点击修改

  3. 实例数下限字段中,选择所需的实例数下限。

    此字段的最小可能值为当前值。此字段的最大可能值是实例数上限字段中的当前值减去 1。例如,如果实例数上限字段的值为 8,则实例数下限字段的最大可能值为 7。

  4. 实例数上限字段中,选择所需的实例数上限。

    此字段的最小可能值为当前值。此字段的最大可能值为 10。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需增加连接器的实例数下限或上限,请在终端中运行以下命令:

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
    替换以下内容:

  • CONNECTOR_NAME:连接器的名称
  • REGION:连接器的区域名称
  • MIN_INSTANCES:所需的实例数下限。
    • 此字段的最小可能值是 min_instances 的当前值。如需查找当前值,请参阅查找当前特性值
    • 此字段的最大可能值是当前 max_instances 值减去 1,因为 min_instances 必须小于 max_instances。例如,如果 max_instances 为 8,则此字段的最大可能值为 7。如果您的连接器使用默认 max-instances 值 10,则此字段的最大可能值为 9。如需查找 max-instances 的值,请参阅查找当前特性值
  • MAX_INSTANCES

    • 此字段的最小可能值是 max_instances 的当前值。如需查找当前值,请参阅查找当前特性值
    • 此字段的最大可能值为 10。

    如果您只想增加实例数下限而不增加实例数上限,则仍必须指定实例数上限。 反之,如果您只想更新实例数上限而不更新实例数下限,则仍必须指定实例数下限。如需将实例数下限或上限保持为当前值,请指定其当前值。如需查找它们的当前值,请参阅查找当前特性值

查找当前特性值

如需查找连接器的当前特性值,请在终端中运行以下命令:

gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT
替换以下内容:

  • CONNECTOR_NAME:连接器的名称
  • REGION:连接器的区域名称
  • PROJECT:您的 Google Cloud 项目的名称

监控连接器使用情况

监控一段时间内的使用情况可帮助您确定何时调整连接器的设置。例如,如果 CPU 利用率出现峰值,您可以尝试增加实例数上限以获得更好的结果。或者,如果您要达到吞吐量上限,则可能需要改用更大的机器类型。

如需使用 Google Cloud 控制台显示连接器的吞吐量、实例数和 CPU 利用率指标随时间变化的图表,请执行以下操作:

  1. 打开无服务器 VPC 访问通道概览页面。

    转到无服务器 VPC 访问通道

  2. 点击您要监控的连接器的名称。

  3. 选择您要显示的天数(1 到 90 天之间)。

  4. 吞吐量图表中,将鼠标悬停在图表上以查看连接器的近期吞吐量。

  5. 实例数图表中,将鼠标悬停在图表上以查看连接器最近使用的实例数。

  6. CPU 利用率图表中,将鼠标悬停在图表上以查看连接器的近期 CPU 使用率。该图表显示了实例中第 50、第 95 和第 99 百分位的 CPU 使用率的分布情况。

删除连接器

在您删除连接器之前,请确保没有服务或作业仍与该连接器连接。

对于在共享 VPC 宿主项目中设置连接器的共享 VPC 用户,您可以使用 gcloud compute networks vpc-access connectors describe 命令列出其中存在使用给定连接器的服务或作业的项目。

如需删除连接器,请使用 Google Cloud 控制台或 Google Cloud CLI:

控制台

  1. 转到 Google Cloud 控制台中的无服务器 VPC 访问通道概览页面:

    转到无服务器 VPC 访问通道

  2. 选择要删除的连接器。

  3. 点击删除

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 使用以下 gcloud 命令删除连接器:

    gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
    

    替换以下内容:

    • CONNECTOR_NAME 替换为要删除的连接器的名称
    • REGION 替换为连接器所在的区域

管理项目的自定义约束条件

本部分介绍了如何为无服务器 VPC 访问通道连接器创建自定义约束条件,并在项目级别强制执行这些约束条件。如需了解自定义组织政策,请参阅创建和管理自定义组织政策

Google Cloud 组织政策可让您以编程方式集中控制组织的资源。作为组织政策管理员,您可以定义组织政策,这是一组称为限制条件的限制,会应用于 Google Cloud 资源层次结构中的 Google Cloud 资源及其后代。您可以在组织、文件夹或项目级强制执行组织政策。

组织政策为各种 Google Cloud 服务提供预定义限制条件。但是,如果您想要更精细地控制和自定义组织政策中受限的特定字段,还可以创建自定义组织政策。

优势

借助无服务器 VPC 访问通道,您可以使用无服务器 VPC 访问通道 API 中的大多数用户配置字段编写任意数量的自定义约束条件。例如,您可以创建自定义约束条件,指定无服务器 VPC 访问通道连接器可以使用哪些子网。

应用后,违反强制执行自定义约束条件的政策的请求会在 gcloud CLI 和无服务器 VPC 访问通道日志中显示错误消息。错误消息包含违反的自定义约束条件的 ID 和说明。

政策继承

如果您对资源强制执行政策,默认情况下,该资源的后代会继承组织政策。例如,如果您对某个文件夹强制执行一项政策,Google Cloud 会对该文件夹中的所有项目强制执行该政策。如需详细了解此行为及其更改方式,请参阅层次结构评估规则

限制

不支持指定机器类型、实例数下限或实例数上限。

准备工作

请确保您知道您的组织 ID

所需的角色

如需获得管理组织政策所需的权限,请让您的管理员为您授予组织资源的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建自定义限制条件

自定义限制条件是在 YAML 文件中,由实施组织政策的服务所支持的资源、方法、条件和操作定义的。自定义限制条件的条件使用通用表达式语言 (CEL) 进行定义。如需详细了解如何使用 CEL 构建自定义限制条件中的条件,请参阅创建和管理自定义限制条件的 CEL 部分。

如需为无服务器 VPC 访问通道自定义限制条件创建 YAML 文件,请参阅以下示例:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- vpcaccess.googleapis.com/Connector
methodTypes:
- CREATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

替换以下内容:

  • ORGANIZATION_ID:您的组织 ID,例如 123456789

  • CONSTRAINT_NAME:新的自定义限制条件的名称。 自定义限制条件必须以 custom. 开头,只能包含大写字母、小写字母或数字,例如 custom.defaultNetworkConstraint。该字段的长度上限为 70 个字符,不计算前缀。

  • CONDITION:针对受支持的服务资源的表示法编写的 CEL 条件。此字段的长度上限为 1,000 个字符。 例如 "resource.network == default"

  • ACTION:满足 condition 时要执行的操作。可以是 ALLOWDENY

  • DISPLAY_NAME:限制条件的直观易记名称。 此字段的最大长度为 200 个字符。

  • DESCRIPTION:直观易懂的限制条件说明,在违反政策时显示为错误消息,例如"Require network to not be set to default." 此字段的最大长度为 2000 个字符。

如需详细了解如何创建自定义限制条件,请参阅定义自定义限制条件

设置自定义限制条件

为新的自定义限制条件创建 YAML 文件后,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替换为自定义限制条件文件的完整路径。例如 /home/user/customconstraint.yaml。完成后,您的自定义限制条件会成为 Google Cloud 组织政策列表中的组织政策。如需验证自定义限制条件是否存在,请使用 gcloud org-policies list-custom-constraints 命令:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替换为您的组织资源的 ID。 如需了解详情,请参阅查看组织政策

强制执行自定义限制条件

如需强制执行布尔值限制条件,您可以创建引用该限制条件的组织政策,并将该组织政策应用于 Google Cloud 资源。

控制台

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到组织政策

  2. 在项目选择器中,选择要设置组织政策的项目。
  3. 组织政策页面上的列表中选择您的限制条件,以查看该限制条件的政策详情页面。
  4. 如需为该资源配置组织政策,请点击管理政策
  5. 修改政策页面,选择覆盖父级政策
  6. 点击添加规则
  7. 强制执行部分中,选择开启还是关闭此组织政策的强制执行。
  8. (可选)如需使组织政策成为基于某个标记的条件性政策,请点击添加条件。请注意,如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅设置带有标记的组织政策
  9. 如果是自定义限制条件,您可以点击测试更改来模拟此组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改
  10. 若要完成并应用组织政策,请点击设置政策。该政策最长需要 15 分钟才能生效。

gcloud

如需创建强制执行布尔值限制条件的组织政策,请创建引用该限制条件的 YAML 政策文件:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

请替换以下内容:

  • PROJECT_ID:要对其实施限制条件的项目。
  • CONSTRAINT_NAME:您为自定义限制条件定义的名称。例如,custom.defaultNetworkConstraint

如需强制执行包含限制条件的组织政策,请运行以下命令:

    gcloud org-policies set-policy POLICY_PATH
    

POLICY_PATH 替换为组织政策 YAML 文件的完整路径。该政策最长需要 15 分钟才能生效。

测试自定义限制条件

如需测试限制入站流量设置的示例,请在将网络设置为 default 的项目中部署连接器:

gcloud compute networks vpc-access connectors create org-policy-test \
    --project=PROJECT_ID \
    --region=REGION_ID \
    --network=default

输出如下所示:

Operation denied by custom org policies: ["customConstraints/custom.defaultNetworkConstraint": "Require network to not be set to default."]

常见用例的自定义组织政策示例

下表提供了一些自定义约束条件示例,这些示例可能对使用无服务器 VPC 访问通道连接器很有用:

说明 限制条件语法
要求无服务器 VPC 访问通道连接器只能使用特定网络。
    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowlistNetworks
    resourceTypes:
    - vpcaccess.googleapis.com/Connector
    methodTypes:
    - CREATE
    condition: "resource.network == 'allowlisted-network'"
    actionType: ALLOW
    displayName: allowlistNetworks
    description: Require connectors to use a specific network.
说明 限制条件语法
要求无服务器 VPC 访问通道连接器只能访问特定子网。
    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictSubnetForProject
    resourceTypes:
    - vpcaccess.googleapis.com/Connector
    methodTypes:
    - CREATE
    condition: "resource.subnet.name == 'allocated-subnet'"
    actionType: ALLOW
    displayName: restrictSubnetForProject
    description: This project is only allowed to use the subnet "allocated-subnet".

问题排查

服务账号权限

为了在 Google Cloud 项目中执行操作,无服务器 VPC 访问通道使用 Serverless VPC Access Service Agent 服务账号。此服务账号的电子邮件地址采用以下格式:

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

默认情况下,此服务账号具有 Serverless VPC Access Service Agent 角色 (roles/vpcaccess.serviceAgent)。如果您更改此账号的权限,则无服务器 VPC 访问通道操作可能会失败。

网络性能不佳或高空闲 CPU 利用率

针对数千个实例使用单个连接器可能会导致性能下降以及空闲 CPU 利用率升高。如要解决此问题,请在多个连接器之间对服务进行分片。

错误

“服务账号需要 Service Agent 角色”错误

如果您使用限制资源服务使用组织政策限制条件来阻止 Cloud Deployment Manager (deploymentmanager.googleapis.com),则您可能会看到以下错误消息:

Serverless VPC Access service account (service-<PROJECT_NUMBER>@gcp-sa-vpcaccess.iam.gserviceaccount.com) needs Serverless VPC Access Service Agent role in the project.

设置组织政策,以将 Deployment Manager 从拒绝名单中移除,或将其添加到许可名单中。

连接器创建错误

如果创建连接器发生错误,请尝试以下操作:

  • 指定与 VPC 网络中预留的任何现有 IP 地址均不重叠的 RFC 1918 内部 IP 地址范围。
  • 向您的项目授予权限,让它能使用 ID 为 serverless-vpc-access-images 的项目中的 Compute Engine 虚拟机映像。如需详细了解如何相应地更新组织政策,请参阅设置映像访问限制条件

无法访问资源

如果您指定了连接器,但仍无法访问 VPC 网络中的资源,请确保 VPC 网络上没有优先级低于 1000 的防火墙规则会拒绝来自连接器 IP 地址范围的入站流量。

如果您在共享 VPC 服务项目中配置连接器,请确保防火墙规则允许从无服务器基础设施到连接器的入站流量

“连接遭拒”错误

connection refusedconnection timeout 错误会降低网络性能,如果您收到这些错误,则在调用无服务器应用的过程中,连接数量可能会不受限制地增长。如需限制每个实例使用的连接数上限,请使用支持连接池的客户端库。如需查看有关如何使用连接池的详细示例,请参阅管理数据库连接

“找不到资源”错误

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

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

缺少服务账号的必要权限 vpcaccess.connectors.use…

首先,确保已向服务账号分配 roles/vpcaccess.user 角色。

如果您仍然遇到 VPC 连接器的权限问题,请检查它是否实际上是共享 VPC。在这种情况下,宿主项目需要进行额外设置

后续步骤