不使用 VPC 对等互连预配付费组织

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

查看 Apigee Edge 文档。

本文档介绍如何在不使用 VPC 对等互连的情况下通过命令行安装和配置 Apigee。这些步骤适用于启用或未启用数据驻留的付费组织的订阅和随用随付价格模式。

另请参阅预配选项

限制

本文档中介绍的非 VPC 对等互连安装选项存在一些限制:

如需查看非 VPC 对等互连支持和不支持的功能和网络方法的完整列表,请参阅如何选择网络选项

步骤摘要

预配步骤如下:

第 1 步:定义环境变量

设置 gcloud 并定义环境变量,以供后续步骤使用:

  1. 请确保已完成准备工作中列出的设置要求。
  2. 您必须已安装 Cloud SDK。如果您需要安装,请参阅安装 Cloud SDK
  3. 初始化 Cloud SDK(如初始化 gcloud CLI 中所述),否则请确保您在前提条件中创建的 Google Cloud 项目是 gcloud 的默认项目。
  4. 在命令终端中定义以下环境变量。选择与所需组织类型对应的标签页:无数据驻留有数据驻留

    无数据驻留

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    ANALYTICS_REGION="YOUR_ANALYTICS_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    其中:

    • AUTH 使用不记名令牌定义 Authentication 标头。 您将在调用 Apigee API 时使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令参考页面。
    • PROJECT_ID 是您在前提条件中创建的 Cloud 项目 ID。
    • PROJECT_NUMBER 是您在前提条件中创建的 Cloud 项目编号。
    • RUNTIME_LOCATION 是您稍后创建的 Apigee 实例所在的物理位置。如需查看可用运行时位置的列表,请参阅 Apigee 位置

    • ANALYTICS_REGION 是存储 Apigee 分析数据的物理位置。如需查看可用的 Apigee API Analytics 区域列表,请参阅 Apigee 位置

      RUNTIME_LOCATIONANALYTICS_REGION 可以位于同一区域,但这不是必须的。

    • BILLING_TYPE 是您创建的组织的结算类型。有效值包括:

    数据驻留

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    其中:

    • AUTH 使用不记名令牌定义 Authentication 标头。 您将在调用 Apigee API 时使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令参考页面。
    • PROJECT_ID 是您在前提条件中创建的 Cloud 项目 ID。
    • PROJECT_NUMBER 是您在前提条件中创建的 Cloud 项目编号。
    • RUNTIME_LOCATION 是您稍后创建的 Apigee 实例所在的物理位置。如需查看可用运行时位置的列表,请参阅 Apigee 位置

      运行时位置必须位于控制平面位置。
    • CONTROL_PLANE_LOCATION 是存储 Apigee 控制平面数据的物理位置。如需查看可用的控制平面位置列表,请参阅 Apigee 位置
    • CONSUMER_DATA_REGION 是控制平面区域的子区域。您必须同时指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。如需查看可用的使用方数据区域的列表,请参阅 Apigee 位置
    • BILLING_TYPE 是您创建的组织的结算类型。有效值包括:

  5. (可选)通过回送您刚刚设置的值来检查您的工作。请注意,要在命令中使用变量,请在变量名称前面加上美元符号 ($)。

    无数据驻留

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $ANALYTICS_REGION
    echo $BILLING_TYPE
    

    echo 命令的响应应如下所示:

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us-west1
    SUBSCRIPTION
    

    数据驻留

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $CONTROL_PLANE_LOCATION
    echo $CONSUMER_DATA_REGION
    echo $BILLING_TYPE
    

    echo 命令的响应应如下所示:

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us
    us-west1
    SUBSCRIPTION
    

第 2 步:启用 API

  1. Apigee 要求您启用多个 Google Cloud API。通过执行以下 services enable 命令启用它们:

    gcloud services enable apigee.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (可选)如需查看您的工作,请使用 services list 命令显示所有已启用的 API:

    gcloud services list

    该响应会显示所有已启用的服务,包括您刚刚启用的 API。

第 3 步:创建 Apigee 服务身份

  1. 创建 Apigee 服务身份

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. 验证代理已成功创建。响应应按以下格式显示代理的名称:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com。例如:

    Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com

第 4 步:创建组织

