本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本页介绍了如何启用 Apigee Operator for Kubernetes 提供的默认安全性和配额强制执行选项。
准备工作
在开始此任务之前,请务必完成以下步骤:
- 安装适用于 Kubernetes 的 Apigee Operator。如需了解安装说明,请参阅安装适用于 Kubernetes 的 Apigee Operator。
- 创建流量服务扩展程序。如需完成此步骤,您可以使用
ApigeeBackendService
或APIMExtensionPolicy
。 如需详细了解如何使用APIMExtensionPolicy
创建流量扩展程序,请参阅创建 APIMExtensionPolicy。 如需详细了解如何使用ApigeeBackendService
创建流量扩展程序,请参阅创建 ApigeeBackendService。
无论您是使用 ApigeeBackendService
还是 APIMExtensionPolicy
为 GKE 网关创建流量服务扩展程序,都必须完成本演练中的步骤,才能启用添加到后端 APIMExtensionPolicy
的默认 API 密钥和配额政策。
所需的角色
如果您已按照安装适用于 Kubernetes 的 Apigee Operator 中所述的方式向服务账号分配了所需的角色,则无需额外的 IAM 角色或权限即可完成这些任务。
您可以选择使用 Kubernetes 中内置的基于角色的访问控制 (RBAC) 机制对 Google Kubernetes Engine 集群中的资源执行的操作授权。如需了解详情,请参阅使用基于角色的访问控制对集群中执行的操作授权。
概览
以下部分介绍了如何启用 Apigee Operator for Kubernetes 提供的默认安全和配额强制执行选项。 在本演示中,您将执行以下操作:
定义 API 产品和 API 操作集所需的步骤略有不同,具体取决于您是使用 ApigeeBackendService
还是 APIMExtensionPolicy
为 GKE 网关创建流量扩展程序。
定义 API 产品
在此步骤中,您将定义用于管理 API 密钥强制执行和配额政策的 API 产品。
使用 APIMExtensionPolicy
定义 API 产品:
- 在
apim
命名空间中创建一个名为api-product.yaml
的新文件。 - 将以下内容复制到新文件中:
# api-product.yaml apiVersion: apim.googleapis.com/v1 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
使用 ApigeeBackendService
定义 API 产品:
- 在
apim
命名空间中创建一个名为api-product.yaml
的新文件。 - 将以下内容复制到新文件中:
# api-product.yaml apiVersion: apim.googleapis.com/v1 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: ApigeeBackendService group: apim.googleapis.com namespace: default attributes: - name: access value: private
- 使用以下命令将文件应用于网关:
kubectl -n default apply -f api-product.yaml
定义 API 操作集
在此步骤中,您将定义用于管理 REST 操作强制执行的 API 操作集。
使用 APIMExtensionPolicy
为在上一步中创建的 API 产品定义 API 操作集:
- 在
apim
命名空间中创建一个名为apim-policies.yaml
的新文件。 - 将以下内容复制到新文件中。此文件定义了上一步中所定义 API 产品的配额政策以及可用 REST 操作:
# apim-policies.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set namespace: apim 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
使用 ApigeeBackendService
为在上一步中创建的 API 产品定义 API 操作集:
- 在
default
命名空间中创建一个名为apim-policies.yaml
的新文件。 - 将以下内容复制到新文件中。此文件定义了上一步中所定义 API 产品的配额政策以及可用 REST 操作:
# apim-policies.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set namespace: default spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: default quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- 将该文件应用于网关:
kubectl -n default apply -f apim-policies.yaml
测试 Apigee 服务扩展程序
在此步骤中,您将使用 Google Cloud 控制台中的 Apigee 界面来测试应用于网关的 Apigee 服务扩展程序和 Apigee 扩展程序政策。
测试设置
设置您需要用于测试的 API 资源:
前往 Google Cloud 控制台中的 Apigee API Management 页面:
- 选择您安装 Apigee Operator for Kubernetes 的 Apigee 组织。
- 创建开发者:
- 依次选择分发 > 开发者。
- 在开发者页面上,点击 + 创建。
- 在添加开发者页面中,使用您希望使用的任何值填写必填字段。
- 点击添加。
- 创建应用:
- 依次选择分发> 应用。
- 在应用页面上,点击 + 创建
- 在创建应用页面上,使用以下值填充应用详情部分中的必填字段:
- 应用名称:demo-app
- 开发者:选择您在上一步创建的开发者,或从列表中选择其他开发者。
- 在应用凭据部分,点击 + 添加凭据。
- 在凭据部分,使用以下值填写凭证详细信息部分的必填字段:
- 凭据名称:demo-credential
- 凭据类型:选择 API 密钥。
- 点击创建。
- 在产品部分中,点击 + 添加产品。
- 选择上一步创建的
api-product-1
。 - 点击添加。
- 点击创建。
- 在应用详情页面的凭据部分中,点击
visibility_off 以显示密钥的值。
复制
Key
值。您将在后续步骤中使用此密钥对您的服务执行 API 调用。 - 在应用详情页面的凭证部分中,点击 visibility_off 以显示应用密钥的值。
复制应用 Secret 值。您将在后续步骤中使用此值生成访问令牌。
测试 API 密钥强制执行
使用以下命令,使用前面步骤中获取的 API 密钥向网关发送请求:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
其中:
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": "f0N6sYYYclGYYYe0oP5YYYdA20PjgrP2x8YYYh7z4YYYKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/get" }
测试配额强制执行
如需测试 APIMExtensionPolicy
中定义的配额强制执行,请在 1 分钟内向网关发送上一步中的请求 10 次。
您可以运行以下脚本来生成请求:
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" 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 http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
其中:
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 页面:
- 选择您安装了 Apigee Operator for Kubernetes 的 Apigee 组织。
- 在侧边导航菜单中,依次选择分析 > API 指标。
- 在 API 代理性能标签页中,选择您在可选安装步骤
创建 Apigee 环境中创建的环境,或者选择 Apigee Operator for Kubernetes 在安装期间创建的环境。环境的名称将以前缀
apigee-ext-proc-enabled-env
开头。 - 观察记录的 API 流量。
问题排查
如果您在将 API 管理政策与 Apigee Operator for Kubernetes 搭配使用时遇到问题,请参阅排查 Apigee Operator for Kubernetes 问题,了解常见错误的解决方案。
后续步骤
如需添加其他政策,请参阅向 GKE 网关添加政策。