本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
随着 API 管理需求的增长和变化,您可能需要向集群添加新服务或更新现有路由和入站流量选项。本页面介绍了如何更新集群以完成以下任务:
准备工作
在开始执行此任务之前,请务必完成使用 Apigee APIM Operator for Kubernetes 应用政策中所述的步骤。本页面假定您已设置 Google Kubernetes Engine (GKE) 集群、安装了 Apigee APIM Operator for Kubernetes、创建了 Google Kubernetes Engine (GKE) 网关,并向该网关应用了至少一项 API 管理政策。
所需的角色
如果您已按照安装 Apigee APIM Operator for Kubernetes 中所述向服务账号分配了所需的角色,则无需额外的 IAM 角色或权限即可完成这些任务。
您可以选择使用 Kubernetes 中内置的基于角色的访问控制 (RBAC) 机制对 Google Kubernetes Engine 集群中的资源执行的操作授权。如需了解详情,请参阅使用基于角色的访问控制对集群中执行的操作授权。
添加新的网关和 HTTPRoute
在本部分中,您将向集群添加新的网关和 HTTPRoute。在之前的任务指南中,示例配置使用的是外部 GKE 网关。如果多个网关部署在同一区域中,则它们必须属于同一类型(均为外部或均为内部)。因此,本指南中的示例配置也将使用外部网关。
APIM Operator 可与内部或外部 GKE 网关搭配使用,但您无法在同一区域部署这两种网关。
如需向集群添加新的网关和 HTTPRoute,请完成以下步骤:
- 设置新的外部 GKE 网关。如需了解详情和步骤,请参阅部署外部网关。
- 在
apim
命名空间中创建一个名为gateway2.yaml
的新文件。 - 将以下内容复制到新文件中:
# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: global-ext-lb2 spec: null gatewayClassName: gke-l7-global-external-managed listeners: - name: https protocol: HTTPS allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 443 tls: options: networking.gke.io/pre-shared-certs: apigee-lb-new-cert-sept
- 在同一文件中添加
/post
的新 HTTPRoute,如以下突出显示的部分所示:# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: http-bin-route-post namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb2 namespace: default hostnames: - HOST_NAME_2 rules: - matches: - path: value: /post backendRefs: - name: httpbin port: 80 namespace: http
- 应用新的网关和 HTTPRoute:
kubectl apply -f gateway2.yaml
- 使用以下命令检查 HTTPRoute 状态:
kubectl -n http get HttpRoute
输出应类似如下所示:
NAME HOSTNAMES AGE http-bin-route ["my-hostname-2"] 12d
- 使用以下命令检查网关状态:
kubectl get gateway global-ext-lb2
输出应类似如下所示:
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb2 gke-l7-global-external-managed 34.54.193.92 True 11d
确认
Address
列包含有效的 IP 地址,并且Programmed
的状态为True
。 - 描述网关,以确保路由已连接:
kubectl describe gateway global-ext-lb2
输出应类似如下所示:
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
确认
Attached Routes
值为1
。- 向网关发送请求以验证路由是否正常运行:
curl -X POST https://GATEWAY_IP_ADDRESS/get -k -H "Host: HOST_NAME"
其中:
GATEWAY_IP_ADDRESS
是网关的 IP 地址,如第 7 步中返回的响应的Address
列所示。HOST_NAME
是网关的HTTPRoute
中定义的主机名。
- 输出应类似如下所示:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "https://apigee-apim-operator-test.apigee.net/post" }
- 创建新的 API 扩展政策,该政策引用在前面的步骤中创建的新网关的 HTTPRoute:
- 在
apim
命名空间中创建一个名为apim-policy2.yaml
的新文件。 - 将以下内容复制到新文件中:
# apim-policy2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIMExtensionPolicy metadata: name: global-ext-lb2-apim-policy-2 namespace: apigee spec: location: global failOpen: false timeout: 1000ms targetRef: # identifies the Gateway where the extension should be installed name: global-ext-lb2 kind: Gateway namespace: default
- 应用新的 API 扩展政策:
kubectl apply -f apim-policy2.yaml
应用该文件后,APIM Operator 会在后台创建网络资源。
- 检查 API 扩展政策的状态:
kubectl -n apigee get APIMExtensionPolicy
输出应类似如下所示:
NAME STATE ERRORMESSAGE global-ext-lb2-apim-policy RUNNING
确认
STATE
值为RUNNING
。 - 等待五分钟,确保更改传播到所有负载均衡器实例,然后使用以下命令验证对新网关的请求是否失败:
curl -X POST https://GATEWAY_IP_ADDRESS/get -k -H "Host: HOSTNAME"
其中:
GATEWAY_IP_ADDRESS
是在前面步骤中获得的网关的 IP 地址。HOST_NAME
是网关的HTTPRoute
中定义的主机名。
请求应该会失败,并返回类似于以下内容的响应:
{ "fault": { "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault", "detail": { "errorcode": "steps.raisefault.RaiseFault" } } }
这意味着 Apigee 的服务扩展处于活跃状态,并且系统会强制执行 API 密钥和访问令牌验证。如需了解创建开发者应用、获取 API 密钥以及使用该密钥测试新网关所需的步骤,请参阅测试 Apigee 服务扩展。
- 在
更新 API 产品
修改现有 API 产品以引用新的 API 扩展政策:
- 在
apim
命名空间中创建一个名为api-product-2.yaml
的新文件。 - 将以下内容复制到新文件中:
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apigee-apim spec: approvalType: auto description: Http bin GET calls displayName: api-product-2 EnforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apigee-apim - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apigee-apim attributes: - name: access value: private
- 应用新的 API 产品文件:
kubectl apply -f api-product-2.yaml
更改大约需要三分钟才能在整个集群中应用。
在此示例中,更新了 API 产品 api-product-2
的 EnforcementRefs
部分以同时引用 global-ext-lb1-apim-policy
和 global-ext-lb2-apim-policy
,如 yaml
突出显示的部分所示。
创建新的 API 产品
创建新的 API 产品:
- 在
apim
命名空间中创建一个名为api-product-2.yaml
的新文件。 - 将以下内容复制到新文件中:
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apigee-apim spec: approvalType: auto description: Http bin GET calls displayName: api-product-2 enforcementRefs: - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 应用新的 API 产品文件:
kubectl apply -f api-product-2.yaml
更改大约需要三分钟才能在整个集群中应用。
在此示例中,创建了新的 API 产品 api-product-2
的 EnforcementRefs
部分以引用 global-ext-lb2-apim-policy
,如 yaml
突出显示的部分所示。
创建新的 API 操作集
创建新的 API 操作集:
- 在
apim
命名空间中创建一个名为item-set-post.yaml
的新文件。 - 将以下内容复制到新文件中:
# item-set-post.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIOperationSet metadata: name: item-set-post namespace: apigee-apim spec: apiProductRefs: - name: api-product-1 kind: APIProduct group: apim.googleapis.com namespace: apigee-apim quota: limit: 1 interval: 1 timeUnit: minute restOperations: - name: PostItems path: "/post" methods: - POST
- 应用新的 API 操作集文件:
kubectl apply -f item-set-post.yaml
更改大约需要三分钟才能在整个集群中应用。
在此示例中,创建了新的 API 操作集 item-set-post
的 restOperations
值以引用 /post
路径,如该文件突出显示的部分所示。
测试新的网关配置
如需测试新的网关配置,请向新的 /post
路径发送以下请求:
curl -X POST https://GATEWAY_IP_ADDRESS/post -k -H "Host: HOST_NAME"
其中:
- GATEWAY_IP_ADDRESS 是在前面步骤中获得的网关的 IP 地址。
- HOST_NAME 是网关的
HTTPRoute
中定义的主机名。
该请求应该会成功,并返回类似于以下内容的响应:
{ "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 Operator 搭配使用的 API 管理政策时遇到问题,请参阅排查 APIM Operator 问题,以了解常见错误的解决方案。
后续步骤
- 了解如何卸载 Apigee APIM Operator for Kubernetes。
- 详细了解用于部署网关的选项。