您必须先创建运行时数据库加密密钥环和密钥,然后才能创建组织(请参阅步骤 1),并且如果您使用数据驻留,还必须创建控制平面加密密钥环和钥匙(请参阅步骤 2)。这些 Cloud KMS 密钥会对跨运行时和控制平面位置存储和复制的数据进行加密。Apigee 使用这些实体来加密应用数据,例如 KVM、缓存和客户端密钥,这些数据随后存储在数据库中。如需了解详情,请参阅 Apigee 加密密钥简介

  1. 创建运行时数据库加密密钥环和密钥。

    1. 为运行时数据库加密密钥环和密钥位置定义一个环境变量。这有助于在创建时确保一致性,并让您能够更轻松地在文档中执行操作。

      该值是存储运行时数据库加密密钥环和密钥的物理位置。

      单区域

      单区域配置(在一个区域中只有一个实例):从支持的 KMS 区域位置中进行选择。

      例如:

      RUNTIMEDBKEY_LOCATION="us-west1"

      该值可以与 $RUNTIME_LOCATION(也是一个区域)相同,但不一定要相同。不过,如果两者相同,则可能会获得性能优势。

      多区域

      多区域配置:从支持的多区域位置(例如 useurope)或双区域位置中进行选择。

      例如:

      RUNTIMEDBKEY_LOCATION="us"

      我们建议您在美国使用多区域配置。如果可能,请使用 us 作为您的位置。否则,请使用 nam4

    2. 定义数据库密钥环和密钥名称的环境变量。

      密钥环的名称在您的组织中必须是唯一的。如果您创建第二个或后续区域,则名称不能与其他密钥环名称相同。

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (可选)通过回送您刚刚设置的值来检查您的工作。请注意,要在命令中使用变量,请在变量名称前面加上美元符号 ($)。
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. 创建新的密钥环:
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      Apigee 运行时数据库加密密钥的位置支持所有支持 Cloud HSMCloud EKM 的 Cloud KMS 位置。

    5. 创建密钥:

      gcloud kms keys create $RUNTIMEDB_KEY_NAME \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      此命令会创建密钥并将其添加到密钥环中。

      获取密钥 ID:

      gcloud kms keys list \
        --location=$RUNTIMEDBKEY_LOCATION \
        --keyring=$RUNTIMEDB_KEY_RING_NAME \
        --project=$PROJECT_ID

      密钥 ID 的语法如下所示(类似于文件路径):

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. 将密钥 ID 放入环境变量中。您将在后面的命令中使用此变量:

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. 向 Apigee Service Agent 授予访问权限以使用新的密钥:

      gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      此命令将密钥绑定到 Apigee Service Agent。

      成功完成此请求后,gcloud 的响应将如下所示:

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      如果出现如下错误:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      请务必使用项目编号,而不是服务账号电子邮件地址中的项目名称。

  2. 如果您使用的是数据驻留,请创建控制平面加密密钥环和密钥。如果您不使用数据驻留,请转到第 3 步
  3. 执行以下步骤以创建控制平面加密密钥环和密钥。

    1. 为控制平面数据库加密环和密钥的位置定义一个环境变量:
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      其中:

      • CONTROL_PLANE_LOCATION 是存储 Apigee 控制平面数据的物理位置。如需查看可用的控制平面位置列表,请参阅 Apigee 位置
      • CONSUMER_DATA_REGION 是控制平面区域的子区域。您必须同时指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。如需查看可用的使用方数据区域的列表,请参阅 Apigee 位置
    2. 为控制平面数据库密钥环和密钥名称定义环境变量。

      密钥环的名称在您的组织中必须是唯一的。

      CONTROL_PLANE_KEY_RING_NAME=YOUR_CONTROL_PLANE_KEY_RING_NAME
      CONTROL_PLANE_KEY_NAME=YOUR_CONTROL_PLANE_KEY_NAME
      CONSUMER_DATA_KEY_RING_NAME=YOUR_CONSUMER_DATA_KEY_RING_NAME
      CONSUMER_DATA_KEY_NAME=YOUR_CONSUMER_DATA_REGION_KEY_NAME

      其中:

      • CONTROL_PLANE_KEY_RING_NAME 是用于标识控制平面加密密钥环的密钥环名称。
      • CONTROL_PLANE_KEY_NAME 是用于标识控制平面加密密钥的密钥名称。
      • CONSUMER_DATA_KEY_RING_NAME 是用于标识使用方数据区域加密密钥环的密钥环名称。
      • CONSUMER_DATA_KEY_NAME 是用于标识使用方数据区域加密密钥的密钥名称。
    3. 创建新的密钥环:
      gcloud kms keyrings create $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --project $PROJECT_ID
      gcloud kms keyrings create $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --project $PROJECT_ID
    4. 创建密钥:
      gcloud kms keys create $CONTROL_PLANE_KEY_NAME \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID
      gcloud kms keys create $CONSUMER_DATA_KEY_NAME \
        --keyring $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --purpose "encryption" \
        --project $PROJECT_ID

      此命令会创建密钥并将其添加到密钥环中。

      获取密钥 ID:

      gcloud kms keys list \
      --location=$CONTROL_PLANE_LOCATION \
      --keyring=$CONTROL_PLANE_KEY_RING_NAME \
      --project=$PROJECT_ID
      gcloud kms keys list \
      --location=$CONSUMER_DATA_REGION \
      --keyring=$CONSUMER_DATA_KEY_RING_NAME \
      --project=$PROJECT_ID

      密钥 ID 的语法如下所示(类似于文件路径):

      projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
      projects/PROJECT_ID/locations/CONSUMER_DATA_REGION/keyRings/CONSUMER_DATA_KEY_RING_NAME/cryptoKeys/CONSUMER_DATA_KEY_NAME
    5. 将密钥 ID 放入环境变量中。您将在后面的命令中使用此变量:
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. 向 Apigee Service Agent 授予访问权限以使用新的密钥:
      gcloud kms keys add-iam-policy-binding $CONTROL_PLANE_KEY_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID
      
      gcloud kms keys add-iam-policy-binding $CONSUMER_DATA_KEY_NAME \
       --location $CONSUMER_DATA_REGION \
       --keyring $CONSUMER_DATA_KEY_RING_NAME \
       --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
       --project $PROJECT_ID
      

      此命令将密钥绑定到 Apigee Service Agent。成功完成此请求后,gcloud 的响应将如下所示:

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      如果出现如下错误:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      请务必使用项目编号,而不是服务账号电子邮件地址中的项目名称。

    另请参阅:CMEK 问题排查

  4. 将以下请求发送到 Apigee organizations API 以创建组织:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "analyticsRegion":"'"$ANALYTICS_REGION"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    其中:

    • -d 定义请求的数据载荷。此载荷必须包含以下内容:
      • name:标识您的新组织。它必须与您的项目 ID 相同。

      • analyticsRegion:指定用于存储分析数据的物理位置。

      • runtimeType:将此值设为 CLOUD
      • billingType:指定已创建组织的结算类型。
      • disableVpcPeering:如果您不想使用 VPC 对等互连,请设置为 true。默认:false
      • runtimeDatabaseEncryptionKeyName:您在上一步中创建的应用加密密钥的 ID。回想一下,ID 的结构类似于文件路径。例如:
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    数据驻留

    使用 API 创建组织

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'",
        "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'",
        "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    其中:

    -d 定义请求的数据载荷。此载荷必须包含以下内容:

    • name:标识您的新组织。它必须与您的项目 ID 相同。
    • runtimeType:将此值设为 CLOUD
    • billingType:指定已创建组织的结算类型。
    • controlPlaneEncryptionKeyName:您的控制平面密钥 ID。
    • apiConsumerDataLocation:您还必须指定内部资源使用的子区域。如需了解支持的值,请参阅数据驻留区域
    • apiConsumerDataEncryptionKeyName:您的使用方数据区域密钥 ID。
    • disableVpcPeering:如果您不想使用 VPC 对等互连,请设置为 true。默认:false
    • runtimeDatabaseEncryptionKeyName:您在上一步中创建的应用加密密钥的 ID。回想一下,ID 的结构类似于文件路径。例如:
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    执行此命令后,Apigee 会启动一项“长时间运行的操作”,该操作可能需要几分钟才能完成。

    如果您收到错误消息,请检查数据载荷中变量值前后的引号的使用。请确保 $PROJECT_ID 变量由双引号-单引号-双引号括起,如以下示例所示:

    "'"$PROJECT_ID"'"

    如果您对请求值使用纯文本字符串(而不是环境变量),则可以在用英文单引号括起的载荷字符串中用英文双引号括住它们,如以下示例所示:

    '{ "name":"my-gcp-project", ... }'
  5. 请稍等几分钟。
  6. 如需检查创建请求的状态,您可以向 Apigee List Organizations API 发送 GET 请求,如以下示例所示:

    无数据驻留

    curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    数据驻留

    curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    如果您看到此响应,则表示组织创建尚未完成:

    {
      "error": {
        "code": 403,
        "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)",
        "status": "PERMISSION_DENIED"
      }
    }

    On success, the response object will 成功后,响应对象将显示 "state": "ACTIVE",然后您可以继续执行下一步。

    如果 Apigee 返回 HTTP 错误响应,请参阅创建 Apigee 组织

