使用共享 VPC 网络

本页面适用于 Apigee,但不适用于 Apigee Hybrid

查看 Apigee Edge 文档。

本文档介绍如何配置共享 Virtual Private Cloud (VPC) 主机并将单独的 Apigee 和后端目标服务项目与其关联。通过共享 VPC 网络,您可以使用 Google Cloud 实现集中治理的网络基础架构。您可以使用宿主项目中的单个 VPC 网络连接多个服务项目中的资源。

共享 VPC 的优势

Apigee 运行时(在 Google 代管的 VPC 中运行)与您拥有的 VPC 对等互连。在此拓扑中,Apigee 运行时端点可以与您的 VPC 网络通信,如下图所示:

内部后端在其他项目的 VPC 中的共享 VPC

另请参阅 Apigee 架构概览

在许多情况下,上述拓扑过于简单,因为 VPC 网络是单个 Google Cloud 项目的一部分,许多组织都希望遵循资源层次结构的最佳实践,并将其基础架构拆分为多个项目。假设我们的网络拓扑中,Apigee 租户项目和之前一样与 VPC 网络对等互连,但内部后端位于另一个项目的 VPC 中。如下图所示:

内部后端在其他项目的 VPC 中的共享 VPC

如果您将 Apigee VPC 与后端 VPC 对等互连(如图所示),可以从 Apigee VPC 网络访问后端,反之亦然,因为网络对等互连是对称的。但是,Apigee 租户项目只能与 Apigee VPC 通信,因为对等互连不具有传递性,如 VPC 对等互连文档中所述。为此,您可以在 Apigee VPC 中部署其他代理,通过对等互连链路将流量转发到后端 VPC;但是,这种方法会增加额外的操作开销和维护工作。

共享 VPC 可以解决上述问题。通过共享 VPC,您可以在 Apigee 运行时与位于同一组织的其他 Google Cloud 项目的后端之间建立连接,而无需额外的网络组件。

使用 Apigee 配置共享 VPC

本部分介绍如何将 Apigee VPC 服务项目连接到共享 VPC 主机。宿主项目中定义的子网与服务项目共享。在后面的部分中,我们将介绍如何为部署在第二个 VPC 服务项目中的后端服务创建第二个子网。下图显示了生成的架构:

共享 VPC 架构概览

Apigee 提供一个预配脚本,帮助简化创建所需拓扑的过程。按照本部分中的步骤下载并使用预配脚本,通过共享 VPC 设置 Apigee。

前提条件

  1. 查看共享 VPC 概览中介绍的概念。了解宿主项目和服务项目的概念非常重要。
  2. 创建一个新的 Google Cloud 项目,您可以为共享 VPC 配置该项目。此项目是宿主项目。请参阅创建和管理项目
  3. 按照预配共享 VPC 中的步骤为共享 VPC 预配此项目。您必须是组织管理员或具有适当的 Identity and Access Management (IAM) 管理角色,才能为共享 VPC 启用宿主项目。
  4. 再创建一个 Google Cloud 项目。此项目是服务项目。稍后,您需要将其关联到宿主项目。

下载脚本

Apigee 提供一个预配脚本,帮助简化创建所需拓扑的过程。您需要从 GitHub 中拉取该脚本:

  1. 克隆包含该脚本的 GitHub 项目:
    git clone https://github.com/apigee/devrel.git
  2. 转到该项目中的以下目录:
    cd devrel/tools/apigee-x-trial-provision
  3. 设置以下环境变量:
    export HOST_PROJECT=HOST_PROJECT_ID
    export SERVICE_PROJECT=SERVICE_PROJECT_ID

    其中:

    • HOST_PROJECT_ID 是您创建的作为前提条件之一的共享 VPC 宿主项目的 ID。
    • SERVICE_PROJECT_ID 是您在前提条件中创建的 Google Cloud 服务项目的 ID。

