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

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

查看 Apigee Edge 文档。

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

步骤摘要

预配步骤如下:

第 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 \
        servicenetworking.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 步:配置服务网络

在此步骤中,您将一对 IP 地址范围(/22 和 /28 CIDR 范围)分配给 Apigee,并在您的网络与 Apigee 网络之间执行 VPC 对等互连。每个 Apigee 实例都需要一个非重叠的 /22 和 /28 CIDR 范围。系统会向 Apigee 运行时平面分配此 CIDR 范围内的 IP 地址。因此,请务必为 Apigee 预留该范围,确保它不会被您的 VPC 网络中的其他应用使用。如需了解详情和重要注意事项,请参阅了解对等互连范围

请注意,您要为一个 Apigee 实例创建足够的网络 IP 范围。如果您计划创建其他 Apigee 实例,则必须对每个实例重复此步骤。这些范围无法在实例之间共享。另请参阅将 Apigee 扩展到多个区域

  1. 创建以下环境变量:
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

    其中:

    • RANGE_NAME 是您正在创建的 IP 地址范围的名称。您可以随意为范围命名。例如:google-svcs
    • NETWORK_NAME 是应在其中预留地址的网络资源的名称。

      Google 会为每个新项目创建一个默认网络(名为 default),以便您使用该网络。但是,Google 不建议将默认网络用于测试以外的其他用途。

  2. 创建 CIDR 长度为 /22 的网络 IP 地址范围:
    gcloud compute addresses create $RANGE_NAME \
      --global \
      --prefix-length=22 \
      --description="Peering range for Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    其中,--addresses 可让您选择指定地址范围。例如,如需分配 CIDR 地址块 192.168.0.0/22,请将地址指定为 192.168.0.0,并将前缀长度指定为 22。另请参阅创建 IP 地址分配

    如果您未提供 --addresses 参数,则 gcloud 会为您选择一个可用地址范围。

    成功后,gcloud 会返回以下内容:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs].

    创建 IP 地址范围后,地址便会与项目关联,直到您将地址释放。

  3. 验证已创建的网络 IP 地址范围的 CIDR 长度是否为 /22:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. 创建 CIDR 长度为 /28 的网络 IP 地址范围。此范围是必需的,供 Apigee 用于问题排查,不能自定义或更改。
    gcloud compute addresses create google-managed-services-support-1 \
      --global \
      --prefix-length=28 \
      --description="Peering range for supporting Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    其中,--addresses 可让您选择指定地址范围。例如,如需分配 CIDR 地址块 192.168.0.0/28,请将地址指定为 192.168.0.0,并将前缀长度指定为 28。另请参阅创建 IP 地址分配

    如果您未提供 --addresses 参数,则 gcloud 会为您选择一个可用地址范围。

  5. 验证已创建的网络 IP 地址范围的 CIDR 长度是否为 /28:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. 使用以下命令将您的服务连接到网络:
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK_NAME \
      --ranges=$RANGE_NAME,google-managed-services-support-1 \
      --project=$PROJECT_ID

    此操作可能需要几分钟才能完成。在成功后,gcloud 会返回以下内容,其中 OPERATION_IDLRO 的 UUID。

    Operation "operations/OPERATION_ID" finished successfully.
  7. Apigee 在您的网络与 Google 服务之间建立连接;具体而言,Apigee 通过 VPC 对等互连将您的项目连接到 Service Networking API。Apigee 还会将 IP 地址与您的项目关联。

  8. 几分钟后,验证 VPC 对等互连是否成功:
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

第 5 步:创建组织

