发送反馈
使用 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 组织和关联的 Google Cloud 项目,请使用 Organizations API 向以下端点发送 GET
请求:
无数据驻留:
curl -H "Authorization: Bearer $AUTH " https://apigee.googleapis.com/v1/organizations/
数据驻留:
curl -H "Authorization: Bearer $AUTH " https://$CONTROL_PLANE_LOCATION -apigee.googleapis.com/v1/organizations/
Apigee 会返回项目列表,如以下示例所示:
{
"organizations": [
{
"organization": "my-cloud-project",
"projectIds": [
"my-cloud-project"
],
"projectId": "my-cloud-project",
"location": "northamerica-northeast1"
},
{
"organization": "my-cloud-project-2",
"projectIds": [
"my-cloud-project-2"
],
"projectId": "my-cloud-project-2",
"location": "northamerica-northeast1"
}
]
}
第 6 步:创建运行时实例
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅预定义角色 和运行时实例权限 。
运行时实例是 Apigee 项目和相关服务的存储位置;它为您的服务提供面向用户的端点。要创建新的运行时实例,请执行以下操作:
检查 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 返回错误,请等待几分钟,然后重新发送请求。
与先前为数据库创建加密密钥的任务类似,现在您需要创建一个 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
其中:
INSTANCE_NAME :新实例的名称。例如 my-runtime-instance
。名称必须以小写字母开头,最多可包含 32 个字符,并且只能包含小写字母、数字和连字符。名称不能以连字符开头或结尾,且长度必须至少为 2 个字符。
RUNTIME_LOCATION 是托管您的集群的物理位置。有效值是 Compute Engine 允许的任何位置。(请参阅可用区域和可用区 )。本示例使用 us-west1
。
DISK_KEY_RING_NAME 是磁盘加密密钥环的名称。
DISK_KEY_NAME 是磁盘加密密钥的名称。
创建磁盘加密密钥:
创建新的磁盘密钥环:
gcloud kms keyrings create $DISK_KEY_RING_NAME \
--location $RUNTIME_LOCATION \
--project $PROJECT_ID
磁盘密钥环必须设置为与实例相同的位置。每个实例和密钥环都应该有自己的位置。
创建新的磁盘密钥:
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
将密钥路径放在环境变量中。您将在后面的命令中使用此变量:
DISK_KEY_ID =YOUR_DISK_KEY_ID
例如:DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
向 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 加密密钥简介 。
通过向 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 "'"]
}'
其中:
注意 :默认情况下,Apigee 会自动将之前在第 4 步:配置服务网络 中预留的现有 /22 和 /28 网络 IP 地址范围分配给实例。 在高级用例中,例如您预留了多个 /22 和 /28 范围或较大的范围块(如第 4 步:配置服务网络 中的 /16),并且您希望控制分配给实例的范围,您可能需要准确指定 Apigee 要使用的 IP 地址范围。在这些情况下,您需要指定前缀为 /22 或 /28 的自定义 IP 地址范围,或者同时指定这两种前缀。这些范围必须可作为您的项目与 Apigee 之间的专用连接的一部分使用。
如需自定义 IP 地址范围,请使用 Instances API 参考文档中所述的 ipRange
请求参数,如下所述:
创建一个环境变量,用于以 CIDR 格式保存 IP 地址范围:
MY_IP_RANGES=CIDR_RANGES
例如:
MY_IP_RANGES=10.0.0.1/22 // To specify only /22 range.
MY_IP_RANGES=10.0.0.1/22,10.0.0.2/28 // To specify both /22 and /28 ranges.
注意 :您可以仅自定义 /22 或 /28,也可以同时自定义这两个值。如果您提供的是 /22 或 /28 之一,Apigee 会自动从第 4 步:配置服务网络 中预留的 IP 地址范围中分配另一个范围。
使用 ipRange
参数创建实例:
无数据驻留:
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 "'",
"ipRange":"'"$MY_IP_RANGES "'",
"consumerAcceptList":[ARRAY_OF_PROJECT_IDS ]
}'
数据驻留:
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 "'",
"ipRange":"'"$MY_22_RANGE,$MY_28_RANGE "'",
"consumerAcceptList":[ARRAY_OF_PROJECT_IDS ]
}'
注意:IP 范围一经创建以后便无法更改。
如果您需要更改此范围,则必须创建新实例。
虽然 /22 IP 地址范围用于运行 Apigee 核心工作负载,但 Apigee 会使用 /28 范围来访问实例以进行问题排查。另请参阅创建实例 。此请求最多可能需要 20 分钟才能完成,因为 Apigee 必须创建并启动新的 Kubernetes 集群,在该集群上安装 Apigee 资源,并设置负载均衡。
如果 Apigee 返回错误,请参阅创建新实例 。
要检查运行时实例创建请求的状态,请执行以下命令。当状态为 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 步:创建环境
执行此任务所需的权限
您可以向 Apigee 预配工具授予包含完成此任务所需的权限的预定义角色,也可以授予更精细的权限以提供所需的最小权限。请参阅:
要通过命令行创建环境并将其连接到运行时,请执行以下操作:
定义要在本部分中使用的环境变量。您创建的特定环境变量取决于您是为订阅 还是为随用随付 组织创建环境。
订阅
对于订阅环境,请创建以下变量:
ENVIRONMENT_NAME ="YOUR_ENV_NAME "
ENV_GROUP_NAME ="YOUR_ENV_GROUP_NAME "
ENV_GROUP_HOSTNAME ="YOUR_ENV_GROUP_HOSTNAME "
其中:
ENVIRONMENT_NAME
为字符串名称。例如:test
ENV_GROUP_NAME
为字符串名称。例如:test-group
ENV_GROUP_HOSTNAME
是有效的域名托管服务商名称。例如:foo.example.com
Pay-as-you-go
对于随用随付环境,请创建以下变量:
ENVIRONMENT_NAME ="YOUR_ENV_NAME "
ENVIRONMENT_TYPE ="YOUR_ENV_TYPE "
ENV_GROUP_NAME ="YOUR_ENV_GROUP_NAME "
ENV_GROUP_HOSTNAME ="YOUR_ENV_GROUP_HOSTNAME "
其中:
ENVIRONMENT_NAME
为字符串名称。例如 test
ENVIRONMENT_TYPE
是此环境的环境类型 ,仅适用于Pay-as-you-go 用户,这些用户必须指定以下值之一:BASE
、INTERMEDIATE
或 COMPREHENSIVE
。其他用户应省略环境类型。
ENV_GROUP_NAME
为字符串名称。例如:test-group
ENV_GROUP_HOSTNAME
是有效的域名托管服务商名称。例如 foo.example.com
使用 Environments API 创建新环境。您使用的特定命令取决于您是为订阅 还是为随用随付 组织创建环境。
订阅
对于新的订阅环境,请使用以下命令:
无数据驻留
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments" \
-H "Authorization: Bearer $AUTH " \
-X POST \
-H "Content-Type:application/json" \
-d '{
"name":"'"$ENVIRONMENT_NAME "'"
}'
数据驻留
curl "https://$CONTROL_PLANE_LOCATION -apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments" \
-H "Authorization: Bearer $AUTH " \
-X POST \
-H "Content-Type:application/json" \
-d '{
"name":"'"$ENVIRONMENT_NAME "'"
}'
Apigee 会创建一个新的环境。
Pay-as-you-go
对于新的随用随付环境 ,请使用以下命令:
无数据驻留
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments" \
-H "Authorization: Bearer $AUTH " \
-X POST \
-H "Content-Type:application/json" \
-d '{
"name":"'"$ENVIRONMENT_NAME "'",
"type":"'"$ENVIRONMENT_TYPE "'"
}'
数据驻留
curl "https://$CONTROL_PLANE_LOCATION -apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments" \
-H "Authorization: Bearer $AUTH " \
-X POST \
-H "Content-Type:application/json" \
-d '{
"name":"'"$ENVIRONMENT_NAME "'",
"type":"'"$ENVIRONMENT_TYPE "'"
}'
Apigee 会创建一个新的环境。
在继续操作之前,请通过调用 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"
]
提示 :您可以发送如下命令来检查某个特定环境的状态:
无数据驻留:
curl -i -X GET -H "Authorization: Bearer $AUTH " \
"https://apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments/$ENVIRONMENT_NAME "
数据驻留:
curl -i -X GET -H "Authorization: Bearer $AUTH " \
"https://$CONTROL_PLANE_LOCATION -apigee.googleapis.com/v1/organizations/$PROJECT_ID /environments/$ENVIRONMENT_NAME "
Apigee 将仅提供有关该环境的详细信息;例如:
{
"name": "my-cloud-project",
"createdAt": "1592589683002",
"lastModifiedAt": "1592589683002",
"state": "ACTIVE"
}
将新环境挂接到运行时实例:
无数据驻留
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"
}
]
}
使用以下命令创建新的环境组:
如需了解详情,请参阅环境和环境组简介 :
无数据驻留
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 "'"]
}'
提示 :将环境连接到组只会使该环境中的代理可通过组中的主机名路由。
等待操作完成。您可以使用如下请求来检查新组的状态:
无数据驻留
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"
使用以下命令将新环境附加到新环境组:
无数据驻留
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 "'"
}'
如需检查操作的状态,请调用此 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"
在此步骤中,您将配置客户端应用与 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):
在项目中创建代管式实例组 (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 代理 。
发送反馈
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-02-14。
需要向我们提供更多信息?
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-02-14。"],[],[]]