GSP907

概览
在本实验中,您将为 Apigee 实例发往后端服务的请求启用 NAT(网络地址转换)IP 地址,从而创建可列入许可清单的可预测 IP 地址。
目标
您将学习如何执行以下任务:
- 从 Apigee API 文档调用 Apigee API
- 为来自 Apigee 运行时的 Apigee 请求创建并激活 NAT IP 地址
- 确认发往后端服务器的请求使用配置的 NAT IP 地址
设置
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
打开 Apigee 控制台
如需打开 Apigee 控制台,请执行以下操作:
- 在 Google Cloud 控制台中,在搜索字段中输入
Apigee,然后点击搜索结果中的 Apigee API Management。
Apigee 控制台会随即打开,着陆页会显示指向常用位置的快捷链接。
- 在导航菜单 (
) 中,点击 Apigee 旁边的收藏 (
)。
Apigee 现在已作为收藏项添加到导航菜单中。
任务 1. 探索 Apigee API 文档
在此任务中,您将使用 Google APIs Explorer 探索 Apigee API 文档。
- 复制以下 Google APIs Explorer 链接,并将其粘贴到 Google Cloud 控制台浏览器窗口的新标签页中:面向 Apigee API 的 Google APIs Explorer。
Apigee API 可用于程序化开发和管理您的组织。从文档页面中可直接调用 Apigee API。
- 在右侧窗格中,找到 v1.organizations.instances REST 资源。
- 在 v1.organizations.instances 部分中,点击 list。
此页面介绍了 Apigee API 的 list instances 方法。
- 在试用此 API 窗格中,将 parent 设置为:
organizations/{{{ project_0.project_id | PROJECT }}}
-
点击执行。
-
如果系统弹出窗口,要求您选择账号以继续使用 Google APIs Explorer,请选择您的实验用户名,然后点击允许。
API 响应如下所示:
{
"instances": [
{
"name": "eval-instance",
"location": "{{{ project_0.default_zone | ZONE }}}",
"host": "172.21.60.2",
"port": "443",
"state": "ACTIVE"
}
]
}
或如下所示:
{
"instances": [
{
"name": "eval-instance",
"location": "europe-west1",
"createdAt": "1706780597609",
"lastModifiedAt": "1706780670711",
"state": "CREATING",
"peeringCidrRange": "SLASH_22",
"runtimeVersion": "1-11-0-apigee-14",
"ipRange": "10.188.120.0/28"
}
]
}
实例名称为 eval-instance。您要为该实例创建 NAT IP 地址。
- 在试用此 API 窗格的右上角,点击展开
。
此时窗格会展开,显示请求的等效 cURL,还有 HTTP 请求和可用于发出请求的 JavaScript 代码段。

- 如需关闭展开的窗格,请点击还原
。
任务 2. 等待实例预配完毕
在此任务中,您将等待 Apigee 评估组织预配完毕。
Apigee 组织预配可能需要相当长的时间才能完成。您可以使用 Apigee API 监控组织预配进度。
启动监控脚本
- 返回 Cloud 控制台标签页。
- 在右上角的工具栏中,点击激活 Cloud Shell 按钮。

