使用 VPC 对等互连预配付费组织
本页面适用于 Apigee ,但不适用于 Apigee Hybrid 。
查看 Apigee Edge 文档。
本文档介绍如何在使用 VPC 对等互连 的情况下通过命令行安装和配置 Apigee。这些步骤适用于启用或未启用数据驻留 的付费组织的订阅和随用随付价格模式。
步骤摘要
预配步骤如下:
第 1 步:定义环境变量
设置 gcloud
并定义环境变量,以供后续步骤使用:
请确保已完成准备工作 中列出的设置要求。
您必须已安装 Cloud SDK。如果您需要安装,请参阅安装 Cloud SDK 。
初始化 Cloud SDK(如初始化 gcloud CLI 中所述),否则请确保您在前提条件 中创建的 Google Cloud 项目是 gcloud
的默认项目。
在命令终端中定义以下环境变量。选择与所需组织类型对应的标签页:无数据驻留 或有数据驻留 :
提示: 将您的环境变量保存在文本文件中,以便在需要时能够轻松恢复它们。
无数据驻留
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 "
注意 :如果您要在 Google Cloud 项目中预配新的 Apigee 组织,并在组织政策中应用资源位置限制条件 ,请确认位置限制设置为 global
。由于 Apigee 控制平面默认是全局实体,因此在应用 global
以外的限制条件时,预配将失败。如需了解详情,请参阅数据驻留简介 。
其中:
AUTH 使用不记名令牌定义 Authentication
标头。
您将在调用 Apigee API 时使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令 参考页面。
PROJECT_ID 是您在前提条件 中创建的 Cloud 项目 ID。
PROJECT_NUMBER 是您在前提条件 中创建的 Cloud 项目编号。
RUNTIME_LOCATION 是您稍后创建的 Apigee 实例所在的物理位置。如需查看可用运行时位置的列表,请参阅 Apigee 位置 。
注意 :对于 RUNTIME_LOCATION
,请务必使用区域 名称,而不是可用区名称。例如,us-west1
是区域名称,us-west1-a
是该区域中的可用区。另请参阅确定区域或可用区 。
ANALYTICS_REGION 是存储 Apigee 分析数据的物理位置。如需查看可用的 Apigee API Analytics 区域列表,请参阅 Apigee 位置 。
RUNTIME_LOCATION 和 ANALYTICS_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 "
重要提示: 使用数据驻留时,控制平面位置是包含区域。所有其他区域必须位于控制平面位置:当控制平面位置为 us
时,使用方数据区域和运行时位置也必须位于 us
中。例如,us-west1
是可接受的,而 europe-west1
是不可接受的。
其中:
(可选)通过回送您刚刚设置的值来检查您的工作。请注意,要在命令中使用变量,请在变量名称前面加上美元符号 ($ )。
无数据驻留
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
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅预定义角色 和 API 启用权限 。
Apigee 要求您启用多个 Google Cloud API。通过执行以下 services enable
命令启用它们:
gcloud services enable apigee.googleapis.com \
servicenetworking.googleapis.com \
compute.googleapis.com \
cloudkms.googleapis.com --project=$PROJECT_ID
(可选)如需查看您的工作,请使用 services list
命令显示所有已启用的 API:
gcloud services list
该响应会显示所有已启用的服务,包括您刚刚启用的 API。
第 3 步:创建 Apigee 服务身份
警告 :服务账号 是 Apigee 预配运行时实例时所需的特殊账号。删除服务账号会导致运行时实例无法使用。
创建 Apigee 服务身份 :
gcloud beta services identity create --service=apigee.googleapis.com \
--project=$PROJECT_ID
验证代理已成功创建。响应应按以下格式显示代理的名称: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 扩展到多个区域 。
重要提示 :如果您已经有对等互连范围并与 servicenetworking.googleapis.com
建立了专用连接,而且您的范围足够大,可以处理另一个 /22
和 /28
CIDR 范围,则可以跳过此步骤。Apigee 将为您创建所需的 CIDR 地址块。仅当您尚未创建有余地来创建 /22
和 /28
地址块的空间或者仅当您想使用当前不存在的特定 /22
和 /28
时,才需要执行此步骤。
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅预定义角色 和服务网络权限 。
创建以下环境变量:
RANGE_NAME =YOUR_RANGE_NAME
NETWORK_NAME =YOUR_NETWORK_NAME
其中:
创建 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 地址范围后,地址便会与项目关联,直到您将地址释放。
验证已创建的网络 IP 地址范围的 CIDR 长度是否为 /22:
gcloud compute addresses list --global --project=$PROJECT_ID
gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
创建 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 会为您选择一个可用地址范围。
验证已创建的网络 IP 地址范围的 CIDR 长度是否为 /28:
gcloud compute addresses list --global --project=$PROJECT_ID
gcloud compute addresses describe google-managed-services-support-1 --global \
--project=$PROJECT_ID
使用以下命令将您的服务连接到网络:
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_ID 是 LRO 的 UUID。
Operation "operations/OPERATION_ID " finished successfully.
Apigee 在您的网络与 Google 服务之间建立连接;具体而言,Apigee 通过 VPC 对等互连将您的项目连接到 Service Networking API。Apigee 还会将 IP 地址与您的项目关联。
几分钟后,验证 VPC 对等互连是否成功:
gcloud services vpc-peerings list \
--network=$NETWORK_NAME \
--service=servicenetworking.googleapis.com \
--project=$PROJECT_ID
第 5 步:创建组织
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅:
您必须先创建运行时数据库加密密钥环和密钥,然后才能创建组织(请参阅步骤 1 ),并且如果您使用数据驻留 ,还必须创建控制平面加密密钥环和钥匙(请参阅步骤 2 )。这些 Cloud KMS 密钥会对跨运行时和控制平面位置存储和复制的数据进行加密。Apigee 使用这些实体来加密应用数据,例如 KVM、缓存和客户端密钥,这些数据随后存储在数据库中。如需了解详情,请参阅 Apigee 加密密钥简介 。
创建运行时数据库加密密钥环和密钥。
为运行时数据库加密密钥环和密钥位置定义一个环境变量。这有助于在创建时确保一致性,并让您能够更轻松地在文档中执行操作。
该值是存储运行时数据库加密密钥环和密钥的物理位置。
单区域
单区域配置 (在一个区域中只有一个实例):从支持的 KMS 区域位置 中进行选择。
例如:
RUNTIMEDBKEY_LOCATION ="us-west1"
该值可以与 $RUNTIME_LOCATION (也是一个区域)相同,但不一定要相同。不过,如果两者相同,则可能会获得性能优势。
多区域
多区域配置 :从支持的多区域位置 (例如 us
或 europe
)或双区域位置 中进行选择。
例如:
RUNTIMEDBKEY_LOCATION ="us"
我们建议您在美国使用多区域配置。如果可能,请使用 us
作为您的位置。否则,请使用 nam4
。
定义数据库密钥环和密钥名称的环境变量。
密钥环的名称在您的组织中必须是唯一的。如果您创建第二个或后续区域,则名称不能与其他密钥环名称相同。
RUNTIMEDB_KEY_RING_NAME =YOUR_DB_KEY_RING_NAME
RUNTIMEDB_KEY_NAME =YOUR_DB_KEY_NAME
(可选)通过回送您刚刚设置的值来检查您的工作。请注意,要在命令中使用变量,请在变量名称前面加上美元符号 ($ )。
echo $RUNTIMEDBKEY_LOCATION
echo $RUNTIMEDB_KEY_RING_NAME
echo $RUNTIMEDB_KEY_NAME
创建新的密钥环:
gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
--location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID
Apigee 运行时数据库加密密钥的位置支持所有支持 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。
创建密钥:
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
将密钥 ID 放入环境变量中。您将在后面的命令中使用此变量:
RUNTIMEDB_KEY_ID =YOUR_RUNTIMEDB_KEY_ID
向 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.
请务必使用项目编号 ,而不是服务账号电子邮件地址中的项目名称。
如果您使用的是数据驻留 ,请创建控制平面加密密钥环和密钥。如果您不使用数据驻留,请转到第 3 步 。
注意 :仅当您选择了 us (multiple regions in us)
或 eu (multiple regions in European Union)
作为控制平面托管管辖区时,才需要执行此步骤。如果您选择了其他区域,请转到第 3 步 。
执行以下步骤以创建控制平面加密密钥环和密钥。
为控制平面数据库加密环和密钥的位置定义一个环境变量:
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 位置 。
为控制平面数据库密钥环和密钥名称定义环境变量。
密钥环的名称在您的组织中必须是唯一的。
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 是用于标识使用方数据区域加密密钥 的密钥名称。
创建新的密钥环:
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
创建密钥:
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
将密钥 ID 放入环境变量中。您将在后面的命令中使用此变量:
CONTROL_PLANE_KEY_ID =YOUR_CONTROL_PLANE_KEY_ID
CONSUMER_DATA_KEY_ID =YOUR_CONSUMER_DATA_KEY_ID
向 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 问题排查 。
将以下请求发送到 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
定义请求的数据载荷。此载荷必须包含以下内容:
数据驻留
使用 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
:标识您在配置服务网络 中指定的对等互连网络。
注意 :Apigee 还支持使用共享 VPC (即宿主网络项目不同于与 Apigee 对等互连的项目)。如需使用共享 VPC 网络,请使用以下格式:
projects/HOST_PROJECT_ID /REGION /networks/NETWORK_NAME
。
例如:projects/my-sharedvpc-host/global/networks/mynetwork
另请参阅 VPC 概览 和 REST 资源:组织 。
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", ... }'
请稍等几分钟。
如需检查创建请求的状态,您可以向 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 组织 。
在此步骤中,您将配置客户端应用与 Apigee 通信的方式。客户端到 Apigee 流量也称为“北向”流量。北向配置选项包括。转到要使用的配置选项,然后执行该选项的对应步骤:
内部路由 (VPC)
对于从内部客户端到 Apigee 的流量路由,您可以选择是否使用 TLS 终结:
TLS 选项 :如果您想要在启用 TLS 的情况下从内部客户端进行 API 代理调用,您有以下两种选择:
(选项 1)配置内部负载均衡器 (ILB):
在项目中创建代管式实例组 (MIG)。如需创建 MIG,请按照外部路由 (MIG) 标签页中的步骤 8a 、8b 和 8c 操作。
创建并配置内部 HTTPS(S) 负载均衡器 (ILB),并将您创建的 MIG 连接到 ILB 的后端服务,如使用虚拟机实例组后端设置内部 HTTP(S) 负载均衡 所述。ILB 配置使您可以完全控制用于 ILB 的 CA 证书。
前往调用仅限内部访问的 API 代理 以测试设置。
(选项 2)使用 Apigee 实例的内部默认完全限定域名和内部负载均衡器 IP。建议仅将此方法用于测试目的,不建议用于生产环境。在这种情况下,Apigee 创建的自签名证书用于 Apigee 的内部负载均衡器,您无法更改它们。请参阅调用仅限内部访问的 API 代理 。
非 TLS 选项 :如果您不需要启用 TLS 终结,则可以调用客户端停用 TLS 的 API 代理。例如,通过将 -k
选项与 cURL 搭配使用,您可以停用 TLS。请参阅调用仅限内部访问的 API 代理 。
外部路由 (MIG)
本部分介绍了如何配置路由以允许使用托管式实例组 (MIG) 从外部 访问 API 代理,从而将 API 流量从全球负载均衡器的后端服务发送到 Apigee。您必须先执行此操作,然后才能从外部客户端向 Apigee 运行时实例发送请求。
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅预定义角色 和访问路由权限 。
注意 :对于多区域设置,您必须 按照此处所述的命令行步骤操作。预配界面仅允许将一个 MIG 添加到全局负载均衡器。MIG 不具有全球性,属于区域级。因此,对于多区域,您必须为每个区域创建一个 MIG 并将其添加到全局负载均衡器的后端服务。
其大体流程如下:
第 8a 步:为 VPC 网络的子网启用专用 Google 访问通道
第 8b 步:设置环境变量
第 8c 步:创建托管式实例组
第 8d 步:为负载均衡器创建 SSL 证书和密钥
第 8e 步:创建全局负载均衡器
第 8f 步:获取预留 IP 地址并创建防火墙规则
后续几个部分将介绍其中每个步骤。
第 8a 步:为 VPC 网络的子网启用专用 Google 访问通道
如需为您的 VPC 网络的子网启用专用 Google 访问通道 ,请按照启用专用 Google 访问通道 中列出的步骤操作。
注意 :如果您要执行多区域设置,则必须为每个区域执行一次此步骤。
第 8b 步:设置环境变量
多区域 :多区域设置需要为每个区域使用单独的 MIG。如果要配置多个区域,请对每个区域重复执行步骤 8b 和 8c,并为每个区域替换相应的变量。
本部分中的说明使用环境变量来引用重复使用的字符串。我们建议您先进行以下设置,然后再继续:
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。如果要配置多个区域,请对每个区域重复执行步骤 8b 和 8c,并为每个区域替换相应的变量。
在此步骤中,您将创建并配置托管式实例组 (MIG)。在稍后的步骤中,系统会将该 MIG 添加到连接到全局负载均衡器的后端服务。要将 API 流量从全局负载均衡器的后端服务发送到 Apigee,需要 MIG。
如需创建 MIG,请执行以下操作 :
通过执行以下命令来创建实例模板 。
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-12 \
--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 12 并具有 20GB 磁盘。startup-script.sh
脚本会将 MIG 配置为将来自负载均衡器的入站流量路由到 Apigee 实例。
通过执行以下命令来创建托管式实例组 :
gcloud compute instance-groups managed create $MIG_NAME \
--project $PROJECT_ID --base-instance-name apigee-mig \
--size 2 --template $MIG_NAME --region $REGION
通过执行以下命令为实例组配置自动扩缩 :
注意 :使用 e2-medium 实例的区域级 MIG 最高可支持 6 Gbps。如果这不足以满足您的吞吐量需求,请考虑增加虚拟机大小和/或增加副本的数量。
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
通过执行以下命令来定义已命名端口:
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 证书:
创建以下环境变量:
CERTIFICATE_NAME =YOUR_CERT_NAME
DOMAIN_HOSTNAME =YOUR_DOMAIN_HOSTNAME
将 DOMAIN_HOSTNAME
设置为您注册的有效网域主机名。在稍后的步骤中,您将获取负载均衡器的 IP 地址,并将网域 A 记录更新为指向该地址。例如,网域主机名可能如下所示:foo.example.com
。
执行 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)"
注意: 您可为环境组主机名创建多个 DNS A 记录,这些记录均指向同一负载均衡器 IP 地址。
第 8e 步:创建全局负载均衡器
创建健康检查 :
gcloud compute health-checks create https HEALTH_CHECK_NAME \
--project $PROJECT_ID --port 443 --global \
--request-path /healthz/ingress
您将使用此健康检查来确保后端服务正在运行。如需了解如何针对特定代理配置更高级的健康检查,请参阅执行健康检查 。
注意 :如果您在尝试创建健康检查时收到以下错误:
ERROR: unrecognized arguments: --global,
请尝试使用 gcloud components update
命令更新 gcloud
。
创建后端服务 :
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
注意 :如 Apigee 端点属性参考文档 中所述,Apigee 的 Ingress(内部负载均衡器)的默认超时时间为 300 秒。将负载均衡器的后端服务超时设置为 302 秒,以便在存在长时间运行的事务时,backend-services 命令可在 Apigee 中完全完成。将此值设置为较小的值(例如 60 秒)可能会导致负载均衡器在请求完成之前超时,从而产生 502 响应。
使用以下命令将 MIG 添加到后端服务:
多区域 :对于多区域设置,您必须为每个区域创建单独的 MIG 地区,然后重复此步骤,将每个 MIG 添加到后端服务。请务必针对每个区域替换相应的 REGION
和 MIG_NAME
变量。
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
使用以下命令创建负载均衡网址映射 :
gcloud compute url-maps create MIG_PROXY_MAP_NAME \
--project $PROJECT_ID --default-service PROXY_BACKEND_NAME
使用以下命令创建负载均衡目标 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 的规则。无论您是在单区域还是多区域安装,此步骤只需执行一次。
为负载均衡器预留 IP 地址 :
gcloud compute addresses create ADDRESSES_NAME \
--project $PROJECT_ID \
--ip-version=IPV4 \
--global
使用以下命令创建全局转发规则 :
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
--project $PROJECT_ID --address ADDRESSES_NAME --global \
--target-https-proxy MIG_HTTPS_PROXY_NAME --ports 443
通过执行以下命令来获取预留 IP 地址:
gcloud compute addresses describe ADDRESSES_NAME \
--project $PROJECT_ID --format="get(address)" --global
重要步骤 :转到您的 DNS 记录管理所管理的网站、DNS 主机或 ISP,确保您的网域的 DNS 记录解析为 Google Cloud 负载均衡器的 IP 地址。此地址是上一步中返回的 IP 值。如需了解详情,请参阅更新 DNS A 和 AAAA 记录以指向负载均衡器的 IP 地址 。
使用以下命令创建一条防火墙规则,允许负载均衡器访问 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/22
和 35.191.0.0/16
是 Google 负载均衡的源 IP 地址范围。此防火墙规则允许 Google Cloud Load Balancing 向 MIG 发出健康检查请求。
Apigee 预配完成。转到部署示例代理 。
内部路由 (PSC)
本部分介绍如何使用 Private Service Connect (PSC) 仅允许从任何 Google Cloud 项目内部访问 API 代理。
您有两种使用 PSC 配置内部访问权限的选项:
在下面选择您的配置选项对应的标签页,然后按照以下步骤操作:
服务端点
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅预定义角色 和访问路由权限 。
为服务连接创建 PSC 服务端点
从先前创建的实例获取服务连接:
无数据驻留
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 "
}
]
}
注意: 您用于创建 Apigee 组织 的项目的 ID 始终显示在 consumerAcceptList
列表中。在上面显示的示例输出中,它是该列表中的唯一项目。
创建一个 PSC 服务端点并指向您在上一步中从实例响应正文获取的服务连接,如创建 Private Service Connect 端点 中所述。
如需测试设置,请参阅调用仅限内部访问的 API 代理 。
内部区域级 LB
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。
请参阅预定义角色 和访问路由权限 。
限制: 请注意 PSC 配置的以下限制:
此配置不支持全球外部 HTTP(S) 负载均衡器(经典版) 。
对于使用多个 PSC NEG 的故障切换,不支持主动健康检查。请改用离群值检测 。
可以通过 PSC 连接到 Apigee 实例的 Google Cloud 项目数量以及您可以为每个项目拥有的 PSC NEG 连接数量均受限。如需了解详情,请参阅 Private Service Connect (PSC) 限制 。
如果从 consumerAcceptList
中移除 Google Cloud 项目,则该已移除项目中的现有 PSC NEG 将继续正常运行。但是,所有新的 NEG 都将被拒绝。如果您从 consumerAcceptList
中移除 NEG 关联的项目,则必须删除现有 NEG。或者,您可以重新创建 Apigee 实例,这会在 Apigee 项目中重新创建服务连接。
第 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。子网可以由虚拟机或其他实体共享和使用。如果未指定子网,网络端点可能属于创建网络端点组的区域中的任何子网。
注意 :如果您指定 --network
参数,则还必须指定 --subnet
。
第 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)
从先前创建的实例获取服务连接:
无数据驻留
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 "
}
]
}
注意: 您用于创建 Apigee 组织 的项目的 ID 始终显示在 consumerAcceptList
列表中。在上面显示的示例输出中,它是该列表中的唯一项目。
创建一个指向您在上一步中从实例响应正文获取的服务连接的 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 步:配置区域级内部负载均衡器
为负载均衡器预留内部 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
为 NEG 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE_NAME \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTPS \
--region=$RUNTIME_REGION \
--project=$PROJECT_ID
将 BACKEND_SERVICE_NAME 替换为后端服务的名称。
将 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 :后端服务的名称。
如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源 。
使用此命令创建自行管理的 SSL 证书资源。如需创建自行管理的 SSL 证书,您需要本地私钥文件和本地证书文件。如果您需要创建这些文件,请参阅使用自行管理的 SSL 证书的第 1 步 。
注意 :内部区域级负载均衡器不支持 Google 管理的证书。
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 格式的私钥文件的路径。
为负载均衡器创建网址映射。
网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。
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 :负载均衡器的默认后端服务的名称。
当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
使用 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 :证书资源的名称。
创建转发规则。
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 :用于与提供方建立专用连接的子网的名称。
注意 :如果您指定 --network
参数,则还必须指定 --subnet
。
Apigee 预配完成。转到部署示例代理 。
外部路由 (PSC)
本部分介绍了如何使用 Private Service Connect (PSC) 配置外部路由,以允许在 Apigee 和您控制的 VPC 之间进行通信。您必须先执行此操作,然后才能从外部客户端向 Apigee 运行时实例发送请求。
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。
请参阅预定义角色 和访问路由权限 。
限制: 请注意 PSC 配置的以下限制:
此配置不支持全球外部 HTTP(S) 负载均衡器(经典版) 。
对于使用多个 PSC NEG 的故障切换,不支持主动健康检查。请改用离群值检测 。
可以通过 PSC 连接到 Apigee 实例的 Google Cloud 项目数量以及您可以为每个项目拥有的 PSC NEG 连接数量均受限。如需了解详情,请参阅 Private Service Connect (PSC) 限制 。
如果从 consumerAcceptList
中移除 Google Cloud 项目,则该已移除项目中的现有 PSC NEG 将继续正常运行。但是,所有新的 NEG 都将被拒绝。如果您从 consumerAcceptList
中移除 NEG 关联的项目,则必须删除现有 NEG。或者,您可以重新创建 Apigee 实例,这会在 Apigee 项目中重新创建服务连接。
第 8b 步:创建 NEG 并配置负载均衡器
您可以创建全球级或区域级负载均衡器。
全球外部 LB
配置全球外部 HTTP(S) 负载均衡器 (负载均衡方案设置为 EXTERNAL_MANAGED
)。
虽然 Private Service Connect NEG 是区域性的,但此配置中的所有其他负载均衡组件都是全球性的。
确保您已在定义环境变量 中设置环境变量。
从先前创建的实例获取服务连接:
无数据驻留
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 "
}
]
}
注意: 您用于创建 Apigee 组织 的项目的 ID 始终显示在 consumerAcceptList
列表中。在上面显示的示例输出中,它是该列表中的唯一项目。
创建一个指向您在上一步中从实例响应正文获取的服务连接的 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。子网可以由虚拟机或其他实体共享和使用。
如果未指定子网,网络端点可能属于创建网络端点组的区域中的任何子网。
注意 :如果您指定 --network
参数,则还必须指定 --subnet
。
$PROJECT_ID :已与您的 Apigee 组织关联的 Cloud 项目,或创建 Apigee 运行时实例 时包含在 consumerAcceptlist
中的 Cloud 项目。创建一个环境变量来保存项目 ID(如果尚未创建),因为在接下来的大多数命令中会用到它。
为负载均衡器预留全球外部 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
为 NEG 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE_NAME \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global --project=$PROJECT_ID
将 BACKEND_SERVICE_NAME 替换为后端服务的名称。
将 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 :网络端点组的区域。
为负载均衡器创建网址映射。
网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。
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 :负载均衡器的默认后端服务的名称。
当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
创建目标 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 :证书资源的名称。
创建转发规则。
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) 负载均衡器概览 。
确保您已在定义环境变量 中设置变量。
创建代理专用子网:
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 :在其中创建子网的网络的名称。如果您省略此参数,则系统会使用默认项目网络。
从先前创建的实例获取服务连接:
无数据驻留
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 "
}
]
}
注意: 您用于创建 Apigee 组织 的项目的 ID 始终显示在 consumerAcceptList
列表中。在上面显示的示例输出中,它是该列表中的唯一项目。
创建网络端点组。
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
为 NEG 创建后端服务。
gcloud compute backend-services create BACKEND_SERVICE_NAME \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--region=$RUNTIME_LOCATION \
--project=$PROJECT_ID
将 BACKEND_SERVICE_NAME 替换为后端服务的名称。
将 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 :网络端点组的名称。
为负载均衡器创建网址映射。
网址映射必须引用默认后端服务。将刚刚创建的后端服务设置为默认后端服务。
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 :负载均衡器的默认后端服务的名称。
当没有主机规则与请求的主机名匹配时,系统会使用默认后端服务。
创建目标 HTTPS 代理。
如需创建 HTTPS 负载均衡器,您必须拥有要在 HTTPS 目标代理中使用的 SSL 证书资源 。
使用此命令创建自行管理的 SSL 证书资源。如需创建自行管理的 SSL 证书,您需要本地私钥文件和本地证书文件。如果您需要创建这些文件,请参阅使用自行管理的 SSL 证书的第 1 步 。
注意 :内部区域级负载均衡器不支持 Google 管理的证书。
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 :证书资源的名称。
为负载均衡器预留区域外部地址。请注意,网络层级必须设置为 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
创建转发规则。
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 步:部署示例代理
执行此任务所需的权限
创建和部署代理需要最小权限集。如果您具有 Apigee Org Admin 角色,则可以完成此任务。如需了解您可以使用的其他角色,请参阅 Apigee 角色 。
从 GitHub 下载示例代理 。代理的目标是 httpbin.org 服务,这是一种常用的公共请求和响应服务。
使用 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 文件的目录的路径。
将 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"
使用此 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"
调用 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 代理 。