第 5 步:创建运行时实例

运行时实例是 Apigee 项目和相关服务的存储位置;它为您的服务提供面向用户的端点。要创建新的运行时实例,请执行以下操作:

  1. 检查 Apigee 是否已完成组织创建。您在创建 Apigee 组织中提交了创建新组织的请求,但需要确保已创建组织再继续。

    为此,请向 Organizations API 发送以下请求:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    如果组织存在(并且您具有进行查看的适当权限),Apigee 会返回关于组织的详细信息。如果 Apigee 返回错误,请等待几分钟,然后重新发送请求。

  2. 与先前为数据库创建加密密钥的任务类似,现在您需要创建一个 Cloud KMS 密钥,用于加密服务器端的数据。首先,定义以下环境变量:
    INSTANCE_NAME=YOUR_INSTANCE_NAME
    RUNTIME_LOCATION=YOUR_RUNTIME_LOCATION
    DISK_KEY_RING_NAME=YOUR_DISK_KEY_RING_NAME
    DISK_KEY_NAME=YOUR_DISK_KEY_NAME
  3. 其中:

    • INSTANCE_NAME:新实例的名称。例如 my-runtime-instance。名称必须以小写字母开头,最多可包含 32 个字符,并且只能包含小写字母、数字和连字符。名称不能以连字符开头或结尾,且长度必须至少为 2 个字符。
    • RUNTIME_LOCATION 是托管您的集群的物理位置。有效值是 Compute Engine 允许的任何位置。(请参阅可用区域和可用区)。本示例使用 us-west1
    • DISK_KEY_RING_NAME 是磁盘加密密钥环的名称。
    • DISK_KEY_NAME 是磁盘加密密钥的名称。
  4. 创建磁盘加密密钥:
    1. 创建新的磁盘密钥环:
      gcloud kms keyrings create $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --project $PROJECT_ID

      磁盘密钥环必须设置为与实例相同的位置。每个实例和密钥环都应该有自己的位置。

    2. 创建新的磁盘密钥:
      gcloud kms keys create $DISK_KEY_NAME \
        --keyring $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      密钥可由其密钥路径引用。您可以使用以下命令获取密钥路径:

      gcloud kms keys list \
        --location=$RUNTIME_LOCATION \
        --keyring=$DISK_KEY_RING_NAME \
        --project=$PROJECT_ID

      密钥路径如下所示:

      projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
    3. 将密钥路径放在环境变量中。您将在后面的命令中使用此变量:

      DISK_KEY_ID=YOUR_DISK_KEY_ID

      例如:DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    4. 向 Apigee Service Agent 授予访问权限以使用新的密钥:

      gcloud kms keys add-iam-policy-binding $DISK_KEY_NAME \
        --location $RUNTIME_LOCATION \
        --keyring $DISK_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      此命令将密钥绑定到 Apigee Service Agent。

    如需了解详情,请参阅 Apigee 加密密钥简介

  5. 通过向 Apigee Instances API 发送 POST 请求,为项目创建新的运行时实例:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

    其中:

    • consumerAcceptList(可选)指定能够以私密方式连接到 Apigee VPC 的服务连接的 Google Cloud 项目 ID 列表。服务连接是一种与 Google Cloud Private Service Connect 结合使用的实体,允许服务提供方(在本例中为 Apigee)向使用方(在本例中为您拥有的一个或多个 Cloud 项目)公开服务。默认情况下,我们使用已与您的 Apigee 组织关联的 Cloud 项目。例如: "consumerAcceptList": ["project1", "project2", "project3"]

      请注意,您还可以在实例界面中设置和更改接受的项目列表。如需了解详情,请参阅管理实例

    此请求最多可能需要 20 分钟才能完成,因为 Apigee 必须创建并启动新的 Kubernetes 集群,在该集群上安装 Apigee 资源,并设置负载均衡。

    如果 Apigee 返回错误,请参阅创建新实例

  6. 要检查运行时实例创建请求的状态,请执行以下命令。当状态为 ACTIVE 时,您可以继续执行下一步。

    无数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

    数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

