连接到 VPC 网络
本页介绍如何将 Cloud Run 服务或作业连接到 VPC 网络,从而允许从 Cloud Run 到 Compute Engine 虚拟机实例、Memorystore 实例以及具有内部 IP 地址的任何其他资源的出站流量。
您可以配置无服务器 VPC 访问通道连接器或使用直接 VPC 出站流量,以允许您的服务或作业将流量发送到 VPC 网络,无需连接器。
准备工作
如果您的项目中还没有 VPC 网络,请创建一个 VPC 网络。
如果您使用共享 VPC,请参阅专门介绍为您的产品配置无服务器 VPC 访问通道的文档。
- Cloud Run:连接到共享 VPC 网络
- Cloud Functions:连接到共享 VPC 网络
- App Engine:连接到共享 VPC 网络
如果您的组织政策限制条件阻止使用 Cloud Deployment Manager,则您将无法创建或删除无服务器 VPC 访问通道连接器。创建或删除连接器需要 Deployment Manager 功能。
限制
不支持 IPv6 流量。
创建连接器
如需在不使用公共互联网的情况下向您的 VPC 网络发送请求并接收相应的响应,您可以使用无服务器 VPC 访问通道连接器。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建连接器。
控制台
转到 Serverless VPC Access 概览页面。
点击创建连接器。
在名称字段中,为连接器输入名称。该名称必须符合 Compute Engine 命名惯例,但还需注意,长度不得超过 21 个字符,且连字符 (-) 计为 2 个字符。
在区域字段中,选择连接器的区域。此区域必须与您的无服务器服务的区域相匹配。
如果您的服务或作业位于
us-central
或europe-west
区域,请使用us-central1
或europe-west1
。在网络字段中,选择要将连接器连接到的 VPC 网络。
点击子网菜单。每个连接器都需要有自己的
/28
子网来放置连接器实例。其他资源(例如虚拟机、Private Service Connect 或负载均衡器)不能使用子网。如果您使用的是共享 VPC(需要使用您自己的子网),请选择未使用的
/28
子网。 如需确认您的子网未用于 Private Service Connect 或 Cloud Load Balancing,请通过在 gcloud CLI 中运行以下命令来检查子网purpose
是否为PRIVATE
:gcloud compute networks subnets describe SUBNET
替换以下内容:- SUBNET:您的子网的名称
如果您不使用共享 VPC,请为连接器创建子网,或者从菜单中选择自定义 IP 范围,让连接器创建子网。
在 IP 范围字段中,输入未预留的 CIDR
/28
内部 IP 范围中的第一个地址。此 IP 范围不得与 VPC 网络中预留的任何现有 IP 地址重叠。例如,10.8.0.0
(/28
) 将适用于大多数新项目。创建的子网处于隐藏状态,不能在防火墙规则和 NAT 配置中使用。
在 Google Cloud 控制台中查看当前预留的 IP 地址范围。
详细了解使用子网。
(可选)如需设置扩缩选项以更好地控制连接器,请点击显示扩缩设置以显示扩缩表单。
- 设置连接器的实例数下限和上限,或使用默认值 2(下限)和 10(上限)。如果流量需要,连接器会扩容到指定的上限,但流量下降时,连接器实例数量不会缩减回来。
您必须使用介于
2
和10
之间的值。 - 在实例类型菜单中,选择要用于连接器的机器类型,或者使用默认的
e2-micro
。当您选择实例类型时,请注意右侧的费用边栏,其中显示带宽和费用估算值。
- 设置连接器的实例数下限和上限,或使用默认值 2(下限)和 10(上限)。如果流量需要,连接器会扩容到指定的上限,但流量下降时,连接器实例数量不会缩减回来。
您必须使用介于
点击创建。
准备就绪后,连接器名称旁边会出现绿色的对勾标记。
gcloud
-
In the Google Cloud console, 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.
将
gcloud
组件更新到最新版本:gcloud components update
确保已为您的项目启用 Serverless VPC Access API:
gcloud services enable vpcaccess.googleapis.com
如果您使用的是共享 VPC(需要使用您自己的子网),请使用以下命令创建连接器:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region REGION \ --subnet SUBNET \ # If you are not using Shared VPC, omit the following line. --subnet-project HOST_PROJECT_ID \ # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max. --min-instances MIN \ --max-instances MAX \ # Optional: specify machine type, default is e2-micro --machine-type MACHINE_TYPE
替换以下内容:
CONNECTOR_NAME
:连接器的名称。该名称必须符合 Compute Engine 命名惯例,但还需注意,长度不得超过 21 个字符,且连字符 (-) 计为 2 个字符。REGION
:连接器的区域;此区域必须与无服务器服务或作业的区域相匹配。如果您的服务或作业位于us-central
或europe-west
区域,请使用us-central1
或europe-west1
。SUBNET
:未使用的/28
子网的名称。HOST_PROJECT_ID
:宿主项目的 ID;仅在您使用共享 VPC 时提供。MIN
:用于连接器的实例数下限。请使用介于2
到9
之间的整数。默认值为2
。如需了解连接器扩缩,请参阅吞吐量和扩缩。MAX
:用于连接器的实例数上限。请使用介于3
到10
之间的整数。默认值为10
。如果流量需要,连接器会扩容到[MAX]
个实例,但不会缩减。如需了解连接器扩缩,请参阅吞吐量和扩缩。MACHINE_TYPE
:f1-micro
、e2-micro
或e2-standard-4
。如需了解连接器吞吐量,包括机器类型和扩缩,请参阅吞吐量和扩缩。
如需了解详情和可选的参数,请参阅
gcloud
参考文档。如果您不使用共享 VPC,并且希望提供自定义 IP 范围而不是使用现有子网,请使用以下命令创建连接器:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --network VPC_NETWORK \ --region REGION \ --range IP_RANGE
请替换以下内容:
CONNECTOR_NAME
:连接器的名称。该名称必须符合 Compute Engine 命名惯例,但还需注意,长度不得超过 21 个字符,且连字符 (-
) 计为 2 个字符。VPC_NETWORK
:要将连接器附加到的 VPC 网络。REGION
:连接器的区域。此区域必须与您的无服务器服务或作业的区域相匹配。如果您的服务或作业位于us-central
或europe-west
区域,请使用us-central1
或europe-west1
。IP_RANGE
:未预留的内部 IP 网络,必须提供/28
的未分配空间。提供的值是采用 CIDR 表示法的网络 (10.8.0.0/28
)。此 IP 范围不得与 VPC 网络中预留的任何现有 IP 地址重叠。例如,10.8.0.0/28
适用于大多数新项目。 为此范围创建的子网处于隐藏状态,不能在防火墙规则和 NAT 配置中使用。
如需了解详情和可选的参数(例如吞吐量控制),请参阅
gcloud
参考文档。在使用之前,验证连接器处于
READY
状态:gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \ --region REGION
替换以下内容:
CONNECTOR_NAME
:连接器的名称;这是您在上一步中指定的名称。REGION
:连接器的区域;这是您在上一步中指定的区域。
输出应包含
state: READY
行。
Terraform
您可以使用 Terraform 资源启用 vpcaccess.googleapis.com
API。
您可以使用 Terraform 模块创建 VPC 网络和子网,然后创建连接器。
将无服务器环境配置为使用连接器
创建无服务器 VPC 访问通道连接器后,请按照您的无服务器环境的相关说明,将无服务器环境配置为使用连接器:
将 Cloud Run 配置为使用连接器
创建新服务或部署新的修订版本时,您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 文件或 Terraform 资源将服务配置为使用连接器。
控制台
在 Google Cloud 控制台中,前往 Cloud Run:
如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。
点击连接标签。
- 在 VPC 连接器字段中,选择要使用的连接器或者选择无以断开服务与 VPC 网络的连接。
点击创建或部署。
gcloud
-
In the Google Cloud console, 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.
要在部署期间指定连接器,请使用
--vpc-connector
标志:gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
- 将
SERVICE
替换为服务的名称。 - 替换
IMAGE_URL
。 - 将
CONNECTOR_NAME
替换为连接器的名称。 如果连接器位于共享 VPC 的宿主项目中,则该名称必须是完整指定的名称,例如:projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
,其中 HOST_PROJECT_ID 是宿主项目的 ID,CONNECTOR_REGION 是连接器的区域,CONNECTOR_NAME 是您为连接器指定的名称。
要挂接、更新或移除现有服务的连接器,请根据需要使用
gcloud run services update
命令并添加以下任一标志:例如,要挂接或更新连接器,请使用以下命令:
gcloud run services update SERVICE --vpc-connector CONNECTOR_NAME
- 将
SERVICE
替换为服务的名称。 - 将
CONNECTOR_NAME
替换为连接器的名称。
- 将
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
在顶级
spec
特性下的annotations
特性下添加或更新run.googleapis.com/vpc-access-connector
特性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
- 将
SERVICE
替换为您的 Cloud Run 服务的名称。 - 将
CONNECTOR_NAME
替换为连接器的名称。 如果连接器位于共享 VPC 的宿主项目中,则该名称必须是完整指定的名称,例如:projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
,其中 HOST_PROJECT_ID 是宿主项目的 ID,CONNECTOR_REGION 是连接器的区域,CONNECTOR_NAME 是您为连接器指定的名称。
- 将
使用以下命令将服务替换为其新配置:
gcloud beta run services replace service.yaml
Terraform
您可以使用 Terraform 资源创建服务,并将其配置为使用您的连接器。
将 Cloud Functions 配置为使用连接器
您可以通过 Google Cloud 控制台或 Google Cloud CLI 将函数配置为使用连接器:
控制台
转到 Google Cloud 控制台中的 Cloud Functions 概览页面:
点击创建函数。或者,点击现有函数以转至其详情页面,然后点击修改。
点击运行时、构建和连接设置以展开高级设置。
在“出站流量设置”下的连接标签页中,在 VPC 连接器字段中输入连接器的名称。
gcloud
-
In the Google Cloud console, 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.
使用
gcloud functions deploy
命令部署该函数并指定--vpc-connector
标志:gcloud functions deploy FUNCTION_NAME \ --vpc-connector CONNECTOR_NAME \ FLAGS...
其中:
FUNCTION_NAME
是函数的名称。CONNECTOR_NAME
是连接器的名称。 如果连接器位于共享 VPC 的宿主项目中,则该名称必须是完整指定的名称,例如:projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
,其中 HOST_PROJECT_ID 是宿主项目的 ID,CONNECTOR_REGION 是连接器的区域,CONNECTOR_NAME 是您为连接器指定的名称。FLAGS...
是指在函数部署期间传递的其他标志。
如需更好地控制通过连接器路由哪些请求,请参阅出站流量设置。
将 App Engine 配置为使用连接器
Python 2
停用 App Engine URL Fetch 服务。
默认情况下,所有请求均通过 URL Fetch 服务进行路由。这会导致对 VPC 网络的请求失败。如需停用此默认设置,请参阅禁止 URL Fetch 处理所有出站请求。
如有需要,您仍然可以直接使用
urlfetch
库来处理各个请求,但不建议这样做。将无服务器 VPC 访问通道字段添加到
app.yaml
文件:vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
替换以下内容:
- 将
PROJECT_ID
替换为 Google Cloud 项目 ID。 如果连接器位于共享 VPC 的宿主项目中,则必须是宿主项目的 ID。 - 将
REGION
替换为连接器所在的区域。 - 将
CONNECTOR_NAME
替换为连接器的名称。
- 将
部署该服务:
gcloud app deploy
部署服务后,服务将可以向内部 IP 地址发送请求,从而访问 VPC 网络中的资源。
Java 8
停用 App Engine URL Fetch 服务
URLFetchService
。将无服务器 VPC 访问通道元素添加到服务的
appengine-web.xml
文件:<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> </vpc-access-connector>
替换以下内容:
- 将
PROJECT_ID
替换为 Google Cloud 项目 ID。 如果连接器位于共享 VPC 的宿主项目中,则必须是宿主项目的 ID。 - 将
REGION
替换为连接器所在的区域。 - 将
CONNECTOR_NAME
替换为连接器的名称。
- 将
部署该服务:
gcloud app deploy WEB-INF/appengine-web.xml
部署服务后,服务将可以向内部 IP 地址发送请求,从而访问 VPC 网络中的资源。
Go 1.11
停用 App Engine URL Fetch 服务。
无服务器 VPC 访问通道不支持 URL Fetch,并且使用 URL Fetch 发出的请求将忽略无服务器 VPC 访问通道设置。请改用套接字建立出站连接。
将无服务器 VPC 访问通道字段添加到
app.yaml
文件:vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
替换以下内容:
- 将
PROJECT_ID
替换为您的 Google Cloud 项目 ID - 将
REGION
替换为连接器所在的区域 - 将
CONNECTOR_NAME
替换为连接器的名称
- 将
部署该服务:
gcloud app deploy
部署服务后,服务将可以向内部 IP 地址发送请求,从而访问 VPC 网络中的资源。
所有其他运行时
将无服务器 VPC 访问通道字段添加到
app.yaml
文件:vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
替换以下内容:
- 将
PROJECT_ID
替换为 Google Cloud 项目 ID。 如果连接器位于共享 VPC 的宿主项目中,则必须是宿主项目的 ID。 - 将
REGION
替换为连接器所在的区域。 - 将
CONNECTOR_NAME
替换为连接器的名称。
- 将
部署该服务:
gcloud app deploy
部署服务后,服务将可以向内部 IP 地址发送请求,从而访问 VPC 网络中的资源。
配置没有连接器的 Cloud Run 环境
您可以启用 Cloud Run 服务,将出站流量直接发送到 VPC 网络,从而允许访问 Compute Engine 虚拟机实例、Memorystore 实例以及具有内部 IP 地址的任何其他资源。
在不使用连接器的情况下配置服务
借助直接 VPC 出站流量,您的 Cloud Run 服务可以将流量发送到没有无服务器 VPC 访问通道连接器的 VPC 网络。与服务本身一样,网络费用缩减至零。您还可以直接在 Cloud Run 服务修订版本上使用网络标记,以实现更精细的网络安全性。
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 通过服务配置直接 VPC 出站流量。
控制台
如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置和部署现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。
点击网络标签页。
点击连接到 VPC 以获取出站流量。
点击将流量直接发送到 VPC。
在网络字段中,选择要向其发送流量的 VPC 网络。
在子网字段中,选择您的服务用于接收 IP 地址的子网。 您可以在同一子网上部署多个服务。
可选:输入要与服务关联的网络标记的名称。网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如
network-tag-2
。在流量路由部分,选择以下选项之一:
- 仅将请求路由到 VPC 的专用 IP,以便通过 VPC 网络将流量仅发送到内部地址。
- 将所有流量路由到 VPC,以通过 VPC 网络发送所有出站流量。
点击创建或部署。
如需验证您的服务是否在 VPC 网络上,请点击该服务,然后点击网络标签页。VPC 卡片中列出了网络和子网。
现在,您可以根据防火墙规则允许将来自 Cloud Run 服务的请求发送到 VPC 网络上的任何资源。
gcloud
如需通过 Google Cloud CLI 部署没有连接器的 Cloud Run 服务,请执行以下操作:
确保已为您的项目启用了 Compute Engine API:
gcloud services enable compute.googleapis.com
使用以下命令部署 Cloud Run 服务:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
您需要将其中的:
- 将 SERVICE_NAME 替换为您的 Cloud Run 服务的名称。
- 将 IMAGE_URL 替换为对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- 将 NETWORK 替换为 VPC 网络的名称。
-
将 SUBNET 替换为您的子网名称。 子网必须至少为
/26
或更大。直接 VPC 出站流量支持 IPv4 范围 RFC 1918、RFC 6598 和 E 类。您可以在同一子网上部署或执行多个服务或作业,但该子网不能由任何现有连接器共享。 - 可选:将 NETWORK_TAG_NAMES 替换为要与服务关联的网络标记的名称。对于服务,网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如
network-tag-2
。 - 将 EGRESS_SETTING 替换为出站流量设置值:
all-traffic
:通过 VPC 网络发送所有出站流量。private-ranges-only
:仅发送通过 VPC 网络发送到内部地址的流量。
- 将 REGION 替换为您的服务的区域。
如需验证您的服务是否在 VPC 网络上,请运行以下命令:
gcloud run services describe SERVICE_NAME \ --region=REGION
您需要将其中的:
- 将
SERVICE_NAME
替换为您的服务名称。 - 将
REGION
替换为您在上一步中指定的服务的区域。
输出应包含网络的名称、子网和出站流量设置,例如:
VPC access: Network: default Subnet: subnet Egress: private-ranges-only
- 将
现在,您可以根据防火墙规则允许将来自 Cloud Run 服务的请求发送到 VPC 网络上的任何资源。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
更新以下属性:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
您需要在其中:
- 将 SERVICE_NAME 替换为您的 Cloud Run 服务的名称。服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 REGION 替换为 Cloud Run 服务的区域,该区域必须与子网的区域一致。
- 将 NETWORK 替换为 VPC 网络的名称。
-
将 SUBNET 替换为您的子网名称。 子网必须至少为
/26
或更大。直接 VPC 出站流量支持 IPv4 范围 RFC 1918、RFC 6598 和 E 类。您可以在同一子网上部署或执行多个服务或作业,但该子网不能由任何现有连接器共享。 - 可选:将 NETWORK_TAG_NAMES 替换为要与服务关联的网络标记的名称。对于服务,网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如
network-tag-2
。 - 将 EGRESS_SETTING 替换为出站流量设置值:
all-traffic
:通过 VPC 网络发送所有出站流量。private-ranges-only
:仅发送通过 VPC 网络发送到内部地址的流量。
- 将 IMAGE 替换为服务容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
请将以下内容添加到
main.tf
文件:
(可选)如果您想允许对服务进行未经身份验证的访问,请将服务设为公开。
在不使用连接器的情况下配置作业
借助直接 VPC 出站流量,您的 Cloud Run 作业可以将流量发送到没有无服务器 VPC 访问通道连接器的 VPC 网络。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 通过作业配置直接 VPC 出站流量。
控制台
如果您要配置新作业,请点击作业标签页,然后根据需要填写初始作业设置页面。如果要配置现有作业,请点击作业,然后点击修改。
点击容器、变量和 Secret、连接、安全性以展开作业属性页面。
点击连接标签页。
点击连接到 VPC 以获取出站流量。
点击将流量直接发送到 VPC。
在网络字段中,选择要向其发送流量的 VPC 网络。
在子网字段中,选择您的作业用于接收 IP 地址的子网。 您可以在同一子网上执行多个作业。
在流量路由部分,选择以下选项之一:
- 仅将请求路由到 VPC 的专用 IP,以便通过 VPC 网络将流量仅发送到内部地址。
- 将所有流量路由到 VPC,以通过 VPC 网络发送所有出站流量。
可选:输入要与服务关联的网络标记的名称。网络标记在修订版本级指定。每个服务修订版本都可以有不同的网络标记,例如
network-tag-2
。可选:输入要与作业关联的网络标记的名称。对于作业,网络标记在执行级指定。每个作业执行都可以具有不同的网络标记,例如
network-tag-2
。点击创建或更新。
如需验证您的作业是否在 VPC 网络上,请点击该作业,然后点击配置标签页。VPC 卡片中列出了网络和子网。
现在,您可以根据防火墙规则允许执行 Cloud Run 作业,并将作业的请求发送到 VPC 网络上的任何资源。
gcloud
如需在 Google Cloud CLI 中创建没有连接器的 Cloud Run 作业,请执行以下操作:
确保已为您的项目启用了 Compute Engine API:
gcloud services enable compute.googleapis.com
使用以下命令创建 Cloud Run 作业:
gcloud run jobs create JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
您需要将其中的:
- 将 JOB_NAME 替换为 Cloud Run 作业的名称。
- 将 IMAGE_URL 替换为对容器映像的引用(例如
us-docker.pkg.dev/cloudrun/container/job:latest
)。 - 将 NETWORK 替换为 VPC 网络的名称。
-
将 SUBNET 替换为您的子网名称。 子网必须至少为
/26
或更大。直接 VPC 出站流量支持 IPv4 范围 RFC 1918、RFC 6598 和 E 类。您可以在同一子网上部署或执行多个服务或作业,但该子网不能由任何现有连接器共享。 - 可选:将 NETWORK_TAG_NAMES 替换为要与作业关联的网络标记的名称。对于作业,网络标记在执行级指定。每个作业执行都可以具有不同的网络标记,例如
network-tag-2
。 - 将 EGRESS_SETTING 替换为出站流量设置值:
all-traffic
:通过 VPC 网络发送所有出站流量。private-ranges-only
:仅发送通过 VPC 网络发送到内部地址的流量。
- 将 REGION 替换为作业的区域。
如需验证作业是否在 VPC 网络中,请运行以下命令:
gcloud run jobs describe JOB_NAME \ --region=REGION
您需要将其中的:
- 将
JOB_NAME
替换为作业的名称。 - 将
REGION
替换为您在上一步中指定的作业的区域。
输出应包含网络和子网的名称,例如:
VPC network: Network: default Subnet: default
- 将
现在,您可以根据防火墙规则允许执行 Cloud Run 作业,并将作业的请求发送到 VPC 网络上的任何资源。
YAML
如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置:
gcloud run jobs describe JOB_NAME --format export > job.yaml
更新以下属性:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME annotations: run.googleapis.com/launch-stage: BETA labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
您需要在其中:
- 将 JOB_NAME 替换为 Cloud Run 作业的名称。 作业名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 REGION 替换为 Cloud Run 作业的区域,该区域必须与子网的区域一致。
- 将 NETWORK 替换为 VPC 网络的名称。
-
将 SUBNET 替换为您的子网名称。 子网必须至少为
/26
或更大。直接 VPC 出站流量支持 IPv4 范围 RFC 1918、RFC 6598 和 E 类。您可以在同一子网上部署或执行多个服务或作业,但该子网不能由任何现有连接器共享。 - 可选:将 NETWORK_TAG_NAMES 替换为要与作业关联的网络标记的名称。对于作业,网络标记在执行级指定。每个作业执行都可以具有不同的网络标记,例如
network-tag-2
。 - 将 EGRESS_SETTING 替换为出站流量设置值:
all-traffic
:通过 VPC 网络发送所有出站流量。private-ranges-only
:仅发送通过 VPC 网络发送到内部地址的流量。
- 将 IMAGE 替换为作业容器映像的网址。
使用以下命令创建或更新作业:
gcloud run jobs replace job.yaml
访问 VPC 资源
允许从无服务器基础架构到连接器的入站流量
您的连接器虚拟机必须能够从 Google Cloud 外部 IP 地址范围 35.199.224.0/19
接收数据包。此范围由底层 Google 无服务器基础架构使用,以确保 Cloud Run、Cloud Functions 和 App Engine 中的服务可以将数据包发送到连接器。
如果连接器与目标 VPC 网络位于同一项目中,则无服务器 VPC 访问通道通过允许来自 35.199.224.0/19
的数据包来创建适用于连接器虚拟机的入站流量允许防火墙规则。当连接器连接独立 VPC 网络或连接器连接共享 VPC 网络且连接器位于宿主项目中时,连接器及其目标 VPC 网络位于同一项目中。
如果您在共享 VPC 服务项目中创建连接器,则共享 VPC 宿主项目的 Security Admin 或 Project Owner 必须创建适用于允许来自 35.199.224.0/19
的数据包的连接器虚拟机的入站流量允许防火墙规则。以下是入站流量允许 VPC 防火墙规则示例:
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --rules=TCP \ --source-ranges=35.199.224.0/19 \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY \ --project=PROJECT_ID
请替换以下内容:
- RULE_NAME:新防火墙规则的名称。例如
allow-vpc-connector-ingress
。 - VPC_CONNECTOR_NETWORK_TAG:通用连接器网络标记
vpc-connector
可用于将规则应用于 VPC 网络中的所有连接器。或者,您可以使用特定于连接器的网络标记。特定的网络标记采用以下格式:vpc-connector-
REGION-
CONNECTOR_NAME,其中 REGION 是连接器的 Google Cloud 区域,CONNECTOR_NAME 是其名称。 - VPC_NETWORK:连接器连接的 VPC 网络的名称。
- PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。
- PROJECT_ID:连接器连接的 VPC 网络所属项目的 ID。
限制连接器虚拟机访问 VPC 网络资源
您可以使用 VPC 防火墙规则或防火墙政策中的规则来限制连接器对其目标 VPC 网络中的资源的访问权限。您可以使用以下策略之一实施这些限制:
- 创建入站流量规则,其目的地表示您要限制连接器虚拟机访问权限的资源,并且其来源表示连接器虚拟机。
- 创建出站流量规则,其目标表示连接器虚拟机,其目的地表示要限制连接器虚拟机访问权限的资源。
以下示例说明了每种策略。
使用入站规则限制访问权限
选择网络标记或 CIDR 范围来控制传入您的 VPC 网络的流量。
网络标记
以下步骤介绍了如何创建入站规则,以根据连接器网络标记限制对 VPC 网络的访问权限。
确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:
- 计算安全管理员角色
- 启用了
compute.firewalls.create
权限的自定义 IAM 角色
拒绝您的 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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,tcp:80,udp
允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅allow
标志的文档。出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:
ah
、all
、esp
、icmp
、ipip
和sctp
。VPC_CONNECTOR_NETWORK_TAG:通用连接器网络标记(如果要限制对所有连接器的访问,包括将来创建的任何连接器)或唯一网络标记(如果要限制对特定连接器的访问)。
- 通用网络标记:
vpc-connector
唯一网络标记:
vpc-connector-REGION-CONNECTOR_NAME
您需要进行如下替换:
- REGION:您要限制的连接器所在的区域
- CONNECTOR_NAME:您要限制的连接器的名称
如需详细了解连接器网络标记,请参阅网络标记。
- 通用网络标记:
VPC_NETWORK:您的 VPC 网络的名称
PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。
允许应接收连接器流量的资源接收连接器流量。
使用
allow
和target-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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,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 网络的访问权限。
确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:
- 计算安全管理员角色
- 启用了
compute.firewalls.create
权限的自定义 IAM 角色
拒绝您的 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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,tcp:80,udp
允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅allow
标志的文档。出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:
ah
、all
、esp
、icmp
、ipip
和sctp
。VPC_CONNECTOR_CIDR_RANGE:您要限制其访问权限的连接器的 CIDR 范围
VPC_NETWORK:您的 VPC 网络的名称
PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。
允许应接收连接器流量的资源接收连接器流量。
使用
allow
和target-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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,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
的文档。
使用出站规则限制访问权限
以下步骤介绍了如何创建出站规则以限制连接器的访问权限。
确保您拥有插入防火墙规则所需的权限。您必须拥有以下 Identity and Access Management (IAM) 角色之一:
- 计算安全管理员角色
- 启用了
compute.firewalls.create
权限的自定义 IAM 角色
拒绝连接器的出站流量。
在无服务器 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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,tcp:80,udp
允许流经端口 80 的 TCP 流量,以及 UDP 流量。如需了解详情,请参阅allow
标志的文档。出于安全和验证目的,您还可以配置拒绝规则来阻止以下不受支持的协议的流量:
ah
、all
、esp
、icmp
、ipip
和sctp
。VPC_CONNECTOR_NETWORK_TAG:通用 VPC 连接器网络标记 - 如果您希望将此规则应用于所有现有 VPC 连接器和未来的任何 VPC 连接器。或者,如果要控制特定连接器,则是唯一的 VPC 连接器网络标记。
VPC_NETWORK:您的 VPC 网络的名称
PRIORITY:介于 0 到 65535 之间的整数。例如,0 设置最高优先级。
当目的地位于您希望连接器访问的 CIDR 范围内时,允许出站流量。
使用
allow
和destination-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 连接器允许使用的一个或多个协议。支持的协议为
tcp
或udp
。例如,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
的文档。
更新连接器
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 API 更新和监控连接器的以下属性:
- 机器(实例)类型
- 实例数下限和上限
- 最近的吞吐量、实例数和 CPU 利用率
更新机器类型
控制台
转到 Serverless VPC Access 概览页面。
选择要修改的连接器,然后点击修改。
在实例类型列表中,选择所需的机器(实例)类型。如需了解可用的机器类型,请参阅有关吞吐量和扩缩的文档。
gcloud
-
In the Google Cloud console, 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.
如需更新连接器机器类型,请在终端中运行以下命令:
gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
替换以下内容:CONNECTOR_NAME
:连接器的名称REGION
:连接器的区域名称MACHINE_TYPE
:所需的机器类型。如需了解可用的机器类型,请参阅有关吞吐量和扩缩的文档。
减少实例数下限和上限
如需减少实例数下限和上限,您必须执行以下操作:
- 使用所需值创建一个新连接器。
- 更新服务或函数以使用新的连接器。
- 在迁移流量后删除旧连接器。
如需了解详情,请参阅创建无服务器 VPC 访问通道连接器。
增加实例数下限和上限
控制台
转到 Serverless VPC Access 概览页面。
选择要修改的连接器,然后点击修改。
在实例数下限字段中,选择所需的实例数下限。
此字段的最小可能值为当前值。此字段的最大可能值是实例数上限字段中的当前值减去 1。例如,如果实例数上限字段的值为 8,则实例数下限字段的最大可能值为 7。
在实例数上限字段中,选择所需的实例数上限。
此字段的最小可能值为当前值。此字段的最大可能值为 10。
gcloud
-
In the Google Cloud console, 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.
如需增加连接器的实例数下限或上限,请在终端中运行以下命令:
gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
替换以下内容:
查找当前特性值
如需查找连接器的当前属性值,请在终端中运行以下命令:
gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT替换以下内容:
CONNECTOR_NAME
:连接器的名称REGION
:连接器的区域名称PROJECT
:您的 Google Cloud 项目的名称
监控连接器使用情况
监控一段时间内的使用情况可帮助您确定何时调整连接器的设置。例如,如果 CPU 利用率出现峰值,您可以尝试增加实例数上限以获得更好的结果。或者,如果您要达到吞吐量上限,则可能需要改用更大的机器类型。
如需使用 Google Cloud 控制台显示连接器的吞吐量、实例数和 CPU 利用率指标随时间变化的图表,请执行以下操作:
打开无服务器 VPC 访问通道概览页面。
点击您要监控的连接器的名称。
选择您要显示的天数(1 到 90 天之间)。
在吞吐量图表中,将鼠标悬停在图表上以查看连接器的近期吞吐量。
在实例数图表中,将鼠标悬停在图表上以查看连接器最近使用的实例数。
在 CPU 利用率图表中,将鼠标悬停在图表上以查看连接器的近期 CPU 使用率。该图表显示了实例中第 50、第 95 和第 99 百分位的 CPU 使用率的分布情况。
删除连接器
在您删除连接器之前,请确保没有服务或作业仍与该连接器连接。
对于在共享 VPC 宿主项目中设置连接器的共享 VPC 用户,您可以使用 gcloud compute networks vpc-access connectors describe
命令列出其中存在使用给定连接器的服务或作业的项目。
如需删除连接器,请使用 Google Cloud 控制台或 Google Cloud CLI:
控制台
转到 Google Cloud 控制台中的无服务器 VPC 访问通道概览页面:
选择要删除的连接器。
点击删除。
gcloud
-
In the Google Cloud console, 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.
使用以下
gcloud
命令删除连接器:gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
替换以下内容:
- 将 CONNECTOR_NAME 替换为要删除的连接器的名称
- 将 REGION 替换为连接器所在的区域
问题排查
服务账号权限
为了在 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 访问通道操作可能会失败。
错误数
“服务账号需要 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 refused
错误(这会降低网络性能),则连接在无服务器应用调用之间可能会不受限制地增长。如需限制每个实例使用的连接数上限,请使用支持连接池的客户端库。如需查看有关如何使用连接池的详细示例,请参阅管理数据库连接。
“找不到资源”错误
删除 VPC 网络或防火墙规则时,您可能会看到如下所示的消息:The resource
"aet-uscentral1-subnet--1-egrfw" was not found.
如需了解此错误及其解决方案,请参阅 VPC 防火墙规则文档中的“找不到资源”错误。
后续步骤
- 使用无服务器 VPC 访问通道审核日志记录监控管理员活动。
- 使用 VPC Service Controls 创建服务边界来保护资源和数据。
- 了解与无服务器 VPC 访问通道关联的 Identity and Access Management (IAM) 角色。如需获取与每个角色关联的权限列表,请参阅 IAM 文档中的无服务器 VPC 访问通道角色。
- 了解如何从以下环境连接到 Memorystore: