APIM Operator:准备工作

本页面适用于 Apigee,但不适用于 Apigee Hybrid

查看 Apigee Edge 文档。

本页介绍了安装和配置 Apigee APIM Operator for Kubernetes(预览版)所必须完成的步骤。如需详细了解使用 APIM Operator 的优势,请参阅 Apigee APIM Operator for Kubernetes 概览

所需的角色

如需获得设置安装和使用 APIM Operator 所需资源所需的权限,请让管理员为您授予组织的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

所需的设置任务

在安装 APIM Operator 之前,请务必完成以下任务,以设置使用该功能所需的资源:

  1. 使用 1-14-0-apigee-4 或更高版本预配 Apigee 实例。

    您可以在 Google Cloud 控制台的 Apigee 界面的实例详情页面中查看实例版本。前往 Google Cloud 控制台中的实例页面,选择实例并查看其详情:

    转到“实例”

    您可以将 APIM Operator 与订阅随用随付 Apigee 组织搭配使用。如需详细了解如何预配付费 Apigee 实例,请参阅准备工作

  2. 安装 Google Cloud CLI

    安装 Google Cloud CLI 后,运行 gcloud components update 命令以获取最新的 gcloud 组件。

  3. 安装和配置 kubectl 命令行工具。
  4. 安装 Helm(v3.14.3 版或更高版本)。
  5. 创建一个启用了 Workload Identity Federation for GKEGKE 网关的 GKE 集群。

    使用 Autopilot 模式创建和管理集群时,默认启用 Workload Identity Federation for GKE。如需了解详情,请参阅 Autopilot 概览

    如需了解使用 Autopilot 创建启用了 Workload Identity Federation for GKE 和 GKE 网关的新集群所需的步骤,请参阅部署网关

  6. 将 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

  7. 将后端应用部署到集群

    如需部署您创建和部署的 global-ext-lb1 网关公开的后端应用,请执行以下操作:

    1. 创建名为 target.yaml 的新文件。
    2. 将以下内容复制到新文件中:
      # 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
    3. 将配置应用到您的集群:
      kubectl apply -f target.yaml

    如需详细了解如何将后端应用部署到 GKE 集群,请参阅部署演示应用

  8. 将 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

  9. 验证 GKE Gateway 设置,以确认其运行状况是否符合预期:
    1. 使用以下命令获取网关详情:
      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

    2. 描述网关以确认路由已关联:
      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,表示路由已关联。

    3. 向网关发送请求:
      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