本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本页介绍了如何启用 Apigee Operator for Kubernetes 提供的默认安全和配额强制执行选项。
准备工作
在开始此任务之前,请务必完成以下步骤:
- 安装适用于 Kubernetes 的 Apigee Operator。如需了解安装说明,请参阅安装 Apigee APIM Operator for Kubernetes。
- 创建流量服务扩展程序。如需完成此步骤,您可以使用
ApigeeBackendService或APIMExtensionPolicy。 如需详细了解如何使用APIMExtensionPolicy创建流量扩展程序,请参阅创建 APIMExtensionPolicy。 如需详细了解如何使用ApigeeBackendService创建流量扩展程序,请参阅创建 ApigeeBackendService。
无论您是使用 ApigeeBackendService 还是 APIMExtensionPolicy 为 GKE 网关创建流量服务扩展程序,都必须完成本演练中的步骤,才能启用添加到后端 APIMExtensionPolicy 的默认 API 密钥和配额政策。
所需的角色
如果您已按照安装 Apigee APIM Operator for Kubernetes 中所述向服务账号分配了所需的角色,则无需额外的 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 环境中创建的环境,或者选择 APIM Operator 在安装期间创建的环境。环境的名称将以前缀
apigee-ext-proc-enabled-env开头。 - 观察记录的 API 流量。
问题排查
如果您在将 API 管理政策与 Apigee Operator for Kubernetes 搭配使用时遇到问题,请参阅排查 Apigee Operator for Kubernetes 问题,了解常见错误的解决方案。
后续步骤
如需添加其他政策,请参阅向 GKE 网关添加政策。