在共享 VPC 网络中使用 App Engine 柔性环境

在 App Engine 柔性环境中,您可以指定一个网络,以便在其中部署服务的实例。本页面介绍了如何将项目配置为在共享 VPC 网络中使用 App Engine 柔性环境。

如需详细了解如何设置共享 VPC 网络,请参阅预配共享 VPC

使用共享 VPC 设置 App Engine 柔性环境

在共享 VPC 网络中部署 App Engine 柔性环境实例需要以下三个步骤:

  1. 创建防火墙规则以允许在共享 VPC 网络中传输 App Engine 柔性环境流量

  2. 向共享 VPC 服务项目中的服务帐号授予相应权限

  3. 配置您的 App Engine 服务以使用共享 VPC 网络

如果使用 gcloud 命令行工具,请在按照本指南运行命令前更新到最新版本:

gcloud components update

允许向共享 VPC 网络传输流量

Shared VPC Admin 需要在共享 VPC 宿主项目中创建防火墙规则,以允许在共享 VPC 网络中传输 App Engine 柔性环境流量。该防火墙规则允许向柔性环境实例传送流量,并对流量进行运行状况检查。

该防火墙规则必须具有以下属性:

  • 网络:共享 VPC 网络的名称
  • 流量方向:入站
  • 匹配时执行的操作:允许
  • 目标:指定的目标标记
  • 目标标记aef-instance
  • 来源过滤条件:IP 地址范围
  • 来源 IP 地址范围35.191.0.0/16130.211.0.0/22
  • 协议和端口:指定的协议和端口
    • tcp:8443、10402

共享 VPC 管理员可以用 Google Cloud Console 或 gcloud 命令行工具制定防火墙规则:

控制台

要使用 Cloud Console 创建防火墙规则,请执行以下操作:

  1. 转到“创建防火墙规则”页面。

    创建防火墙规则

  2. 名称说明字段中,提供防火墙规则的名称和说明。

  3. 填写上文所述的必要属性。

  4. 点击创建

gcloud

如需使用 gcloud 命令行工具创建防火墙规则,请运行以下命令:

gcloud compute firewall-rules create NETWORK_NAME-flex-firewall \
--project HOST_PROJECT_ID \
--network NETWORK_NAME \
--allow tcp:10402,tcp:8443 \
--target-tags aef-instance \
--source-ranges 35.191.0.0/16,130.211.0.0/22 \
--description 'Allows traffic to App Engine flexible environment'

其中:

  • NETWORK_NAME 是共享 VPC 网络的名称。
  • HOST_PROJECT_ID 是共享 VPC 宿主项目的 Cloud 项目 ID。

设置权限

Shared VPC Admin 必须向以下两个服务帐号授予 Compute Network User 角色,以允许服务项目将 App Engine 柔性环境实例部署到网络中:

  • Google API 服务代理 (PROJECT_NUM@cloudservices.gserviceaccount.com)
  • App Engine 柔性环境服务代理 (service-PROJECT_NUM@gae-api-prod.google.com.iam.gserviceaccount.com)

控制台

要使用 Cloud Console 设置权限,请执行以下操作:

  1. 转到服务项目的“IAM 设置”页面,并记下项目编号

    转到“IAM 设置”

  2. 转到宿主项目的 IAM 页面。

    转到 IAM

  3. 点击添加

  4. 新成员字段中,输入以下电子邮件地址,用英文逗号分隔。将 PROJECT_NUM 替换为第 1 步中获得的项目编号。

    • PROJECT_NUM@cloudservices.gserviceaccount.com
    • service-PROJECT_NUM@gae-api-prod.google.com.iam.gserviceaccount.com
  5. 选择角色下拉列表中,选择 Compute Engine > Compute Network User

  6. 点击保存

gcloud

  1. 获取要部署 App Engine 应用的服务项目的项目编号。运行以下命令,将 SERVICE_PROJECT_ID 替换为服务项目的 ID:

    export SERVICE_PROJECT_NUM=$(gcloud projects describe SERVICE_PROJECT_ID --format="value(projectNumber)")
    
  2. 向服务项目的 Google API 服务代理授予宿主项目中的 compute.networkUser 角色:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:$SERVICE_PROJECT_NUM@cloudservices.gserviceaccount.com \
    --role=roles/compute.networkUser
    

    其中 HOST_PROJECT_ID 是共享 VPC 宿主项目的 Cloud 项目 ID。

  3. 向服务项目的 App Engine 柔性环境服务代理授予宿主项目的 compute.networkUser 角色:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-$SERVICE_PROJECT_NUM@gae-api-prod.google.com.iam.gserviceaccount.com \
    --role=roles/compute.networkUser
    

配置和部署您的服务

设置防火墙规则和相应权限后,您可以将新服务或现有 App Engine 柔性环境服务部署到共享 VPC 网络。

  1. app.yaml 文件中,使用网络设置 name 字段指定共享 VPC 网络的完全限定名称:

    network:
      name: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    

    其中

    • HOST_PROJECT_ID 是共享 VPC 宿主项目的 Cloud 项目 ID。
    • NETWORK_NAME 是共享 VPC 网络的名称。

    如需将服务配置为名为 SUBNETWORK_NAME 的子网的一部分,您还需要设置 subnetwork_name 字段:

    network:
      name: projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
      subnetwork_name: SUBNETWORK_NAME
    
  2. 部署该服务:

    gcloud app deploy
    

验证您的配置

要验证您的 App Engine 柔性环境服务是否在共享 VPC 网络上运行,请在 Cloud Console 的“App Engine 版本”页面上查看版本配置:

  1. 转到“App Engine 版本”页面。

    转到“App Engine 版本”

  2. 在右侧的配置列中,点击所需版本对应的视图

  3. 验证配置中的网络名称是否是共享 VPC 网络的名称。