本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
本页面介绍了如何修改集群中运行的 Google Kubernetes Engine (GKE) 网关,以使用 Apigee APIM Operator for Kubernetes(预览版)来应用 Apigee API 管理政策。
准备工作
在开始此任务之前,请务必完成以下步骤:
- 确认您的 GKE 集群已配置 Workload Identity。如需了解所需步骤,请参阅创建工作负载身份。
- 确认您的集群已配置 GKE 网关且网关正常运行。如需了解详情,请参阅部署网关。
- 安装 APIM Operator。如需了解安装说明,请参阅安装 Apigee APIM Operator for Kubernetes。
所需的角色
如果您已按照安装 Apigee APIM Operator for Kubernetes 中所述的方式向服务账号分配了所需的角色,则无需额外的 IAM 角色或权限即可完成这些任务。
您可以选择使用 Kubernetes 中内置的基于角色的访问控制 (RBAC) 机制来授权对 Google Kubernetes Engine 集群中的资源执行的操作。如需了解详情,请参阅使用基于角色的访问权限控制向集群中的操作授权。
概览
以下部分介绍了修改 GKE 网关以使用 APIM Operator 的 Apigee 政策所需的步骤。在本演示中,您将执行以下操作:
- 定义 APIM 扩展程序政策。
- 定义 API 产品。
- 定义 API 操作集。
- 测试 Apigee 服务扩展程序。
- 在 Google Cloud 控制台中查看 Apigee API Analytics 数据。
定义 APIM 扩展程序政策
在此步骤中,您将定义 APIM 扩展程序政策,并将其应用于集群中运行的 GKE 网关。此政策会管理通过网关及其关联的 HTTPRoutes
的所有流量,其运作方式与 Apigee 中环境级别的 flowhook 类似。
定义 APIM 扩展程序政策:
- 在
apim
命名空间中创建一个名为global-ext-lb1-apim-policy.yaml
的新文件。 - 将以下内容复制到新文件中:
# global-ext-lb1-apim-policy.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIMExtensionPolicy metadata: name: global-ext-lb1-apim-policy namespace: apim spec: apigeeenv: ENV_NAME location: global failOpen: false timeout: 1000ms targetRef: # identifies the Gateway where the extension should be applied name: global-ext-lb1 kind: Gateway namespace: default
其中,ENV_NAME 是在可选安装步骤创建 Apigee 环境中创建的 Apigee 环境的名称。
如果您在安装期间未创建环境,请确认 APIM Operator 在安装期间创建的环境的名称。您可以在 Google Cloud 控制台中的 Apigee 界面中查看所有可用环境。新环境的名称将以前缀
apim-enabled-dep-env
开头。前往 Google Cloud 控制台中的 Apigee 环境页面:
- 应用政策:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
应用
yaml
后,APIM Operator 会在后台创建网络资源。 - 使用以下命令检查 API 扩展程序政策的状态:
kubectl -n apim get APIMExtensionPolicy
输出应类似如下所示,其中
State
为RUNNING
:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- 使用以下命令向网关发送请求:
curl GATEWAY_IP_ADDRESS/get -k -H "Host: HOST_NAME"
其中:
GATEWAY_IP_ADDRESS
是网关的 IP 地址。您可以使用以下命令检索网关 IP 地址,其中GATEWAY_NAME
是网关的名称:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
是网关的HTTPRoute
中定义的主机名。
- 请求应失败,并显示类似于以下内容的响应:
{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
这表示 Apigee 扩展程序政策处于有效状态,并且 API 密钥强制执行和访问令牌验证处于有效状态。
定义 API 产品
定义 API 产品:
- 在
apim
命名空间中创建一个名为api-product.yaml
的新文件。 - 将以下内容复制到新文件中:
# api-product.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product namespace: apim spec: approvalType: auto description: Http bin GET calls displayName: api-product enforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 使用以下命令将文件应用于网关:
kubectl -n apim apply -f api-product.yaml
定义 API 操作集
为在上一步中创建的 API 产品定义 API 操作集:
- 在
apim
命名空间中创建一个名为apim-policies.yaml
的新文件。 - 将以下内容复制到新文件中。此文件定义了配额政策以及上一步中定义的 API 产品的有效 REST 操作:
# apim-policies.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIOperationSet metadata: name: item-set spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- 将该文件应用于网关:
kubectl -n apim apply -f apim-policies.yaml
测试 Apigee 服务扩展程序
在此步骤中,您将使用 Google Cloud 控制台中的 Apigee 界面来测试应用于网关的 Apigee 服务扩展程序和 Apigee 扩展程序政策。
测试设置
设置您需要用于测试的 API 资源:
前往 Google Cloud 控制台中的 Apigee API Management 页面:
- 选择您安装 APIM Operator 的 Apigee 组织。
- 创建开发者:
- 依次选择分发 > 开发者。
- 在开发者页面上,点击 + 创建。
- 在添加开发者页面中,使用您希望使用的任何值填写必填字段。
- 点击添加。
- 创建应用:
- 依次选择分发> 应用。
- 在应用页面上,点击 + 创建
- 在创建应用页面上,使用以下值填充应用详情部分中的必填字段:
- 应用名称:demo-app
- 开发者:选择您在上一步创建的开发者,或从列表中选择其他开发者。
- 在应用凭据部分,点击 + 添加凭据。
- 在凭据部分,使用以下值填写凭据详细信息部分的必填字段:
- 凭据名称:demo-credential
- 凭据类型:选择 API 密钥。
- 点击创建。
- 在产品部分中,点击 + 添加产品。
- 选择上一步创建的
api-product-1
。 - 点击添加。
- 点击创建。
- 在应用详情页面的凭据部分中,点击
visibility_off 以显示密钥的值。
复制
Key
值。您将在后续步骤中使用此密钥对您的服务执行 API 调用。 - 在应用详情页面的凭据部分中,点击 visibility_off 以显示应用 Secret 的值。
复制应用 Secret 值。您将在后续步骤中使用此值生成访问令牌。
测试 API 密钥强制执行
使用以下命令,使用前面步骤中获取的 API 密钥向网关发送请求:
curl GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k
其中:
GATEWAY_IP_ADDRESS
是网关的 IP 地址。您可以使用以下命令检索网关 IP 地址,其中GATEWAY_NAME
是网关的名称:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
是网关的HTTPRoute
中定义的主机名。API_KEY
是在测试设置中获取的 API 密钥值。
该请求应该会成功,并返回类似于以下内容的响应:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/get" }
测试配额强制执行
如需测试 APIM 扩展程序政策中定义的配额强制执行,请在 1 分钟内向网关发送上一步中的请求 10 次。
您可以运行以下脚本来生成请求:
#!/bin/sh for i in $(seq 1 11); do curl GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k sleep 1 done
其中:
GATEWAY_IP_ADDRESS
是网关的 IP 地址。您可以使用以下命令检索网关 IP 地址,其中GATEWAY_NAME
是网关的名称:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
是网关的HTTPRoute
中定义的主机名。API_KEY
是在测试设置中获取的 API 密钥值。
此操作应触发配额违规,并引发类似于以下内容的错误:
{"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
测试 REST 操作强制执行
如需测试 REST 操作强制执行,请使用以下命令,使用不在 API 操作集中的网址向网关发送请求:
curl GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k
其中:
GATEWAY_IP_ADDRESS
是网关的 IP 地址。您可以使用以下命令检索网关 IP 地址,其中GATEWAY_NAME
是网关的名称:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
是网关的HTTPRoute
中定义的主机名。API_KEY
是在测试设置中获取的 API 密钥值。
请求应失败,并显示类似于以下内容的响应:
{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}
在 Google Cloud 控制台中查看 Apigee API Analytics
您可以在 Google Cloud 控制台中使用 Apigee API Analytics 查看 GKE 网关和您安装的 APIMExtensionPolicy 处理的 API 流量:
- 前往 Google Cloud 控制台中的 Apigee API Management 页面:
- 选择您安装 APIM Operator 的 Apigee 组织。
- 在侧边导航菜单中,依次选择分析 > API 指标。
- 在 API 代理性能标签页中,选择您在可选安装步骤创建 Apigee 环境中创建的环境,或者选择 APIM Operator 在安装期间创建的环境。环境的名称将以前缀
apigee-ext-proc-enabled-env
开头。 - 观察记录的 API 流量。
问题排查
如果您在将 API 管理政策与 APIM Operator 搭配使用时遇到问题,请参阅排查 APIM Operator 问题,了解常见错误的解决方案。