本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
您可以跨多个区域扩展 Apigee 组织。多区域扩展可改善以下方面:
- 高可用性:如果某一区域发生故障,流量仍可由其余区域传送,从而提高 API 的整体可用性。
- 高容量:其他区域提供额外的容量来传送 API 流量,并为意外的流量高峰提供空间,使单个环境不会承受太大的压力,从而提高 API 的整体容量。
- 低延迟:其他区域可在地理上更接近的区域中响应请求,从而缩短客户端的整体事务延迟时间。
本文档介绍如何将 Apigee 添加到新区域以及如何从区域中移除 Apigee。
将 Apigee 添加到新区域
每个区域可以有一个运行时实例,因此如要添加新区域,您必须在该区域创建一个全新的实例。
添加新区域的大致过程如下:
- 确保您的对等互连网络中有适当的 IP 地址范围可用,如前提条件中所述。此外,请确保您的账号可以支持新的区域,如限制中所述。
- 定义环境变量
- 创建新的密钥环和密钥
- 预留新的地址范围
- 创建新实例
- 将环境关联到新实例
- 配置路由
后续几个部分将介绍其中每个步骤。
前提条件
确保您的网络有 /22 和 /28 作为可用的非重叠 IP 地址范围。此类范围会与其他区域所用的范围累加计算。
限制
默认情况下,初始组织通常使用单个区域创建。在决定是否创建第二个(或更多)区域时,请注意,只有在许可授权允许的情况下,您才能添加区域。您可以选择购买组织包。
- 如果您使用基于订阅的价格模式,则可能需要购买额外的组织单元,以支持扩展到多个区域。请参阅订阅权益。
- 如果您使用随用随付价格模式,扩展到多个区域会产生额外费用,具体请参阅添加随用随付区域。
- 评估账号仅限一个区域,不能扩展到第二个区域。
如需了解详情,请参阅随用随付概览。
任何组织最多只能有 10 个(对于 Hybrid 为 11 个)区域。
定义环境变量
我们建议您定义以下环境变量,以确保本文档中使用的命令之间的一致性。
export NEW_REGION_LOCATION="NEW_REGION_LOCATION"export NEW_INSTANCE_NAME="NEW_INSTANCE_NAME"
export NETWORK_NAME"=NETWORK_NAME"
export DISK_KEY_RING_NAME="YOUR_DISK_KEY_RING_NAME"
export DISK_KEY_NAME="YOUR_DISK_KEY_NAME"
export PROJECT_ID=YOUR_PROJECT_ID
export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
其中:
NEW_REGION_LOCATION
是新实例的物理位置。有效值为任意 Compute Engine 区域。如需了解详情,请参阅区域和可用区。例如us-west1
。NEW_INSTANCE_NAME
是新区域的名称。它在您的组织中必须是唯一的。例如my-instance-2
。NETWORK_NAME
是您的组织的对等互连网络的名称。例如my-network
。请参阅配置服务网络。DISK_KEY_RING_NAME
是磁盘密钥环的名称。DISK_KEY_NAME
是磁盘环的名称。AUTH
使用不记名令牌定义Authentication
标头。调用 Apigee API 时需使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令参考页面。PROJECT_ID
是您的 Cloud 项目 ID。PROJECT_NUMBER
是您的 Cloud 项目的编号。
创建新的密钥环和密钥
每个区域都需要有用于网络的磁盘加密密钥。Google 建议您也为新区域创建单独的密钥环。您无需创建新的数据库加密密钥,因为组织中的所有实例共用同一个数据库加密密钥。
如需了解详情,请参阅 Apigee 加密密钥简介。
如需创建新的磁盘加密密钥环和密钥,请执行以下操作:
- 使用
gcloud
命令创建新的磁盘密钥环:gcloud kms keyrings create $DISK_KEY_RING_NAME \ --location $NEW_REGION_LOCATION \ --project $PROJECT_ID
验证磁盘密钥环是否设置为与实例相同的位置。每个实例和密钥环都应该有自己的位置。
gcloud kms keyrings list \ --location $NEW_REGION_LOCATION \ --project $PROJECT_ID
gcloud kms keyrings describe $DISK_KEY_RING_NAME \ --location $NEW_REGION_LOCATION \ --project $PROJECT_ID
- 使用
kms keys create
命令创建新的磁盘密钥;例如:gcloud kms keys create $DISK_KEY_NAME --keyring $DISK_KEY_RING_NAME \ --location $NEW_REGION_LOCATION --purpose "encryption" --project $PROJECT_ID
密钥可由其密钥路径引用。您可以使用以下命令获取密钥路径:
gcloud kms keys list \ --location=$NEW_REGION_LOCATION \ --keyring=$DISK_KEY_RING_NAME \ --project=$PROJECT_ID
密钥路径如下所示:
projects/PROJECT_ID/locations/NEW_REGION_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
- 通过执行
gcloud kms keys add-iam-policy-binding
命令向 Apigee Service Agent 授予使用新密钥的权限;例如:gcloud kms keys add-iam-policy-binding $DISK_KEY_NAME \ --location $NEW_REGION_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。
gcloud kms keys get-iam-policy $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location $NEW_REGION_LOCATION \ --project $PROJECT_ID
gcloud kms keys describe $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location $NEW_REGION_LOCATION \ --project $PROJECT_ID
预留新的地址范围
为对等互连网络的地址范围预留 IP 地址。如需了解详情和重要注意事项,另请参阅了解对等互连范围。
- 创建以下环境变量:
NEW_RANGE_NAME_22=YOUR_CIDR_22_RANGE_NAME
NEW_RANGE_NAME_28=YOUR_CIDR_28_RANGE_NAME
NETWORK_NAME=YOUR_NETWORK_NAME
其中:
NEW_RANGE_NAME_22
是您将创建的 CIDR 长度为 /22 的 IP 地址范围的名称。您可以随意为范围命名。例如:google-svcs-new_22
NEW_RANGE_NAME_28
是您将创建的 CIDR 长度为 /28 的 IP 地址范围的名称。您可以随意为范围命名。例如:google-svcs-new_28
NETWORK_NAME
是应在其中预留地址的网络资源的名称。Google 会为每个新项目创建一个默认网络(名为
default
),以便您使用该网络。但是,Google 不建议将默认网络用于测试以外的其他用途。
- 创建 CIDR 长度为 /22 的网络 IP 地址范围:
gcloud compute addresses create $NEW_RANGE_NAME_22 \ --global \ --prefix-length=22 \ --description="Peering range for Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --project=$PROJECT_ID
成功后,
gcloud
会返回以下内容:Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs-new].
验证创建的计算地址:
gcloud compute addresses list \ --global \ --project=$PROJECT_ID
gcloud compute addresses describe $NEW_RANGE_NAME_22 \ --global \ --project=$PROJECT_ID
创建 IP 地址范围后,地址便会与项目关联,直到您将地址释放。
- 创建 CIDR 长度为 /28 的网络 IP 地址范围。此范围是必需的,供 Apigee 用于问题排查,不能自定义或更改。
gcloud compute addresses create $NEW_RANGE_NAME_28 \ --global \ --prefix-length=28 \ --description="Peering range for supporting Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --project=$PROJECT_ID
- 获取对等互连范围的名称:
gcloud services vpc-peerings list \ --network=$NETWORK_NAME \ --project=$PROJECT_ID
- 使用以下命令将新预留的范围添加到对等互连网络,其中
$NEW_RANGE_NAME_22
和$NEW_RANGE_NAME_28
是新的范围名称,ORIGINAL_RANGE_NAME_1 和 ORIGINAL_RANGE_NAME_n 是上一条命令返回的预留对等互连范围名称:gcloud services vpc-peerings update --service=servicenetworking.googleapis.com \ --network=$NETWORK_NAME \ --ranges=$NEW_RANGE_NAME_22,$NEW_RANGE_NAME_28,ORIGINAL_RANGE_NAME_1,ORIGINAL_RANGE_NAME_n \ --project=$PROJECT_ID
验证创建的计算地址:
gcloud compute addresses list \ --global \ --project=$PROJECT_ID
gcloud compute addresses describe $NEW_RANGE_NAME_28 \ --global \ --project=$PROJECT_ID
验证已更新的 vpc-peering 更改:
gcloud services vpc-peerings list \ --network=$NETWORK_NAME \ --project=$PROJECT_ID
创建新实例
使用 Instances API 为该区域创建新实例。
使用 VPC 对等互连
如果 Apigee 已设置为使用 VPC 对等互连,请使用此 API 调用来创建实例:
curl -X POST -H "$AUTH" \ -H "Content-Type: application/json" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \ -d '{ "name":"'"$NEW_INSTANCE_NAME"'", "location":"'"$NEW_REGION_LOCATION"'", "diskEncryptionKeyName":"KEY_PATH", "ipRange":"IP_ADDRESS_1/28, IP_ADDRESS_2/22" # OPTIONAL }'
其中:
- KEY_PATH 是您在创建新的密钥环和密钥中创建的磁盘加密密钥路径。
- IP_ADDRESS_* 是用于创建 Apigee 实例的 /22 和 /28 CIDR 范围的 CIDR IP 地址。请注意,
ipRange
是可选的。如果您未提供此字段,Apigee 会自动向 Service Networking 请求可用的 /22 和 /28 CIDR 地址块。另请参阅 Apigee 实例 API。
此请求最多可能需要 20 分钟才能完成,因为 Apigee 必须创建并启动新的 Kubernetes 集群,在该集群上安装 Apigee 资源,并设置负载均衡。
不使用 VPC 对等互连
如果 Apigee 未设置为使用 VPC 对等互连,请使用此 API 调用来创建实例:
curl -X POST -H "$AUTH" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \ -d '{ "name":"'"$INSTANCE_NAME"'", "location":"'"$RUNTIME_LOCATION"'", "diskEncryptionKeyName":"'"KEY_PATH"'", "consumerAcceptList":[ARRAY_OF_PROJECT_IDS] }'
其中:
- KEY_PATH 是您在创建新的密钥环和密钥中创建的磁盘加密密钥路径。 另请参阅 Apigee 实例 API。
-
consumerAcceptList
(可选)指定能够以私密方式连接到 Apigee VPC 的服务连接的 Google Cloud 项目 ID 列表。服务连接是一种与 Google Cloud Private Service Connect 结合使用的实体,允许服务提供方(在本例中为 Apigee)向使用方(在本例中为您拥有的一个或多个 Cloud 项目)公开服务。默认情况下,我们使用已与您的 Apigee 组织关联的 Cloud 项目。例如:"consumerAcceptList": ["project1", "project2", "project3"]
此请求最多可能需要 20 分钟才能完成,因为 Apigee 必须创建并启动新的 Kubernetes 集群,在该集群上安装 Apigee 资源,并设置负载均衡。
timer 完成创建实例操作大约需要 30 分钟。
要检查运行时实例创建请求的状态,请执行以下命令。当状态为 ACTIVE 时,您可以继续执行下一步。
curl -i -X GET -H "$AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$NEW_INSTANCE_NAME"
如需详细了解如何创建运行时实例(包括其他上下文和问题排查信息),请参阅第 5 步:创建 Apigee 运行时实例。
将环境关联到新实例
创建实例后,您必须将环境关联到该实例,否则该实例无法响应 API 请求。
在实例间共享环境;因此,您应将现有环境附加到新区域。您不会为新区域定义新环境。如果您为新区域定义了一个新环境,该环境为与原始环境相同的主机提供相同的基本路径,则运行时调用可能会返回 HTTP 503
错误。
使用环境填充新区域时,无需将环境关联到环境组:它们已关联到其组。您只需将环境关联到新实例即可。
如需将环境附加到新区域,请使用 Instances attach API,如以下示例所示:
curl -X POST -H "$AUTH" \ -H "Content-Type: application/json" \ https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$NEW_INSTANCE_NAME/attachments \ -d '{ "environment":"ENVIRONMENT_NAME" }'
如需获取您的环境列表,请运行以下命令:
curl -i -X GET -H "$AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"
您必须通过单独的 Instance Attachment API 调用来关联每个环境。不能在一个调用中关联多个环境。
配置路由
您可以使用基于代管式实例组 (MIG) 或 Private Service Connect (PSC) 的配置在新区域中配置网络路由。
配置 PSC 路由
以下步骤介绍了如何使用 PSC 在新区域中配置路由。
概览
下图展示了多区域 PSC 的概括性北向架构:
如图 1 所示,您将在项目中创建一个网络端点组 (NEG),以便与新的 Apigee 实例所在的区域中的服务连接进行通信。所有区域的 Apigee NEG 都会连接到 Apigee 生产全球外部负载均衡器的后端服务。
为新区域创建网络端点组
请按照以下步骤使用新区域的网络端点组 (NEG) 创建和配置负载均衡器:
- 创建新的 NEG:
- 从先前创建的实例获取服务连接:
curl -i -X GET -H "$AUTH" \ "https://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" } ] }
创建一个指向您在上一步中从实例响应正文获取的服务连接的 NEG。
gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=TARGET_SERVICE \ --region=$NEW_REGION_LOCATION \ --network=NETWORK_NAME \ --subnet=SUBNET_NAME \ --project=PROJECT_ID
请替换以下内容:
- NEG_NAME:网络端点组的名称。
- TARGET_SERVICE:要建立的服务连接。例如
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
- NETWORK_NAME:(可选)在其中创建 NEG 的网络的名称。如果您省略此参数,则会使用
default
项目网络。 - SUBNET_NAME:用于与提供方建立专用连接的子网的名称。子网不必很大:PSC NEG 只需要子网中的一个 IP。对于 Apigee,每个区域只需要一个 PSC NEG。子网可以由虚拟机或其他实体共享和使用。如果未指定子网,网络端点可能属于创建网络端点组的区域中的任何子网。
- PROJECT_ID:已与您的 Apigee 组织关联的 Cloud 项目,或创建 Apigee 运行时实例时包含在
consumerAcceptlist
中的 Cloud 项目。
- 从先前创建的实例获取服务连接:
- 获取生产 Apigee 负载均衡器的后端服务的名称:
gcloud compute backend-services list --project=$PROJECT_ID
- 将 NEG 作为后端添加到后端服务:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-region=$NEW_REGION_LOCATION \ --global --project=$PROJECT_ID
请替换以下内容:
- BACKEND_SERVICE_NAME:后端服务的名称。
- NEG_NAME:网络端点组的名称。
- (可选)您可以在后端服务上设置离群值检测政策,以自动处理故障切换场景。请参阅以下内容了解详细信息:
测试最终设置
调用 API 代理。请参阅部署示例代理。
配置 MIG 路由
以下步骤介绍了如何使用代管式实例组 (MIG) 在新区域中配置路由。
概览
下图展示了使用代管式实例组 (MIG) 的多区域高级向北架构:
如图 2 所示,您将在项目中创建一个 MIG,以与新 Apigee 实例所在区域部署的负载均衡器进行通信。所有区域的 MIG 代理都会连接到您的 Apigee 生产全球外部负载均衡器的后端。
为新区域创建托管式实例组 (MIG)
请按照以下步骤为新区域创建和配置 MIG:
为您的 VPC 网络的子网启用专用 Google 访问通道。
如需为您的 VPC 网络的子网启用专用 Google 访问通道,请按照启用专用 Google 访问通道中列出的步骤操作。
设置环境变量:
本部分中的说明使用环境变量来引用重复使用的字符串。我们建议您先进行以下设置,然后再继续:
MIG_NAME=YOUR_MIG_NAME
VPC_NAME=YOUR_VPC_NAME # If you are using a shared VPC, use the shared VPC name
VPC_SUBNET=YOUR_SUBNET_NAME # Private Google Access must be enabled for this subnet
NEW_REGION_LOCATION=YOUR_NEW_REGION # The same region as your new Apigee runtime instance
APIGEE_ENDPOINT=APIGEE_INSTANCE_IP
# See the tip below for details on getting this IP address value- 创建托管式实例组。在此步骤中,您将创建并配置托管式实例组 (MIG)。
- 通过执行以下命令来创建实例模板。
gcloud compute instance-templates create $MIG_NAME \ --project $PROJECT_ID \ --region $NEW_REGION_LOCATION \ --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 $NEW_REGION_LOCATION
- 通过执行以下命令为实例组配置自动扩缩:
gcloud compute instance-groups managed set-autoscaling $MIG_NAME \ --project $PROJECT_ID --region $NEW_REGION_LOCATION --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 $NEW_REGION_LOCATION --named-ports https:443
- 通过执行以下命令来创建实例模板。
- 获取生产 Apigee 负载均衡器的后端服务的名称:
gcloud compute backend-services list --project=$PROJECT_ID
- 使用以下命令将 MIG 添加到您的后端服务:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --project $PROJECT_ID --instance-group $MIG_NAME \ --instance-group-region $NEW_REGION_LOCATION \ --balancing-mode UTILIZATION --max-utilization 0.8 --global
将 BACKEND_SERVICE_NAME 替换为后端服务的名称。
测试最终设置
调用 API 代理。请参阅部署示例代理。
添加区域
向 Apigee 环境添加多个区域可为您的 API 提供高可用性、更高的容量和更低的延迟。多区域部署支持高可用性,由于 XLB 将对每个区域进行健康检查,因为不需要手动故障切换。当多个区域同时响应相同的 API 请求,则可提供更高的容量。此外,如果您的 API 客户端位于多个区域,则从更靠近客户端的区域响应 API 请求将有助于缩短延迟时间并提升性能。
示例:多区域部署可改善可用性、容量和延迟时间
在双活多区域部署中,流量同时从两个区域传送出去。您需要将每个区域的 MIG 的后端服务添加到同一个外部 HTTPS 负载均衡器 (XLB),具体请参阅第 8 步:配置路由部分的外部路由 (MIG) 标签页下的第 8e(3) 步。如需了解详情,另请参阅为新区域创建托管式实例组 (MIG)。
对于每个请求,XLB 将选择最靠近客户端的区域,除非请求数量超过为特定后端设置的限制。如需详细了解外部负载均衡器如何路由流量,请参阅通过全球负载均衡优化应用容量。
添加随用随付区域
Pay-as-you-go价格模式可让您设置环境的最小 Apigee 网关节点数。这可确保在发生区域故障时,区域始终有额外的容量来立即支持故障切换流量。
设置最小 Apigee 网关节点数
如果您能够从 2 个活跃区域传送所有正常 API 流量,并且每个区域有 4 个 Apigee 网关节点,则每个区域至少应该有 8 个节点。这是为了能够在其中一个区域服务中断时立即提供支持。如需详细了解如何确定处理 API 流量所需的节点数,请参阅 Apigee 节点简介。请注意,最小节点数按环境设置,但按区域实施。在此示例中,如果您将最小值设置为 8,则每个区域将至少有 8 个节点。
费用
在上面的示例中,您将产生至少运行 16 个 Apigee 网关节点(8 个节点 x 2 个区域)的费用。随着节点数量自动增加(最多可达到最大节点数)以处理更多流量,费用可能会增加。
从区域中移除 Apigee
如需停用某个 Apigee 实例使其不再传送 API 流量,请按照以下步骤操作,以确保服务不中断(API 不停用):
- 在后端服务上启用连接排空。连接排空过程旨在确保在从后端服务中移除后端时,为进行中的现有请求留出一定的时间,让这些请求可以完成。
- 如果 Cloud DNS 已配置为通过加权轮循路由政策将流量路由到此 Apigee 区域,请移除该 DNS 配置,具体请参阅管理 DNS 路由政策和健康检查。
- 将 MIG 后端与后端服务分离。此操作加上连接排空将确保该 Apigee 实例不会收到任何新流量,但允许任何进行中的请求完成。
- 删除 Apigee 实例及其相应的 MIG。请参阅删除实例。