本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
本页介绍了安装和配置 Apigee APIM Operator for Kubernetes(预览版)所必须完成的步骤。如需详细了解使用 APIM Operator 的优势,请参阅 Apigee APIM Operator for Kubernetes 概览。
所需的角色
如需获得设置安装和使用 APIM Operator 所需资源所需的权限,请让管理员为您授予组织的以下 IAM 角色:
-
创建和管理 Google Kubernetes Engine (GKE) 集群:
Container Admin (
roles/container.admin
) -
创建和管理服务账号:Service Account Admin (
roles/iam.serviceAccountAdmin
) -
创建和管理服务扩展程序:
Service Extensions Admin (
roles/networkservices.serviceExtensionsAdmin
) -
创建和管理网络端点组 (NEG):
Compute Instance Admin (
roles/compute.instanceAdmin
) -
创建和管理后端服务:
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin
) -
创建和管理 Apigee 资源:
Apigee Admin (
roles/apigee.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
所需的设置任务
在安装 APIM Operator 之前,请务必完成以下任务,以设置使用该功能所需的资源:
使用
1-14-0-apigee-4
或更高版本预配 Apigee 实例。您可以在 Google Cloud 控制台的 Apigee 界面的实例详情页面中查看实例版本。前往 Google Cloud 控制台中的实例页面,选择实例并查看其详情:
您可以将 APIM Operator 与订阅或随用随付 Apigee 组织搭配使用。如需详细了解如何预配付费 Apigee 实例,请参阅准备工作。
安装 Google Cloud CLI。
安装 Google Cloud CLI 后,运行
gcloud components update
命令以获取最新的 gcloud 组件。- 安装和配置
kubectl
命令行工具。 - 安装 Helm(v3.14.3 版或更高版本)。
创建一个启用了 Workload Identity Federation for GKE 和 GKE 网关的 GKE 集群。
使用 Autopilot 模式创建和管理集群时,默认启用 Workload Identity Federation for GKE。如需了解详情,请参阅 Autopilot 概览。
如需了解使用 Autopilot 创建启用了 Workload Identity Federation for GKE 和 GKE 网关的新集群所需的步骤,请参阅部署网关。
- 将 GKE 网关部署到您的集群。
您可以选择配置和部署内部网关或外部网关,以便与 APIM Operator 搭配使用。如果您选择部署内部网关,则需要使用代理专用子网和共享 VPC。在本指南中,我们建议您部署外部网关。如需了解详情,请参阅 GKE 网关控制器要求。
如需部署 GKE 网关,请按照部署外部网关中的步骤操作。创建网关时,请使用以下
yaml
配置:# gateway.yaml kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: global-ext-lb1 namespace: default spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: http protocol: HTTP allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 80
- 将后端应用部署到集群。
如需部署您创建和部署的
global-ext-lb1
网关公开的后端应用,请执行以下操作:- 创建名为
target.yaml
的新文件。 - 将以下内容复制到新文件中:
# target.yaml apiVersion: v1 kind: Namespace metadata: name: http --- apiVersion: v1 kind: ServiceAccount metadata: name: httpbin namespace: http --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: http labels: app: httpbin service: httpbin spec: type: LoadBalancer ports: - name: https port: 80 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: http spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80 resources: requests: cpu: 1 memory: 1024Mi limits: cpu: 1 memory: 1024Mi
- 将配置应用到您的集群:
kubectl apply -f target.yaml
如需详细了解如何将后端应用部署到 GKE 集群,请参阅部署演示应用。
- 创建名为
- 将 HTTPRoute 资源部署到集群,以将来自网关的流量映射到您的后端服务。
如需详细了解 HTTPRoute 资源,请参阅部署 HTTPRoute(适用于内部网关)或创建 HTTPRoute(适用于外部网关)。
在本指南中,我们建议您按照创建 HTTPRoute 中的步骤部署外部网关和 HTTPRoute。在创建 HTTPRoute 时,请使用以下
yaml
配置:# httproute.yaml kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: http-bin-route namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb1 namespace: default hostnames: - apigee-apim-operator-test.apigee.net rules: - matches: - path: value: / backendRefs: - name: httpbin kind: Service port: 80 namespace: http
- 验证 GKE Gateway 设置,以确认其运行状况是否符合预期:
- 使用以下命令获取网关详情:
kubectl get gateway GATEWAY_NAME
其中 GATEWAY_NAME 是您创建的 GKE 网关的名称。
例如:
kubectl get gateway global-ext-lb1
您应该会看到类似如下所示的输出:
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb1 gke-l7-global-external-managed 34.54.193.72 True 11d
确认已为网关分配 IP 地址,并且
PROGRAMMED
的值为True
。 - 描述网关以确认路由已关联:
kubectl describe gateway GATEWAY_NAME
例如:
kubectl describe gateway global-ext-lb1
输出应类似如下所示:
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
确认
Attached Routes
的值为1
,表示路由已关联。 - 向网关发送请求:
curl http://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
中定义的主机名。您可以使用以下命令检索 HOST_NAME:kubectl get HTTPRoute HTTPROUTE_NAME -n NAMESPACE
For example:
curl http://34.54.193.72/get -k \ -H "Host: apigee-apim-operator-test.apigee.net"
响应应类似如下所示:
{ "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": "http://apigee-apim-operator-test.apigee.net/get" }
- 使用以下命令获取网关详情:
后续步骤
了解如何安装 APIM Operator。