- 如果出现提示,点击继续。
预配并连接到 Cloud Shell 需要一些时间。如果您连接成功,即表示您已通过身份验证,项目设为您的 PROJECT_ID。
- 在 Cloud Shell 中,使用以下命令验证 GOOGLE_CLOUD_PROJECT 变量是否包含您的项目名称:
echo ${GOOGLE_CLOUD_PROJECT}
变量 GOOGLE_CLOUD_PROJECT 应包含您的项目名称,它与您的 Apigee 组织名称相同。
-
如果未设置 GOOGLE_CLOUD_PROJECT 变量,请使用如下所示的命令手动设置该变量,并将 {project} 替换为您的项目名称:
export GOOGLE_CLOUD_PROJECT={project}
注意:在此步骤中,应移除花括号。
- 将以下命令粘贴到 Cloud Shell 中:
export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; if [ -z "${GOOGLE_CLOUD_PROJECT}" ]; then echo "Error: GOOGLE_CLOUD_PROJECT environment variable is not set. Please set it to your project ID."; else export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\" or (.environment | endswith(\"/${ENV_NAME}\"))) | .environment" --raw-output); [[ -n "${ATTACHMENT_DONE}" ]] && break; echo -n "."; sleep 5; done; echo; echo "${ENV_NAME} environment attached"; echo "***ORG IS READY TO USE***"; fi
这组命令使用 Apigee API 来判断运行时实例是否已创建,以及评估环境是否已关联至该实例。
- 等待实例准备就绪。
当屏幕上打出文本 ***ORG IS READY TO USE*** 时,表示实例已准备就绪。
注意:如果该命令立即指示组织可供使用,那么可能是因为在您进入实验之前已经预热过实验。
点击“检查我的进度”以验证是否完成了以下目标:
执行监控脚本并等待实例就绪
任务 3. 创建和部署 API 代理
在此任务中,您将创建一个 API 代理,以测试后端服务所看到的 IP 地址。
- 在 Apigee 导航菜单中,依次选择代理开发 > API 代理。
- 在选择环境下拉菜单中,选择评估。
注意:如果在下拉菜单中无法选择评估环境,请刷新页面。
- 如需使用代理向导创建新代理,请点击 + 创建。
- 对于代理模板,依次选择常规模板 > 反向代理(最常见)。
注意:请勿使用 OpenAPI 规范模板部分内的反向代理(最常见)选项。
-
指定以下属性:
| 属性 |
值 |
| 代理名称 |
test-nat |
| 基本路径 |
/test-nat |
| 目标(现有 API) |
https://httpbin.org/ip |
您在为 httpbin 请求与响应服务创建 API 代理。这项服务适合用来测试 API。
当请求经过代理服务器时,每个服务器的 IP 地址都会添加到 X-Forwarded-For 标头中。httpbin.org /ip 端点会返回 X-Forwarded-For 标头中的 IP 地址,以及与 httpbin.org 服务器建立连接的最终 IP 地址。
- 点击下一步。
- 保留部署(可选)默认设置,然后点击创建。
- 在概览标签页上,请等到部署状态显示为修订版本 1 已部署在评估环境中。