第 6 步:创建环境

要通过命令行创建环境并将其连接到运行时,请执行以下操作:

  1. 定义要在本部分中使用的环境变量。您创建的特定环境变量取决于您是为订阅还是为随用随付组织创建环境。

    订阅

    对于订阅环境,请创建以下变量:

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

    其中:

    • ENVIRONMENT_NAME 为字符串名称。例如:test
    • ENV_GROUP_NAME 为字符串名称。例如:test-group
    • ENV_GROUP_HOSTNAME 是有效的域名托管服务商名称。例如:foo.example.com

    Pay-as-you-go

    对于随用随付环境,请创建以下变量:

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENVIRONMENT_TYPE="YOUR_ENV_TYPE"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

    其中:

    • ENVIRONMENT_NAME 为字符串名称。例如 test
    • ENVIRONMENT_TYPE 是此环境的环境类型,仅适用于Pay-as-you-go用户,这些用户必须指定以下值之一:BASEINTERMEDIATECOMPREHENSIVE。其他用户应省略环境类型。
    • ENV_GROUP_NAME 为字符串名称。例如:test-group
    • ENV_GROUP_HOSTNAME 是有效的域名托管服务商名称。例如 foo.example.com
  2. 使用 Environments API 创建新环境。您使用的特定命令取决于您是为订阅还是为随用随付组织创建环境。

    订阅

    对于新的订阅环境,请使用以下命令:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    Apigee 会创建一个新的环境。

    Pay-as-you-go

    对于新的随用随付环境,请使用以下命令:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    Apigee 会创建一个新的环境。

  3. 在继续操作之前,请通过调用 Environments API 来检查 Apigee 是否已完成新环境创建:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    Apigee 以可用环境列表的形式作出响应;例如,如果您的环境名称是 test,则 Apigee 会作出以下响应:

    [
      "test"
    ]
  4. 将新环境挂接到运行时实例:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    此操作可能需要几分钟才能完成。要检查连接是否已完成,请执行以下命令:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    当您看到如下所示的输出时,可以转到下一步:

    {
      "attachments": [
        {
          "name": "ed628782-c893-4095-b71c-f4731805290a",
          "environment": "test",
          "createdAt": "1641604447542"
        }
      ]
    }
  5. 使用以下命令创建新的环境组: 如需了解详情,请参阅环境和环境组简介

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'
  6. 等待操作完成。您可以使用如下请求来检查新组的状态:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
  7. 使用以下命令将新环境附加到新环境组:

    无数据驻留

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'

    数据驻留

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'
  8. 如需检查操作的状态,请调用此 API:

    无数据驻留

    curl -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

    数据驻留

    curl -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

