本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
本文档介绍如何从内部网络上运行的客户端调用 API 代理。如果将 Apigee 预配为使用内部网络路由,则这些步骤可用于测试设置。如果 Apigee 预配了以下任何网络路由配置,则可以按照本文档中的步骤操作:
预配选项 | 网络选项 | 预配步骤 |
---|---|---|
付费订阅 | 使用 VPC 对等互连 | 内部路由 (VPC) 内部路由 (PSC) |
随用随付 | 使用 VPC 对等互连 | 内部路由 (VPC) 内部路由 (PSC) |
评估 | 使用 VPC 对等互连 | 配置路由(内部) |
评估 | 不使用 VPC 对等互连 | 内部路由 (PSC) |
另请参阅网络选项。
准备工作
执行以下初步设置步骤:
- 按照初始化 gcloud CLI 中的说明初始化 gcloud CLI(如果尚未初始化);或者,如果已初始化,请确保您在前提条件中创建的 Google Cloud 项目是
gcloud
的默认项目。 -
定义以下本地环境变量。
export PROJECT_ID=YOUR_PROJECT_ID
export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
export SUBNET=NETWORK_NAME
export INSTANCE_NAME=INSTANCE_NAME
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
其中:
PROJECT_ID
是您在前提条件中创建的 Cloud 项目 ID。AUTH
使用不记名令牌定义Authentication
标头。调用 Apigee API 时需使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令参考页面。SUBNET
是预配期间指定的子网。例如:default
。INSTANCE_NAME
:新实例的名称。例如my-runtime-instance
。 名称必须以小写字母开头,最多可包含 32 个字符,并且只能包含小写字母、数字和连字符。名称不能以连字符开头或结尾,且长度必须至少为 2 个字符。PROJECT_NUMBER
是您在前提条件中创建的 Cloud 项目编号。此示例发出gcloud
命令以获取项目编号。
- 从 Apigee 实例获取
location
属性的值。此值是实例所在的区域,例如us-west1
:curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances
- 在实例区域内选择可用区,并将可用区名称放在变量中。该可用区必须在实例中。例如:
export VM_ZONE="us-west1-b"
如果您需要帮助识别实例区域中的可用区,可以使用此
gcloud
命令为已配置的运行时区域返回可用区名称。例如:VM_ZONE=$(gcloud compute zones list | grep "us-west1" | head -n 1 | awk '{print $1}')
创建虚拟机并调用 API 代理
接下来,使用 gcloud beta compute 命令在您的 VPC 网络内创建新虚拟机。该虚拟机充当网桥,允许您向内部负载均衡器 IP 发送请求。设置虚拟机后,您可以调用部署的 API 代理:
-
以下示例使用一些常见选项创建了一个新虚拟机,并使用您之前定义的输入作为环境变量。
gcloud beta compute --project=$PROJECT_ID \ instances create $INSTANCE_NAME \ --zone=$VM_ZONE \ --machine-type=e2-micro \ --subnet=$SUBNET \ --network-tier=PREMIUM \ --no-restart-on-failure \ --maintenance-policy=TERMINATE \ --preemptible \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=http-server,https-server \ --image=debian-12-bookworm-v20240701 \ --image-project=debian-cloud \ --boot-disk-size=10GB \ --boot-disk-type=pd-standard \ --boot-disk-device-name=$INSTANCE_NAME \ --no-shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring \ --reservation-affinity=any
-
打开与您刚创建的新虚拟机的安全连接。
gcloud compute ssh $INSTANCE_NAME --zone=$VM_ZONE --project=$PROJECT_ID
- 在虚拟机 shell 中,安装
jq
实用程序。它用于后续步骤:sudo apt-get update -y
sudo apt-get install -y jq
- 在虚拟机 shell 中,创建以下环境变量,以便轻松复制/粘贴 API 代理请求:
export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
export PROJECT_ID=YOUR_PROJECT_ID
export ENV_GROUP_HOSTNAME=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups -s | jq -r '.environmentGroups[0].hostnames[0]')
- 确保变量设置正确:
echo $AUTH
echo $PROJECT_ID
echo $ENV_GROUP_HOSTNAME
- 调用 API 代理。请从下方选择与您在 Apigee 预配期间配置路由的方式相对应的选项。
使用 VPC 对等互连的安装的选项
- (TLS 选项 1)如果您按照内部路由 (VPC) 中的说明在项目中配置了内部负载均衡器 (ILB),请使用该 ILB 的 IP 调用代理。此选项使用由您控制且在创建内部负载均衡器时创建的 CA 证书:
- 按照使用虚拟机实例组后端设置内部 HTTP(S) 负载均衡中的说明,获取项目中 ILB 的 IP 地址。
- 调用 API 代理:
curl -H "Host: $ENV_GROUP_HOSTNAME" \ https://INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
- (TLS 选项 2)使用解析为 Apigee 项目中的内部负载均衡器的默认完全限定域名。如果使用此选项,则通过内部创建的 Apigee 自签名证书来使用 TLS。您无法控制这些证书。
- 获取 Apigee 项目中的内部负载均衡器的 IP:
export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
- 使用以下命令拉取组织创建期间创建的 CA 证书:
curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID | jq -r .caCertificate | base64 -d > cacert.crt
- 将请求发送到已部署的 API 代理,其中
example.$PROJECT_ID.apigee.internal
是解析为内部负载均衡器的内部默认完全限定域名。curl -is -H "Host: $ENV_GROUP_HOSTNAME" \ https://example.$PROJECT_ID.apigee.internal/PROXY_BASEPATH \ --cacert cacert.crt \ --resolve example.$PROJECT_ID.apigee.internal:443:$INTERNAL_LOAD_BALANCER_IP
- 获取 Apigee 项目中的内部负载均衡器的 IP:
- (非 TLS 选项)如果不需要 TLS,您可以在
curl
命令上使用-k
标志以停用 TLS 并避免 SSL 问题:- 获取 Apigee 项目中的内部负载均衡器的 IP:
export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
- 调用 API 代理:
curl -i -k \ -H "Host: $ENV_GROUP_HOSTNAME" \ https://$INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
- 获取 Apigee 项目中的内部负载均衡器的 IP:
- (服务端点选项)如果您使用 PSC 预配了付费或评估组织,请选择服务端点路由选项:
- 获取服务端点的 IP 地址。如果您需要查询端点 IP 地址,请参阅列出端点。
- 调用 API 代理:
curl -i -k \ -H "Host: $ENV_GROUP_HOSTNAME" \ https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH
例如:
curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k
不使用非 VPC 对等互连的安装的选项
- (服务端点选项)如果您使用 PSC 预配了付费或评估组织,请选择服务端点路由选项:
- 获取服务端点的 IP 地址。如果您需要查询端点 IP 地址,请参阅列出端点。
- 调用 API 代理:
curl -i -k \ -H "Host: $ENV_GROUP_HOSTNAME" \ https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH
例如:
curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k
如果您在过程中的此部分遇到错误,请确保您在命令中创建和使用的所有环境变量都具有有效值。另请参阅问题排查。
下一步
尝试创建代理,然后您可以部署该代理,或浏览介绍 Apigee 功能的 Apigee 教程,例如防止突然流量激增或获取请求/响应流的详细视图。
(高级) 如果您计划转换为生产设置,则可以为新集群及相关 Cloud 服务配置安全边界。您可以通过 VPC Service Controls 实现这一目的。
- (TLS 选项 1)如果您按照内部路由 (VPC) 中的说明在项目中配置了内部负载均衡器 (ILB),请使用该 ILB 的 IP 调用代理。此选项使用由您控制且在创建内部负载均衡器时创建的 CA 证书: