APIM 操作員:事前準備

本頁內容適用於 Apigee,但不適用於 Apigee Hybrid

查看 Apigee Edge 說明文件。

本頁說明安裝及設定 Kubernetes 適用的 Apigee APIM 運算子前,必須完成的步驟。如要進一步瞭解使用 APIM Operator 的優點,請參閱 Kubernetes 適用的 Apigee APIM Operator 總覽

必要的角色

如要取得設定資源的必要權限,以便安裝及使用 APIM Operator,請要求管理員在機構中授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

必要設定工作

安裝 APIM 運算子前,請務必完成下列工作,設定使用這項功能所需的資源:

  1. 使用 1-15-0-apigee-4 以上版本佈建 Apigee 執行個體。

    您可以在 Google Cloud 控制台的 Apigee UI 中,前往「Instance details」(執行個體詳細資料) 頁面查看執行個體版本。前往 Google Cloud 控制台的「Instances」(執行個體) 頁面,選取執行個體並查看詳細資料:

    前往「Instances」(執行個體) 頁面

    您可以搭配「訂閱」或「即付即用」Pay-as-you-go Apigee 機構使用 APIM 運算子。如要進一步瞭解如何佈建付費 Apigee 執行個體,請參閱「事前準備」一文。

  2. 安裝 Google Cloud CLI

    安裝 Google Cloud CLI 後,請執行 gcloud components update 指令,取得最新版 gcloud 元件。

  3. 安裝及設定 kubectl 指令列工具。
  4. 安裝 Helm (3.14.3 以上版本)。
  5. 使用 GKE 1.27 以上版本建立 GKE 叢集,並啟用 Workload Identity Federation for GKEGKE Gateway

    如果現有叢集符合這些規定,可以略過這個步驟。

    使用 Autopilot 模式建立及管理叢集時,系統預設會啟用 GKE 適用的工作負載身分聯盟。詳情請參閱「Autopilot 總覽」。

    如要瞭解如何使用 Autopilot 建立啟用 Workload Identity Federation for GKE 和 GKE Gateway 的新叢集,請參閱「部署 Gateway」一文。

  6. 將 GKE 閘道部署至叢集。

    您可以選擇設定及部署 內部閘道外部閘道,搭配 APIM Operator 使用。如果您選擇部署內部閘道,則必須使用僅限 Proxy 的子網路和共用虛擬私有雲。如要測試本指南中的步驟,建議您部署外部閘道。 詳情請參閱 GKE 閘道控制器需求條件

    如要部署 GKE Gateway,請按照「部署外部 Gateway」一文的步驟操作。建立閘道時,請使用下列 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

  7. 將後端應用程式部署至叢集

    如要部署您建立及部署的 global-ext-lb1 Gateway 所公開的後端應用程式:

    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 資源部署至叢集,將來自 Gateway 的流量對應至後端服務。

    如要進一步瞭解 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

  9. 確認 GKE Gateway 設定,確認設定運作正常。
    1. 使用下列指令取得閘道詳細資料:
      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 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 \
          -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 是在 Gateway 的 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"
        }

後續步驟

瞭解如何安裝 APIM 運算子