第 7 步:配置路由

在此步骤中,您将配置客户端应用与 Apigee 通信的方式。客户端到 Apigee 流量也称为“北向”流量。北向配置选项包括。转到要使用的配置选项,然后执行该选项的对应步骤:

访问类型 配置和部署过程的说明
使用 PSC 进行内部访问(新)

仅允许使用 Private Service Connect (PSC) 从任何 Google Cloud 项目访问 API 代理。

PSC 可以在服务提供方 (Apigee) 和服务使用方(对等互连 VPC 项目和/或您控制的一个或多个其他 Cloud 项目)之间启用专用连接。借助这种方法,请求会通过服务端点或区域内部负载均衡器传递到单连接点(称为服务连接)。此配置使您的内部客户端可以从任何启用了网络的机器发送 Apigee API 代理请求。

使用 PSC 进行外部访问(新)

允许使用 Private Service Connect (PSC) 从外部访问 API 代理。

使用 Private Service Connect (PSC) 可以在服务提供方 (Apigee) 和服务使用方(对等互连 VPC 项目和/或您控制的一个或多个其他 Cloud 项目)之间启用专用连接。借助这种方法,请求会通过全球外部负载均衡器或区域外部负载均衡器传递到单连接点(称为服务连接)。此配置可让您从任何启用了网络的机器发送 Apigee API 代理请求。

以下说明介绍了每种路由方法。

内部路由 (PSC)

本部分介绍如何使用 Private Service Connect (PSC) 仅允许从任何 Google Cloud 项目内部访问 API 代理。

您有两种使用 PSC 配置内部访问权限的选项:

在下面选择您的配置选项对应的标签页,然后按照以下步骤操作:

服务端点

为服务连接创建 PSC 服务端点

  1. 从先前创建的实例获取服务连接:

    无数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    在以下示例输出中,serviceAttachment 值以粗体显示:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. 创建一个 PSC 服务端点并指向您在上一步中从实例响应正文获取的服务连接,如创建 Private Service Connect 端点中所述。
  3. Apigee 预配完成。转到部署示例代理

内部区域级 LB

第 8a 步:设置环境变量

本部分中的说明使用环境变量来引用重复使用的字符串。确保您已在定义环境变量中设置变量。

此外,请设置以下环境变量:

NEG_NAME=YOUR_NEG_NAME"
TARGET_SERVICE=YOUR_TARGET_SERVICE"
NETWORK_NAME=YOUR_NETWORK_NAME"
SUBNET_NAME=YOUR_SUBNET_NAME"

其中:

  • NEG_NAME:网络端点组的名称。
  • TARGET_SERVICE:要与之连接的服务连接。例如:projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
  • NETWORK_NAME:(可选)在其中创建 NEG 的网络的名称。如果您省略此参数,则会使用 default 项目网络。
  • SUBNET_NAME:用于与提供方建立专用连接的子网的名称。子网不必很大:PSC NEG 只需要子网中的一个 IP。 对于 Apigee,每个区域只需要一个 PSC NEG。子网可以由虚拟机或其他实体共享和使用。如果未指定子网,网络端点可能属于创建网络端点组的区域中的任何子网。

第 8b 步:创建代理专用子网

gcloud compute networks subnets create testproxyonlysubnet \
--purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$RUNTIME_REGION --network=$NETWORK_NAME \
--range=100.0.0.0/24 --project=$PROJECT_ID

