本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本页面介绍了安装和配置 Apigee Operator for Kubernetes 之前必须完成的步骤。 如需详细了解使用 Apigee Operator for Kubernetes 的优势,请参阅 Apigee Operator for Kubernetes 概览。
所需的角色
如需获得设置安装和使用 Apigee Operator for Kubernetes 所需资源所需的权限,请让您的管理员为您授予组织的以下 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)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
所需的设置任务
在安装 Apigee Operator for Kubernetes 之前,请完成以下任务,以设置使用该功能所需的资源:
使用
1-15-0-apigee-4或更高版本预配 Apigee 实例。您可以在 Google Cloud 控制台的 Apigee 界面的实例详情页面中查看实例版本。 前往 Google Cloud 控制台中的实例页面,以选择实例并查看其详细信息:
您可以将 Apigee Operator for Kubernetes 与订阅或随用随付 Apigee 组织搭配使用。如需详细了解如何预配付费 Apigee 实例,请参阅准备工作。
安装 Google Cloud CLI。
安装 Google Cloud CLI 后,运行
gcloud components update命令以获取最新的 gcloud 组件。- 安装和配置
kubectl命令行工具。 - 安装 Helm(v3.14.3 版或更高版本)。
创建一个使用 GKE 1.27 版或更高版本的 GKE 集群,并启用 Workload Identity Federation for GKE 和 GKE 网关。
如果您已有符合上述要求的集群,则可以跳过此步骤。
使用 Autopilot 模式创建和管理集群时,Workload Identity Federation for GKE 默认处于启用状态。如需了解详情,请参阅 Autopilot 概览。
如需了解使用 Autopilot 创建启用了 Workload Identity Federation for GKE 和 GKE 网关的新集群所需的步骤,请参阅部署网关。
- 将 GKE 网关部署到您的集群。
您可以选择配置和部署内部网关或外部网关,以便与 Apigee Operator for Kubernetes 搭配使用。 如果您选择部署内部网关,则需要使用代理专用子网和共享 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
将该文件应用于集群:
kubectl apply -f gateway.yaml
- 将后端应用部署到集群。
如需部署您创建和部署的
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配置,并将HOST_NAME替换为您要使用的主机名:# 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: - HOST_NAME rules: - matches: - path: value: / backendRefs: - name: httpbin kind: Service port: 80 namespace: http
将该文件应用于集群:
kubectl apply -f httproute.yaml
- 验证 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 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 \ -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 \ -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" }
- 使用以下命令获取网关详情:
后续步骤
了解如何安装 Apigee Operator for Kubernetes。