如果您的组织使用共享 VPC,则您可以在服务项目或宿主项目中设置无服务器 VPC 访问通道连接器。本指南介绍了如何在宿主项目中设置连接器。
如果您需要在服务项目中设置连接器,请参阅在服务项目中配置连接器。如需了解每种方法的优点,请参阅连接到共享 VPC 网络。
准备工作
- 检查您当前使用的账号的 Identity and Access Management (IAM) 角色。活跃账号必须在宿主项目上具有以下角色: 
- 选择您的首选环境中的宿主项目。 
控制台
- 打开 Google Cloud 控制台信息中心。 
- 在信息中心顶部的菜单栏中,点击项目下拉菜单,然后选择宿主项目。 
gcloud
通过在终端中运行以下命令,将 gcloud CLI 中的默认项目设置为宿主项目:
gcloud config set project HOST_PROJECT_ID
替换以下内容:
- HOST_PROJECT_ID:共享 VPC 宿主项目的 ID
创建 Serverless VPC Access 连接器
如需向您的 VPC 网络发送请求并接收相应的响应,您必须创建无服务器 VPC 访问通道连接器。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建连接器:
控制台
- 为您的项目启用 Serverless VPC Access API。 
- 打开无服务器 VPC 访问通道概览页面。 
- 点击创建连接器。 
- 在名称字段中,为连接器输入名称。该名称必须遵循 Compute Engine 命名惯例,并且少于 21 个字符。连字符 ( - -) 计为两个字符。
- 在区域字段中,选择连接器的区域。此区域必须与您的无服务器服务的区域相匹配。 - 如果您的服务位于 - us-central或- europe-west区域,请使用- us-central1或- europe-west1。
- 在网络字段中,选择要将连接器连接到的 VPC 网络。 
- 点击子网下拉菜单: - 选择未使用的 - /28子网。- 子网必须专供连接器使用。其他资源(例如虚拟机、Private Service Connect 或负载均衡器)不能使用这些子网。
- 如需确认您的子网未用于 Private Service Connect 或 Cloud Load Balancing,请通过在 gcloud CLI 中运行以下命令来检查子网 purpose是否为PRIVATE:gcloud compute networks subnets describe SUBNET_NAME SUBNET_NAME替换为您的子网名称。
 
- (可选)如需设置扩缩选项以更好地控制连接器,请点击显示扩缩设置以显示扩缩表单。 - 设置连接器的实例数下限和上限,或使用默认值 2(下限)和 10(上限)。连接器会随着流量的增加而扩容到指定的最大值,但在流量减少时连接器不会缩容。必须使用介于 2到10之间的值,并且MIN值必须小于MAX值。
- 在“实例类型”下拉菜单中,选择要用于连接器的机器类型,或者使用默认的 e2-micro。当您选择实例类型时,请注意右侧的费用边栏,其中显示带宽和费用估算值:
 
- 设置连接器的实例数下限和上限,或使用默认值 2(下限)和 10(上限)。连接器会随着流量的增加而扩容到指定的最大值,但在流量减少时连接器不会缩容。必须使用介于 
- 点击创建。 
- 准备就绪后,连接器名称旁边会出现绿色的对勾标记。 
gcloud
- 将 - 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 \ --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 个字符。连字符 (- -) 计为两个字符。
- REGION:连接器的区域;此区域必须与无服务器服务的区域相匹配。如果您的服务位于- us-central或- europe-west区域,请使用- us-central1或- europe-west1。
- SUBNET:未使用的- /28子网的名称。- 子网必须专供连接器使用。其他资源(例如虚拟机、Private Service Connect 或负载均衡器)不能使用这些子网。
- 如需确认您的子网未用于 Private Service Connect 或 Cloud Load Balancing,请通过在 gcloud CLI 中运行以下命令来检查子网 purpose是否为PRIVATE:gcloud compute networks subnets describe SUBNET_NAME - SUBNET_NAME:您的子网的名称
 
 
- HOST_PROJECT_ID:宿主项目的 ID
- MIN:用于连接器的实例数下限。请使用介于- 2到- 9之间的整数。默认值为- 2。 如需了解连接器扩缩,请参阅吞吐量和扩缩。
- MAX:用于连接器的实例数上限。请使用介于- 3到- 10之间的整数。默认值为- 10。 如果流量需要,连接器会扩容到- [MAX]实例,但不会缩减。 如需了解连接器扩缩,请参阅吞吐量和扩缩。
- MACHINE_TYPE:- f1-micro、- e2-micro或- e2-standard-4。如需了解连接器吞吐量,包括机器类型和扩缩,请参阅吞吐量和扩缩。
 - 如需了解详情和可选的参数,请参阅 - 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 网络和子网,然后创建连接器。