第 8c 步:创建网络端点组 (NEG)

  1. 从先前创建的实例获取服务连接:

    无数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    在以下示例输出中,serviceAttachment 值以粗体显示:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
      }
  2. 创建一个指向您在上一步中从实例响应正文获取的服务连接的 Private Service Connect NEG。

    gcloud compute network-endpoint-groups create $NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=$TARGET_SERVICE \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID
    

    其中,$PROJECT_ID 可以是已与您的 Apigee 组织关联的 Cloud 项目,或创建 Apigee 运行时实例时包含在 consumerAcceptlist 中的 Cloud 项目。

第 8d 步:配置区域级内部负载均衡器

  1. 为负载均衡器预留内部 IPv4 地址。
    gcloud compute addresses create ADDRESS_NAME \
    --ip-version=IPV4 --subnet=$SUBNET_NAME \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    ADDRESS_NAME 替换为 IP 地址资源的名称。

    运行以下命令以查看预留的 IP 地址:

    gcloud compute addresses describe ADDRESS_NAME \
    --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
  2. 为 NEG 创建后端服务。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTPS \
    --region=$RUNTIME_REGION \
    --project=$PROJECT_ID
  3. BACKEND_SERVICE_NAME 替换为后端服务的名称。

  4. 将 NEG 添加到后端服务:
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=$NEG_NAME \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID

    替换以下内容:

    • NEG_NAME:网络端点组的名称。
    • BACKEND_SERVICE_NAME:后端服务的名称。
  5. 如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源

    使用此命令创建自行管理的 SSL 证书资源。如需创建自行管理的 SSL 证书,您需要本地私钥文件和本地证书文件。如果您需要创建这些文件,请参阅使用自行管理的 SSL 证书的第 1 步

    gcloud compute ssl-certificates create CERTIFICATE \
    --certificate LB_CERT \
    --private-key LB_PRIVATE_KEY
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    替换以下内容:

    • CERTIFICATE:证书的名称。
    • LB_CERT:指向自行管理证书的 PEM 格式的证书文件的路径。
    • LB_PRIVATE_KEY:指向自行管理证书的 PEM 格式的私钥文件的路径。
  6. 为负载均衡器创建网址映射。

    网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。

    gcloud compute url-maps create URL_MAP_NAME \
    --default-service=DEFAULT_BACKEND_SERVICE_NAME \
    --region=$RUNTIME_REGION \
    --project=$PROJECT_ID

    替换以下内容:

    • URL_MAP_NAME:网址映射的名称。
    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。 当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
  7. 使用 SSL 证书资源创建目标 HTTPS 代理。

    gcloud compute target-https-proxies create PROXY_NAME \
    --url-map=URL_MAP_NAME \
    --ssl-certificates=CERTIFICATE \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    替换以下内容:

    • PROXY_NAME:目标 HTTPS 代理的名称。
    • URL_MAP_NAME:网址映射的名称。
    • CERTIFICATE:证书资源的名称。
  8. 创建转发规则。
    gcloud compute forwarding-rules create FWD_RULE \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --address=ADDRESS_NAME \
    --target-https-proxy=PROXY_NAME \
    --ports=443 \
    --target-https-proxy-region=$RUNTIME_REGION \
    --region=$RUNTIME_REGION \
    --project=$PROJECT_ID \
    --network=$NETWORK_NAME \
    --subnet=$SUBNET_NAME
    

    替换以下内容:

    • FWD_RULE:转发规则的名称。
    • ADDRESS_NAME:您预留用于转发规则的 IP 地址资源。
    • PROXY_NAME:目标 HTTPS 代理的名称。
    • NETWORK_NAME:(可选)在其中创建 NEG 的网络的名称。如果您省略此参数,则会使用 default 项目网络。
    • SUBNET_NAME:用于与提供方建立专用连接的子网的名称。
  9. Apigee 预配完成。转到部署示例代理

外部路由 (PSC)

本部分介绍了如何使用 Private Service Connect (PSC) 配置外部路由,以允许在 Apigee 和您控制的 VPC 之间进行通信。您必须先执行此操作,然后才能从外部客户端向 Apigee 运行时实例发送请求。

第 8b 步:创建 NEG 并配置负载均衡器

您可以创建全球级或区域级负载均衡器。

全球外部 LB

配置全球外部 HTTP(S) 负载均衡器(负载均衡方案设置为 EXTERNAL_MANAGED)。