您必须先创建运行时数据库加密密钥环和密钥,然后才能创建组织(请参阅步骤 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"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    其中:

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

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

      • runtimeType:将此值设为 CLOUD
      • billingType:指定已创建组织的结算类型。
      • authorizedNetwork:标识您在配置服务网络中指定的对等互连网络。
      • 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"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    其中:

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

    • name:标识您的新组织。它必须与您的项目 ID 相同。
    • runtimeType:将此值设为 CLOUD
    • billingType:指定已创建组织的结算类型。
    • controlPlaneEncryptionKeyName:您的控制平面密钥 ID。
    • apiConsumerDataLocation:您还必须指定内部资源使用的子区域。如需了解支持的值,请参阅数据驻留区域
    • apiConsumerDataEncryptionKeyName:您的使用方数据区域密钥 ID。
    • authorizedNetwork:标识您在配置服务网络中指定的对等互连网络。
    • 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"
      }
    }

    如果 Apigee 成功创建了新组织,您将收到类似于以下内容的响应:

    无数据驻留

    {
      "name": "my-cloud-project",
      "createdAt": "1592586495539",
      "lastModifiedAt": "1592586495539",
      "environments": [],
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "CLOUD",
      "subscriptionType": "PAID",
      "caCertificate": "YOUR_CERTIFICATE",
      "authorizedNetwork": "my-network",
      "projectId": "my-cloud-project"
    }

    数据驻留

      {
        "name": "my-cloud-project",
        "createdAt": "1681412783749",
        "lastModifiedAt": "1681412783749",
        "environments": [
          "test-env"
        ],
        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "YOUR_CERTIFICATE",
        "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "projectId": "my-cloud-project",
        "state": "ACTIVE",
        "billingType": "PAYG",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {},
          "connectorsPlatformConfig": {}
        },
        "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "apiConsumerDataLocation": "us-central1",
        "apigeeProjectId": "i0c2a37e80f9850ab-tp"
      }
    
    

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

第 6 步:创建运行时实例

运行时实例是 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 实例的 IP 地址范围。
  6. 通过向 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 返回错误,请参阅创建新实例

  7. 要检查运行时实例创建请求的状态,请执行以下命令。当状态为 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"

第 7 步:创建环境

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

  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

    随用随付

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

    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 是此环境的环境类型,仅适用于随用随付用户,这些用户必须指定以下值之一: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 会创建一个新的环境。

    随用随付

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

    无数据驻留

    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"

第 8 步:配置路由

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

访问类型 配置和部署过程的说明
使用 VPC 对等互连进行内部访问

仅允许从内部访问 API 代理。

您必须在网络内创建新虚拟机并与其连接。在新虚拟机中,您可以向 Apigee API 代理发送请求。

使用 MIG 进行外部访问

允许从外部访问 API 代理。

使用代管式实例组 (MIG) 可以将 API 流量从全球负载均衡器的后端服务发送到 Apigee。使用此配置时,Apigee 只能连接到对等互连 VPC。此配置可让您从任何启用了网络的机器发送 Apigee API 代理请求。

使用 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 代理请求。

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

内部路由 (VPC)

对于从内部客户端到 Apigee 的流量路由,您可以选择是否使用 TLS 终结:

  • TLS 选项:如果您想要在启用 TLS 的情况下从内部客户端进行 API 代理调用,您有以下两种选择:
    • (选项 1)配置内部负载均衡器 (ILB):
      1. 在项目中创建托管式实例组 (MIG)。如需创建 MIG,请按照外部路由 (MIG)标签页中的步骤 8a8b8c 操作。
      2. 创建并配置内部 HTTPS(S) 负载均衡器 (ILB),并将您创建的 MIG 连接到 ILB 的后端服务,如使用虚拟机实例组后端设置内部 HTTP(S) 负载均衡所述。ILB 配置使您可以完全控制用于 ILB 的 CA 证书。
      3. 前往调用仅限内部访问的 API 代理以测试设置。
    • (选项 2)使用 Apigee 实例的内部默认完全限定域名和内部负载均衡器 IP。建议仅将此方法用于测试目的,不建议用于生产环境。在这种情况下,Apigee 创建的自签名证书用于 Apigee 的内部负载均衡器,您无法更改它们。请参阅调用仅限内部访问的 API 代理
  • 非 TLS 选项:如果您不需要启用 TLS 终结,则可以调用客户端停用 TLS 的 API 代理。例如,通过将 -k 选项与 cURL 搭配使用,您可以停用 TLS。请参阅调用仅限内部访问的 API 代理

外部路由 (MIG)

本部分介绍了如何配置路由以允许使用托管式实例组 (MIG) 从外部访问 API 代理,从而将 API 流量从全球负载均衡器的后端服务发送到 Apigee。您必须先执行此操作,然后才能从外部客户端向 Apigee 运行时实例发送请求。