点击“检查我的进度”以验证是否完成了以下目标:
创建并部署 API 代理
任务 4. 测试 API 代理
在此任务中,调用 API 代理,查看用于后端服务的实例 IP 地址是否是动态的。
系统自动创建了一个名为 apigeex-test-vm 的虚拟机。使用此虚拟机通过专用 IP 地址调用 Apigee 运行时。
调用 Apigee 运行时
- 在 Cloud Shell 中,建立与虚拟机的 SSH 连接:
TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)")
gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
- 对于出现的每个问题,按 Enter 键或 Return 键来指定默认输入。
您的登录身份是项目的“所有者”,因此可以通过 SSH 连接到此虚拟机。
您的 Cloud Shell 会话现在正在虚拟机内运行。
- 在虚拟机的 shell 中,设置所需的 shell 变量:
export PROJECT_NAME=$(gcloud config get-value project)
export ORG=${PROJECT_NAME}
export INSTANCE_NAME=eval-instance
export INTERNAL_LB_IP=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}" | jq ".host" --raw-output)
export EVAL_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/eval-group" | jq ".hostnames[0]" --raw-output)
echo "INTERNAL_LB_IP=${INTERNAL_LB_IP}"
echo "EVAL_ENVGROUP_HOSTNAME=${EVAL_ENVGROUP_HOSTNAME}"
EVAL_ENVGROUP_HOSTNAME 包含与 eval-group 环境组关联的主机名。系统已自动为该主机名创建 DNS 条目。它指定了内部负载均衡器的专用 IP 地址。
注意:DNS 条目使用专用 DNS 区域和专用 IP 地址。专用 DNS 条目无法在 apigeex-vpc 网络外部解析,而且专用 IP 地址也无法从 Cloud Shell 或 apigeex-vpc 网络外部 IP 地址访问。
- 在评估环境中调用已部署的 test-nat API 代理:
curl -k "https://${EVAL_ENVGROUP_HOSTNAME}/test-nat"
-k 选项会告知 curl 跳过 TLS 证书验证。内部负载均衡器使用的是自签名证书,而不是由受信任的证书授权机构 (CA) 创建的证书。
注意:在生产应用场景中,不应使用 -k 选项来绕过证书验证。
curl 命令应返回 test-nat 代理生成的响应,内容应如下所示:
{
"origin": "10.0.0.2,10.0.0.5,10.0.0.7, 34.83.164.141"
}
响应中的 origin 字段显示了多个 IP 地址。最后一个 IP 地址源自调用 httpbin.org 服务器的最终服务器。此处显示的前 3 个 IP 地址都是内部 IP 地址,记录了请求从实例出发抵达 httpbin.org 之前所经过的其他跃点。
如果您多次重复调用,可能每次会看到相同的最终 IP 地址。但是,除非为实例添加 NAT 地址,否则最终 IP 地址可能会随时间而变化,因此很难将其添加到许可清单中。
任务 5. 为实例创建 NAT IP
在此任务中,您将创建 NAT IP,以便运行时实例用它来调用后端服务。
NAT IP 用于在 Apigee 实例调用后端服务时提供可预测的 IP 地址。
- 返回 Apigee API 浏览器标签页。
- 在左侧窗格中,展开 organizations.instances.natAddresses 部分。
- 点击 organizations.instances.natAddresses 下的 create。
此页面介绍了 Apigee API 的 create NAT address 方法。
- 在试用此 API 窗格中,将 parent 设置为:
organizations/{{{ project_0.project_id | PROJECT }}}/instances/eval-instance
- 点击添加请求正文参数,然后点击 name。
- 在双引号之间,将字符串设置为:
eval-instance-ip
- 点击执行。
如果系统弹出窗口,要求您选择账号以继续使用 Google APIs Explorer,请选择您的实验用户名,然后点击允许。
API 响应如下所示:
{
"name": "organizations/qwiklabs-gcp-01-f24706170325/operations/c79a19c8-ae9f-49de-978e-7f4873b06e51",
"metadata": {
"@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
"operationType": "INSERT",
"targetResourceName": "organizations/qwiklabs-gcp-01-f24706170325/instances/eval-instance/natAddresses/eval-instance-ip",
"state": "IN_PROGRESS"
}
}
此操作是异步的,但应该很快就会完成。
- 在左侧窗格中,点击 organizations.instances.natAddresses 下的 get。
此页面介绍了 Apigee API 的 get NAT address 方法。
- 在试用此 API 窗格中,将 parent 设置为:
organizations/{{{ project_0.project_id | PROJECT }}}/instances/eval-instance/natAddresses/eval-instance-ip
- 点击执行。
如果系统弹出窗口,要求您选择账号以继续使用 Google APIs Explorer,请选择您的实验用户名,然后点击允许。
API 响应如下所示:
{
"name": "eval-instance-ip",
"ipAddress": "104.198.6.224",
"state": "RESERVED"
}
NAT 地址已预留,但尚未激活。
点击“检查我的进度”以验证是否完成了以下目标:
为实例创建 NAT IP
任务 6. 激活 NAT IP
在此任务中,您将激活上一个任务中创建的 NAT IP。
- 点击 organizations.instances.natAddresses 下的 activate。
此页面介绍了 Apigee API 的 activate NAT address 方法。
- 在试用此 API 窗格中,将 parent 设置为:
organizations/{{{ project_0.project_id | PROJECT }}}/instances/eval-instance/natAddresses/eval-instance-ip
- 点击执行。
如果系统弹出窗口,要求您选择账号以继续使用 Google APIs Explorer,请选择您的实验用户名,然后点击允许。
API 响应如下所示:
{
"name": "organizations/qwiklabs-gcp-01-f24706170325/operations/4b96ee01-55a5-4824-859a-04c2e034d1d4",
"metadata": {
"@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
"operationType": "INSERT",
"targetResourceName": "organizations/qwiklabs-gcp-01-f24706170325/instances/eval-instance/natAddresses/eval-instance-ip",
"state": "IN_PROGRESS"
}
}
此操作是异步的,但应该很快就会完成。
- 在左侧窗格中,点击 organizations.instances.natAddresses 下的 get。
此页面介绍了 Apigee API 的 get NAT address 方法。
- 在试用此 API 窗格中,将 parent 设置为:
organizations/{{{ project_0.project_id | PROJECT }}}/instances/eval-instance/natAddresses/eval-instance-ip
- 点击执行。
- 如果系统弹出窗口,要求您选择账号以继续使用 Google APIs Explorer,请选择您的实验用户名,然后点击允许。
API 响应如下所示:
{
"name": "eval-instance-ip",
"ipAddress": "104.198.6.224",
"state": "ACTIVE"
}
注意:如果 NAT IP 的状态仍为 RESERVED,请继续点击“执行”,直到激活完成且返回的状态为 ACTIVE。
NAT 地址现已激活。
点击“检查我的进度”以验证是否完成了以下目标:
激活 NAT IP
任务 7. 测试 NAT 地址
在此任务中,请调用 API 代理以验证 NAT 地址是否用于调用后端服务。
调用 Apigee 运行时
- 在 Cloud Shell 中,如果与虚拟机的 SSH 连接已断开,请重新建立该 SSH 连接:
TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)")
gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
- 必要时,请按 Enter 键或 Return 键为每个问题指定默认输入。
您的 Cloud Shell 会话现在正在虚拟机内运行。
- 在虚拟机的 shell 中,设置所需的 shell 变量:
export PROJECT_NAME=$(gcloud config get-value project)
export ORG=${PROJECT_NAME}
export INSTANCE_NAME=eval-instance
export NAT_ADDR_NAME=eval-instance-ip
export INTERNAL_LB_IP=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}" | jq ".host" --raw-output)
export EVAL_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/eval-group" | jq ".hostnames[0]" --raw-output)
export NAT_IP_ADDRESS=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}/natAddresses/${NAT_ADDR_NAME}" | jq ".ipAddress" --raw-output)
echo "INTERNAL_LB_IP=${INTERNAL_LB_IP}"
echo "EVAL_ENVGROUP_HOSTNAME=${EVAL_ENVGROUP_HOSTNAME}"
echo "NAT_IP_ADDRESS=${NAT_IP_ADDRESS}"
请记下 NAT_IP_ADDRESS 值。
NAT_IP_ADDRESS 是 NAT 公共 IP 地址,运行时实例现在使用该地址调用后端服务。后端服务可以将这个已知的 IP 地址列入许可清单。
注意:DNS 条目使用专用 DNS 区域和专用 IP 地址。专用 DNS 条目无法在 apigeex-vpc 网络外部解析,而且专用 IP 地址也无法从 Cloud Shell 或 apigeex-vpc 网络外部 IP 地址访问。
- 在评估环境中调用已部署的 test-nat API 代理:
curl -k "https://${EVAL_ENVGROUP_HOSTNAME}/test-nat"
-k 选项会告知 curl 跳过 TLS 证书验证。内部负载均衡器使用的是自签名证书,而不是由受信任的证书授权机构 (CA) 创建的证书。
注意:在生产应用场景中,不应使用 -k 选项来绕过证书验证。
curl 命令应返回 test-nat 代理生成的响应,内容应如下所示:
{
"origin": "10.0.0.2,10.0.0.5,10.0.0.6, 104.198.6.224"
}
origin 字段仍然显示多个 IP 地址。而最后一个 IP 地址现已是运行时实例专用的 NAT 地址。
- 使用以下命令通过 Apigee API 检索 NAT 地址,确认 NAT IP 地址是否匹配:
curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}/natAddresses/${NAT_ADDR_NAME}"
恭喜!
您学习了如何从 API 文档调用 Apigee API。您使用了 Apigee API 为运行时实例创建并激活 NAT IP 地址。您还创建了一个调用 httpbin IP 地址服务的 API 代理。最后,您验证了后端看到的 IP 地址正是配置的 NAT IP 地址。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 1 月 29 日
上次测试实验的时间:2025 年 1 月 29 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。