虽然 Private Service Connect NEG 是区域性的,但此配置中的所有其他负载均衡组件都是全球性的。

  1. 确保您已在定义环境变量中设置环境变量。
  2. 从先前创建的实例获取服务连接:

    无数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    在以下示例输出中,serviceAttachment 值以粗体显示:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  3. 创建一个指向您在上一步中从实例响应正文获取的服务连接的 Private Service Connect NEG。

      gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --project=$PROJECT_ID
    

    替换以下内容:

    • NEG_NAME:网络端点组的名称。
    • TARGET_SERVICE:要与之连接的服务连接。使用上一条命令返回的服务连接值。例如:projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
    • NETWORK_NAME:(可选)在其中创建 NEG 的网络的名称。如果您省略此参数,则会使用 default 项目网络。
    • SUBNET_NAME:用于与提供方建立专用连接的子网的名称。子网不必很大:PSC NEG 只需要子网中的一个 IP。对于 Apigee,每个区域只需要一个 PSC NEG。子网可以由虚拟机或其他实体共享和使用。 如果未指定子网,网络端点可能属于创建网络端点组的区域中的任何子网。
    • $PROJECT_ID:已与您的 Apigee 组织关联的 Cloud 项目,或创建 Apigee 运行时实例时包含在 consumerAcceptlist 中的 Cloud 项目。创建一个环境变量来保存项目 ID(如果尚未创建),因为在接下来的大多数命令中会用到它。
  4. 为负载均衡器预留全球外部 IPv4 地址。
    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global --project=$PROJECT_ID

    ADDRESS_NAME 替换为 IP 地址资源的名称。

    运行以下命令以查看预留的 IP 地址:

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --global --project=$PROJECT_ID
  5. 为 NEG 创建后端服务。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --global --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME 替换为后端服务的名称。

  7. 将 NEG 添加到后端服务:
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-region=REGION \
        --global --project=$PROJECT_ID

    替换以下内容:

    • BACKEND_SERVICE_NAME:后端服务的名称。
    • NEG_NAME:网络端点组的名称。
    • REGION:网络端点组的区域。
  8. 为负载均衡器创建网址映射。

    网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME \
        --global --project=$PROJECT_ID

    替换以下内容:

    • URL_MAP_NAME:网址映射的名称。
    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。 当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
  9. 创建目标 HTTPS 代理。

    如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。

    如需创建 Google 管理的证书,您必须拥有一个网域

    使用此命令创建 Google 管理的 SSL 证书资源:

    gcloud compute ssl-certificates create CERTIFICATE \
        --domains DOMAIN --project=$PROJECT_ID

    替换以下内容:

    • CERTIFICATE:证书的名称。
    • DOMAIN:您的负载均衡器的网域名称。

    使用此命令创建自行管理的 SSL 证书资源。如需创建自行管理的 SSL 证书,您需要本地私钥文件和本地证书文件。如果您需要创建这些文件,请参阅使用自行管理的 SSL 证书的第 1 步

    gcloud compute ssl-certificates create CERTIFICATE \
        --certificate LB_CERT \
        --private-key LB_PRIVATE_KEY --project=$PROJECT_ID

    替换以下内容:

    • CERTIFICATE:证书的名称。
    • LB_CERT:指向自行管理证书的 PEM 格式的证书文件的路径。
    • LB_PRIVATE_KEY:指向自行管理证书的 PEM 格式的私钥文件的路径。

    使用 SSL 证书资源创建目标 HTTPS 代理。

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    替换以下内容:

    • PROXY_NAME:目标 HTTPS 代理的名称。
    • URL_MAP_NAME:网址映射的名称。
    • CERTIFICATE:证书资源的名称。
  10. 创建转发规则。
    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global --project=$PROJECT_ID

    替换以下内容:

    • FWD_RULE:转发规则的名称。
    • ADDRESS_NAME:您预留用于转发规则的 IP 地址资源。
    • PROXY_NAME:目标 HTTPS 代理的名称。

区域级外部 LB