其大体流程如下:

第 8a 步:为 VPC 网络的子网启用专用 Google 访问通道
第 8b 步:设置环境变量
第 8c 步:创建托管式实例组
第 8d 步:为负载均衡器创建 SSL 证书和密钥
第 8e 步:创建全局负载均衡器
第 8f 步:获取预留 IP 地址并创建防火墙规则

后续几个部分将介绍其中每个步骤。

第 8a 步:为 VPC 网络的子网启用专用 Google 访问通道

如需为您的 VPC 网络的子网启用专用 Google 访问通道,请按照启用专用 Google 访问通道中列出的步骤操作。

第 8b 步:设置环境变量

本部分中的说明使用环境变量来引用重复使用的字符串。我们建议您先进行以下设置,然后再继续:

MIG_NAME=apigee-mig-MIG_NAME   # You can choose a different name if you like
VPC_NAME=default       # If you are using a shared VPC, use the shared VPC name
VPC_SUBNET=default     # Private Google Access must be enabled for this subnet
REGION=RUNTIME_REGION        # The same region as your Apigee runtime instance
APIGEE_ENDPOINT=APIGEE_INSTANCE_IP     # See the tip below for details on getting this IP address value

在剩余的流程中,您将多次使用这些变量。如果要配置多个区域,请创建对于每个区域都有特定值的变量。

第 8c 步:创建托管式实例组

在此步骤中,您将创建并配置托管式实例组 (MIG)。在稍后的步骤中,系统会将该 MIG 添加到连接到全局负载均衡器的后端服务。要将 API 流量从全局负载均衡器的后端服务发送到 Apigee,需要 MIG。

如需创建 MIG,请执行以下操作

  1. 通过执行以下命令来创建实例模板
    gcloud compute instance-templates create $MIG_NAME \
    --project $PROJECT_ID \
    --region $REGION \
    --network $VPC_NAME \
    --subnet $VPC_SUBNET \
    --tags=https-server,apigee-mig-proxy,gke-apigee-proxy \
    --machine-type e2-medium --image-family debian-10 \
    --image-project debian-cloud --boot-disk-size 20GB \
    --no-address \
    --metadata ENDPOINT=$APIGEE_ENDPOINT,startup-script-url=gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh

    正如您在此命令中看到的那样,机器的类型为 e2-medium。它们运行 Debian 10 并具有 20GB 磁盘。startup-script.sh 脚本会将 MIG 配置为将来自负载均衡器的入站流量路由到 Apigee 实例。

  2. 通过执行以下命令来创建托管式实例组
    gcloud compute instance-groups managed create $MIG_NAME \
    --project $PROJECT_ID --base-instance-name apigee-mig \
    --size 2 --template $MIG_NAME --region $REGION
  3. 通过执行以下命令为实例组配置自动扩缩
    gcloud compute instance-groups managed set-autoscaling $MIG_NAME \
    --project $PROJECT_ID --region $REGION --max-num-replicas 3 \
    --target-cpu-utilization 0.75 --cool-down-period 90
  4. 通过执行以下命令来定义已命名端口:
    gcloud compute instance-groups managed set-named-ports $MIG_NAME \
    --project $PROJECT_ID --region $REGION --named-ports https:443

第 8d 步:为负载均衡器创建 SSL 证书和密钥

无论您是在单区域还是在多区域中进行安装,都只需创建一次凭据。在稍后的步骤中,您会将这些凭据与负载均衡器的目标 HTTPS 代理相关联。

您可以使用以下命令创建凭据:

如需详细了解如何为 Google Cloud 负载均衡器创建和使用 SSL 证书,请参阅 SSL 证书SSL 证书概览

在以下示例中,我们创建了一个 Google 托管式 SSL 证书:

  1. 创建以下环境变量:
    CERTIFICATE_NAME=YOUR_CERT_NAME
    DOMAIN_HOSTNAME=YOUR_DOMAIN_HOSTNAME 

    DOMAIN_HOSTNAME 设置为您注册的有效网域主机名。在稍后的步骤中,您将获取负载均衡器的 IP 地址,并将网域 A 记录更新为指向该地址。例如,网域主机名可能如下所示:foo.example.com

  2. 执行 gcloud compute ssl-certificates create 命令:
    gcloud compute ssl-certificates create $CERTIFICATE_NAME \
      --domains=$DOMAIN_HOSTNAME \
      --project $PROJECT_ID \
      --global

    证书最多可能需要一个小时才能完成预配。如需检查预配的状态,请执行以下命令:

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