配置宿主项目

  1. 设置以下环境变量:
  2. export NETWORK=YOUR_SHARED_VPC
    export SUBNET=YOUR_SHARED_SUBNET
    export PEERING_CIDR=CIDR_BLOCK

    其中:

    • YOUR_SHARED_VPC 是共享 VPC 网络的名称。
    • YOUR_SHARED_SUBNET 是共享 VPC 子网的名称。
    • CIDR_BLOCK 是 Apigee VPC 的 CIDR 地址段。例如:10.111.0.0/23
  3. 如需配置 Apigee VPC 对等互连和防火墙,请使用以下选项执行脚本:
    ./apigee-x-trial-provision.sh \
        -p $HOST_PROJECT --shared-vpc-host-config --peering-cidr $PEERING_CIDR

    该脚本会配置宿主项目;输出将如下所示,其中 NETWORKSUBNET 表示宿主项目下的完全限定路径:

    export NETWORK=projects/$HOST_PROJECT/global/networks/$NETWORK
    export SUBNET=projects/$HOST_PROJECT/regions/us-west1/subnetworks/$SUBNET
  4. 导出在输出中返回的变量。

配置服务项目

在此步骤中,您将配置服务项目。脚本运行完毕后,它会在 Apigee 环境中创建和部署示例 API 代理,以用于测试预配。

  1. 再次执行 apigee-x-trial-provision.sh 脚本,以使用共享网络设置预配服务项目:
    ./apigee-x-trial-provision.sh \
        -p $SERVICE_PROJECT

    该脚本会在 Apigee 环境中创建示例代理,并将 curl 命令输出到 STDOUT,您可以调用该命令来测试预配。

  2. 调用测试 API 代理。例如:
    curl -v https://10-111-111-111.nip.io/hello-world

为后端服务配置其他服务项目

最佳实践是将 Google Cloud 基础架构分成多个项目。请参阅确定 Google Cloud 着陆区的资源层次结构。本部分介绍如何在单独的服务项目中部署后端服务并将其关联到共享 VPC 主机。Apigee 可以使用后端服务作为 API 代理目标,因为 Apigee 服务项目和后端服务项目都会关联到共享 VPC 主机。

前提条件

为执行以下步骤,我们假设您已设置共享 VPC 并与后端服务项目共享,如设置共享 VPC 中所述。

配置服务项目

在本部分中,您将在另一个共享 VPC 子网中测试后端服务,在宿主项目中创建另一个子网,并使用其专用 RFC1918 IP 地址作为 Apigee API 代理的目标网址。

  1. 在后端服务项目中,执行以下命令,查看所有可用的共享子网:
    gcloud compute networks subnets list-usable --project $HOST_PROJECT  --format yaml
    

    输出示例:

    ipCidrRange: 10.0.0.0/20
    network: https://www.googleapis.com/compute/v1/projects/my-svpc-hub/global/networks/hub-vpc
    subnetwork: https://www.googleapis.com/compute/v1/projects/my-svpc-hub/regions/europe-west1/subnetworks/sub1
  2. 创建以下环境变量:
    BACKEND_SERVICE_PROJECT=PROJECT_ID
    SHARED_VPC_SUBNET=SUBNET
    

    其中:

    • PROJECT_ID 是您为后端服务创建的服务项目的名称。
    • SUBNET 是上述命令的子网输出之一。
  3. 如需在项目中创建后端 httpbin 服务以进行测试,请使用以下命令:
    gcloud compute --project=$BACKEND_SERVICE_PROJECT instances create-with-container httpbin \
      --machine-type=e2-small --subnet=$SHARED_VPC_SUBNET \
      --image-project=cos-cloud --image-family=cos-stable --boot-disk-size=10GB \
      --container-image=kennethreitz/httpbin --container-restart-policy=always --tags http-server
    
  4. 按照创建 API 代理中的步骤创建和部署 Apigee API 代理。
  5. 获取在其中运行目标服务的虚拟机 (VM) 的内部 IP 地址。您将在下一步中使用此 IP 来调用测试 API 代理:
    gcloud compute instances list --filter=name=httpbin
  6. 如需测试配置,请调用该代理。使用您在上一步中获得的虚拟机内部 IP 地址。以下示例假定您将代理基本路径命名为 /myproxy。例如:
    curl -v https://INTERNAL_IP/myproxy

    此 API 调用会返回 Hello, Guest!