配置区域级外部 HTTP(S) 负载均衡器。另请参阅外部 HTTP(S) 负载均衡器概览

  1. 确保您已在定义环境变量中设置变量。
  2. 创建代理专用子网:
    gcloud compute networks subnets create SUBNET_NAME \
          --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE \
          --region=$RUNTIME_LOCATION --network=NETWORK_NAME \
          --range=100.0.0.0/24 --project=$PROJECT_ID

    替换以下内容:

    • SUBNET_NAME:子网的名称。
    • (可选)NETWORK_NAME:在其中创建子网的网络的名称。如果您省略此参数,则系统会使用默认项目网络。
  3. 从先前创建的实例获取服务连接:

    无数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    数据驻留

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    在以下示例输出中,serviceAttachment 值以粗体显示:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  4. 创建网络端点组。
    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    替换以下内容:

    • NEG_NAME:网络端点组的名称。
    • TARGET_SERVICE:要与之连接的服务连接的名称。 例如:projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
  5. 为 NEG 创建后端服务。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTPS \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME 替换为后端服务的名称。

  7. 将 NEG 添加到后端服务:
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    替换以下内容:

    • BACKEND_SERVICE_NAME:后端服务的名称。
    • NEG_NAME:网络端点组的名称。
  8. 为负载均衡器创建网址映射。

    网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=DEFAULT_BACKEND_SERVICE_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    替换以下内容:

    • URL_MAP_NAME:网址映射的名称。
    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。 当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
  9. 创建目标 HTTPS 代理。

    如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源

    使用此命令创建自行管理的 SSL 证书资源。如需创建自行管理的 SSL 证书,您需要本地私钥文件和本地证书文件。如果您需要创建这些文件,请参阅使用自行管理的 SSL 证书的第 1 步

    gcloud compute ssl-certificates create CERTIFICATE \
      --certificate LB_CERT \
      --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION \
      --project=$PROJECT_ID

    替换以下内容:

    • CERTIFICATE:证书的名称。
    • LB_CERT:指向自行管理证书的 PEM 格式的证书文件的路径。
    • LB_PRIVATE_KEY:指向自行管理证书的 PEM 格式的私钥文件的路径。

    使用 SSL 证书资源创建目标 HTTPS 代理。

    gcloud compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME --region=$RUNTIME_LOCATION \
      --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    替换以下内容:

    • PROXY_NAME:目标 HTTPS 代理的名称。
    • URL_MAP_NAME:网址映射的名称。
    • CERTIFICATE:证书资源的名称。
  10. 为负载均衡器预留区域外部地址。请注意,网络层级必须设置为 STANDARD
    gcloud compute addresses create ADDRESS_NAME \
          --region=$RUNTIME_LOCATION --network-tier=STANDARD \
          --project=$PROJECT_ID

    ADDRESS_NAME 替换为 IP 地址资源的名称。

    运行以下命令以查看预留的 IP 地址:

    gcloud compute addresses describe ADDRESS_NAME \
          --format="get(address)" --region=$RUNTIME_LOCATION \
          --project=$PROJECT_ID
  11. 创建转发规则。
    gcloud compute forwarding-rules create FWD_RULE \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --address=ADDRESS_NAME \
      --target-https-proxy=PROXY_NAME \
      --ports=443  --region=$RUNTIME_LOCATION \
      --target-https-proxy-region=$RUNTIME_LOCATION --project=$PROJECT_ID

    替换以下内容:

    • FWD_RULE:转发规则的名称。
    • ADDRESS_NAME:您预留用于转发规则的 IP 地址资源。
    • PROXY_NAME:目标 HTTPS 代理的名称。

Apigee 预配完成。转到部署示例代理

第 8 步:部署示例代理

  1. 从 GitHub 下载示例代理。代理的目标是 httpbin.org 服务,这是一种常用的公共请求和响应服务。
  2. 使用 Apigee apis API 将 API 代理软件包上传到运行时:

    无数据驻留

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    数据驻留

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    其中,PATH_TO_ZIP_FILE 是包含下载的 ZIP 文件的目录的路径。

  3. 将 API 代理部署到您之前创建的环境中:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  4. 使用此 API 调用确认部署已成功完成:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  5. 调用 API 代理:

    通过执行以下命令,从任何已启用网络的机器向 API 代理发送请求:

    curl -i -H "Host: ENV_GROUP_HOSTNAME" \
        "https://ENV_GROUP_HOSTNAME/httpbin/headers"

    如果需要,您可以使用此 API 获取 ENV_GROUP_HOSTNAME 值:

    无数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    数据驻留

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    如果出现类似于 CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure 的错误,请检查以确保您之前创建的 SSL 证书已预配。 使用此命令检查预配状态。预配证书后,其状态为 ACTIVE

    gcloud compute ssl-certificates describe CERTIFICATE \
        --global \
        --format="get(name,managed.status, managed.Status)"

    成功后,示例 API 代理会返回类似于以下内容的响应:

    {
        "headers": {
          "Accept": "*/*",
          "Grpc-Trace-Bin": "AAD/8WC/I4AUSrMEch0E9yj+AYck1x9afwckAgA",
          "Host": "httpbin.org",
          "Traceparent": "00-fff160bf2380144ab304721d04f728fe-8724d71f5a7f0724-00",
          "User-Agent": "curl/7.77.0",
          "X-Amzn-Trace-Id": "Root=1-61d785ef-7613aa8a7fde7a910441fab9",
          "X-B3-Sampled": "0",
          "X-B3-Spanid": "8724d71f5a7f0724",
          "X-B3-Traceid": "fff160bf2380144ab304721d04f728fe",
          "X-Cloud-Trace-Context": "fff160bf2380144ab304721d04f728fe/9738144823944087332;o=0",
          "X-Envoy-Attempt-Count": "1"
        }
    }

如需详细了解如何部署代理,包括其他问题排查信息,请参阅部署 API 代理