第 8e 步:创建全局负载均衡器

  1. 创建健康检查
    gcloud compute health-checks create https HEALTH_CHECK_NAME \
    --project $PROJECT_ID --port 443 --global \
    --request-path /healthz/ingress

    您将使用此健康检查来确保后端服务正在运行。如需了解如何针对特定代理配置更高级的健康检查,请参阅执行健康检查

  2. 创建后端服务
    gcloud compute backend-services create PROXY_BACKEND_NAME \
    --project $PROJECT_ID \
    --protocol HTTPS \
    --health-checks HEALTH_CHECK_NAME \
    --port-name https \
    --timeout 302s \
    --connection-draining-timeout 300s \
    --global
  3. 使用以下命令将 MIG 添加到后端服务:
    gcloud compute backend-services add-backend PROXY_BACKEND_NAME \
    --project $PROJECT_ID --instance-group $MIG_NAME \
    --instance-group-region $REGION \
    --balancing-mode UTILIZATION --max-utilization 0.8 --global
  4. 使用以下命令创建负载均衡网址映射
    gcloud compute url-maps create MIG_PROXY_MAP_NAME \
    --project $PROJECT_ID --default-service PROXY_BACKEND_NAME
  5. 使用以下命令创建负载均衡目标 HTTPS 代理
    gcloud compute target-https-proxies create MIG_HTTPS_PROXY_NAME \
    --project $PROJECT_ID --url-map MIG_PROXY_MAP_NAME \
    --ssl-certificates $CERTIFICATE_NAME

第 8f 步:获取预留 IP 地址并创建防火墙规则

您必须为负载均衡器分配 IP 地址,然后创建允许负载均衡器访问 MIG 的规则。无论您是在单区域还是多区域安装,此步骤只需执行一次。

  1. 为负载均衡器预留 IP 地址
    gcloud compute addresses create ADDRESSES_NAME \
    --project $PROJECT_ID \
    --ip-version=IPV4 \
    --global
  2. 使用以下命令创建全局转发规则
    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --project $PROJECT_ID --address ADDRESSES_NAME --global \
    --target-https-proxy MIG_HTTPS_PROXY_NAME --ports 443
  3. 通过执行以下命令来获取预留 IP 地址:
    gcloud compute addresses describe ADDRESSES_NAME \
    --project $PROJECT_ID --format="get(address)" --global
  4. 重要步骤:转到您的 DNS 记录管理所管理的网站、DNS 主机或 ISP,确保您的网域的 DNS 记录解析为 Google Cloud 负载均衡器的 IP 地址。此地址是上一步中返回的 IP 值。如需了解详情,请参阅更新 DNS A 和 AAAA 记录以指向负载均衡器的 IP 地址
  5. 使用以下命令创建一条防火墙规则,允许负载均衡器访问 MIG:
    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --description "Allow incoming from GLB on TCP port 443 to Apigee Proxy" \
    --project $PROJECT_ID --network $VPC_NAME --allow=tcp:443 \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gke-apigee-proxy

    请注意,IP 地址范围 130.211.0.0/2235.191.0.0/16 是 Google 负载均衡的源 IP 地址范围。此防火墙规则允许 Google Cloud Load Balancing 向 MIG 发出健康检查请求。

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

内部路由 (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",
          "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/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. 创建一个 PSC 服务端点并指向您在上一步中从实例响应正文获取的服务连接,如创建 Private Service Connect 端点中所述。
  3. 如需测试设置,请参阅调用仅限内部访问的 API 代理

内部区域级 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",
        "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"
      }
    ]
    }
  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 \
    --global --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

    替换以下内容:

    • FWD_RULE:转发规则的名称。
    • ADDRESS_NAME:您预留用于转发规则的 IP 地址资源。
    • PROXY_NAME:目标 HTTPS 代理的名称。
  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 预配完成。转到部署示例代理

第 9 步:部署示例代理

  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 代理