为服务项目启用 Cloud Run
为服务项目启用 Cloud Run API。这是在后续步骤中添加 IAM 角色以及在服务项目中使用 Cloud Run 所必需满足的前提条件。
控制台
- 打开 Cloud Run API 的页面。 
- 在信息中心顶部的菜单栏中,点击项目下拉菜单,然后选择服务项目。 
- 点击启用。 
gcloud
在终端中运行以下命令:
gcloud services enable run.googleapis.com --project=SERVICE_PROJECT_ID
替换以下内容:
- SERVICE_PROJECT_ID:服务项目的 ID
提供对连接器的访问权限
通过为服务项目的 Cloud Run Service Agent 授予对宿主项目的 Serverless VPC Access User IAM 角色来提供对连接器的访问权限。
控制台
gcloud
在终端中运行以下命令:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role=roles/vpcaccess.user
替换以下内容:
- HOST_PROJECT_ID:共享 VPC 宿主项目的 ID
- SERVICE_PROJECT_NUMBER:与服务账号关联的项目编号。该编号与项目 ID 不同。您可以通过运行以下命令找到项目编号:- gcloud projects describe SERVICE_PROJECT_ID 
将连接器设置为可被发现
在宿主项目的 IAM 政策中,您必须向部署 Cloud Run 服务的主账号授予以下两个预定义角色:
- Serverless VPC Access Viewer (vpcaccess.viewer):必需。
- Compute Network Viewer (compute.networkViewer):可选,但建议授予。允许 IAM 主账号枚举共享 VPC 网络中的子网。
或者,您也可以使用提供 Serverless VPC Access Viewer (vpcaccess.viewer) 角色的所有权限的自定义角色或其他预定义角色。
控制台
- 打开 IAM 页面。 
- 点击项目下拉菜单,然后选择宿主项目。 
- 点击添加。 
- 在新的主账号字段中,输入应该能够从服务项目中查看连接器的主账号的电子邮件地址。您可以在此字段中输入多个电子邮件地址。 
- 在角色字段中,选择以下两个角色: - Serverless VPC Access Viewer
- Compute Network Viewer
 
- 点击保存。 
gcloud
在终端中运行以下命令:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=PRINCIPAL \ --role=roles/vpcaccess.viewer gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=PRINCIPAL \ --role=roles/compute.networkViewer
替换以下内容:
- HOST_PROJECT_ID:共享 VPC 宿主项目的 ID
- PRINCIPAL:部署 Cloud Run 服务的主账号。详细了解- --member标志。
配置服务以使用连接器
对于需要访问共享 VPC 的每个 Cloud Run 服务,您必须为该服务指定连接器。您可以在部署新服务或更新现有服务时使用 Google Cloud 控制台、Google Cloud CLI、YAML 文件或 Terraform 来指定连接器。
控制台
- 在 Google Cloud 控制台中,前往 Cloud Run: 
- 从菜单中选择服务,然后点击部署容器以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。 
- 如果您要配置新服务,请填写初始服务设置页面,然后点击容器、卷、网络、安全性以展开服务配置页面。 
- 点击连接标签页。   - 在 VPC 连接器字段中,选择要使用的连接器或者选择无以断开服务与 VPC 网络的连接。
 
- 点击创建或部署。 
gcloud
- 设置 gcloud CLI 以使用包含 Cloud Run 资源的项目: - gcloud config set project PROJECT_ID - PROJECT_ID:包含需要访问共享 VPC 的 Cloud Run 资源的项目的 ID。如果 Cloud Run 资源位于宿主项目中,则这是宿主项目 ID。如果 Cloud Run 资源位于服务项目中,则这是服务项目 ID。
 
- 使用 - --vpc-connector标志。
- 对于现有服务:gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME 
- 对于新服务:gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME - SERVICE:服务的名称
- IMAGE_URL:对容器映像的引用,例如- us-docker.pkg.dev/cloudrun/container/hello:latest。
- CONNECTOR_NAME:连接器的名称。从共享 VPC 服务项目(而不是宿主项目)进行部署时,请使用完全限定名称,例如:- projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME - HOST_PROJECT_ID是宿主项目的 ID,- CONNECTOR_REGION是连接器的区域,- CONNECTOR_NAME是您为连接器指定的名称。
 
YAML
设置 gcloud CLI 以使用包含 Cloud Run 资源的项目:
gcloud config set project PROJECT_ID
替换以下内容:
- PROJECT_ID:包含需要访问共享 VPC 的 Cloud Run 资源的项目的 ID。如果 Cloud Run 资源位于宿主项目中,则这是宿主项目 ID。如果 Cloud Run 资源位于服务项目中,则这是服务项目 ID。
- 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 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 name: REVISION - 替换以下内容: - SERVICE:Cloud Run 服务的名称。
- CONNECTOR_NAME:连接器的名称。从共享 VPC 服务项目(而不是宿主项目)进行部署时,请使用完全限定名称,例如:projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME HOST_PROJECT_ID是宿主项目的 ID,CONNECTOR_REGION是连接器的区域,CONNECTOR_NAME是您为连接器指定的名称。
- 将 REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:- 开头为 SERVICE-
- 仅包含小写字母、数字和 -
- 不以 -结尾
- 不超过 63 个字符
 
- 开头为 
 
- 使用以下命令将服务的配置替换为新配置: - gcloud run services replace service.yaml 
Terraform
您可以使用 Terraform 资源创建服务,并将其配置为使用您的连接器。
后续步骤
- 使用无服务器 VPC 访问通道审核日志记录监控管理活动。
- 使用 VPC Service Controls 创建服务边界来保护资源和数据。
- 使用网络标记限制连接器虚拟机对 VPC 资源的访问权限。
- 了解与无服务器 VPC 访问通道关联的 Identity and Access Management (IAM) 角色。如需获取与每个角色关联的权限列表,请参阅 IAM 文档中的无服务器 VPC 访问通道角色。
- 了解如何连接到 Memorystore。