安裝 Kubernetes 適用的 Apigee APIM Operator

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

查看 Apigee Edge 說明文件。

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

事前準備

開始安裝 APIM Operator 前,請確認您具備完成步驟所需的角色和權限,並已完成「APIM Operator:事前準備」一文所述的前置作業。

必要的角色

如要取得安裝 APIM 運算子所需的權限,請要求管理員在機構中授予下列 IAM 角色:

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

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

安裝及設定 APIM Operator

下列各節說明安裝及設定 APIM 運算子所需的步驟:

  1. 設定環境變數
  2. 啟用必要的 API
  3. 擷取及設定憑證
  4. 安裝 APIM Operator
  5. 建立工作負載身分
  6. 建立 Apigee 環境
  7. 確認 GKE Gateway 設定

設定環境變數

在包含 Apigee 執行個體的 Google Cloud 專案中,使用下列指令設定環境變數:

export PROJECT_ID=PROJECT_ID
export CLUSTER_NAME=CLUSTER_NAME
export REGION=REGION
export APIGEE_ORG=APIGEE_ORG

其中:

  • PROJECT_ID 是 Apigee 執行個體所屬專案的 ID。
  • CLUSTER_NAME 是 GKE 叢集的名稱。
  • REGION 是 GKE 叢集的區域。
  • APIGEE_ORG 設為與 PROJECT_ID 相同的值。

如要確認環境變數設定正確無誤,請執行下列指令:

echo $PROJECT_ID $CLUSTER_NAME $REGION $APIGEE_ORG

啟用必要的 API

APIM Operator 需要存取下列 API:

名稱 標題
apigee.googleapis.com Apigee API
compute.googleapis.com Compute Engine API
networkservices.googleapis.com Network Services API
container.googleapis.com Google Kubernetes Engine API

使用下列指令確認必要的 API 已啟用:

gcloud services list --project=$PROJECT_ID

如果指令輸出中未列出必要的 API,請啟用這些 API:

gcloud services enable apigee.googleapis.com --project=$PROJECT_ID
gcloud services enable compute.googleapis.com --project=$PROJECT_ID
gcloud services enable networkservices.googleapis.com --project=$PROJECT_ID
gcloud services enable container.googleapis.com --project=$PROJECT_ID

擷取及設定憑證

擷取叢集憑證並建立服務帳戶,以便連線至 Google Cloud 服務:

  1. 使用下列指令取得叢集憑證:

    gcloud container clusters get-credentials $CLUSTER_NAME --location=$REGION --project=$PROJECT_ID

    這些憑證用於與先決條件步驟中建立的 GKE 叢集通訊。

  2. 設定服務帳戶憑證,以便連線至 Google Cloud 服務:
    gcloud iam service-accounts create apigee-apim-gsa
  3. 使用下列指令,將必要角色和權限授予您建立的服務帳戶:
    • Apigee 管理員角色:建立及管理 Apigee 資源時必須具備此角色。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/apigee.admin"
    • 服務擴充功能管理員角色:建立及管理服務擴充功能時必須具備此角色。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/networkservices.serviceExtensionsAdmin"
    • 網路管理員角色:使用服務擴充功能管理 Apigee 存取權時,必須具備此角色。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/compute.networkAdmin"
    • 負載平衡器管理員角色:管理網路端點群組 (NEG) 與後端服務之間的存取權時,需要這個角色。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/compute.loadBalancerAdmin"
      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/iam.workloadIdentityUser"

建立工作負載身分

在下一個步驟中,helm 安裝 APIM Operator 時,會在 apim 命名空間中建立名為 apim-ksa 的必要 Kubernetes 服務帳戶 (KSA)。建立 KSA 時,其中會包含與 APIM 運算子所用工作負載身分建立關聯的必要註解,方便存取必要的 Apigee 和 Service Networking 資源。

如要建立工作負載身分,請使用下列指令:

gcloud iam service-accounts add-iam-policy-binding apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apim/apim-ksa]"

這項指令會將 KSA 與您在「擷取及設定憑證」中建立的 Google 服務帳戶繫結,並指派 workloadIdentityUser 角色。

工作負載身分識別變更可能需要幾分鐘 (最多 7 分鐘) 才能全面套用到系統。

如要確認是否已建立工作負載身分,請使用下列指令:

gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \
  --namespace apim workload-identity-test \
  --overrides='{ "spec": { "serviceAccountName": "apim-ksa" } }'  \
  -- gcloud auth list

輸出內容應如下所示:

Credentialed Accounts
  ACTIVE  ACCOUNT
  *       GSA@$PROJECT_ID.iam.gserviceaccount.com

安裝自訂資源定義 (CRD) 和 APIM 運算子

安裝 Kubernetes 自訂資源定義 (CRD) 和 APIM 運算子:

  1. 為 APIM 運算子建立命名空間:
    kubectl create ns apim
  2. 安裝 APIM Operator 自訂資源定義 (CRD):
    helm install apigee-apim-crds -n apim \
      oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-crds \
      --version 1.0.0 \
      --atomic
  3. 安裝 APIM Operator:
    helm install apigee-apim-operator -n apim \
      oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-helm \
      --version 1.0.0 \
      --set projectId=$PROJECT_ID \
      --set serviceAccount=apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com \
      --set apigeeOrg=$PROJECT_ID \
      --set generateEnv=TRUE \
      --atomic
  4. 確認安裝作業是否順利完成:
    helm list -n apim

    輸出內容應如下所示:

    NAME                	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART                          	APP VERSION
    apigee-apim-crds    	apim     	1       	2025-02-01 00:17:03.399810627 +0000 UTC	deployed	apigee-apim-operator-crds-1.0.0	1.0.0
    apigee-apim-operator	apim     	1       	2025-02-01 00:15:00.362829981 +0000 UTC	deployed	apigee-apim-operator-helm-1.0.0	1.0.0   

  5. 確認 KSA 是使用必要註解建立:
    kubectl describe serviceaccounts apim-ksa -n apim

    輸出內容應如下所示:

    Name:                apim-ksa
    Namespace:           apim
    ...
    Annotations:         iam.gke.io/gcp-service-account: apigee-apim-gsa@my-project-id.iam.gserviceaccount.com
  6. 確認 APIM 運算子是否在叢集的 Pod 中啟動並執行:
    kubectl get pods -n apim

    輸出內容應如下所示:

    NAME                                    READY   STATUS    RESTARTS     AGE
    apigee-apim-operator-8559d4994b-h55fl   1/1     Running   0            8m34s
    

    如果 STATUS 不是 Running,或 READY 未顯示 1/1,請參閱「排解 APIM 運算子問題」一文,排解安裝問題。

建立 Apigee 環境

如果您在上一個步驟中使用 generateEnv=TRUE 安裝 APIM Operator,則在建立並套用 APIM 擴充功能政策時,這個運算子會建立新的 Apigee 環境。新環境的名稱會加上前置字串:apim-enabled-dep-env

如果您使用 generateEnv=FALSE 安裝 APIM Operator,則必須建立新的 Apigee 環境:

  1. curl 指令設定 TOKEN
    export TOKEN=$(gcloud auth print-access-token)
  2. 使用下列任一指令建立環境:
    • 2021 年訂閱方案機構:
      curl -X POST "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H \
        "Authorization: Bearer $TOKEN" -H "content-type:application/json" \
          -d '{
            "name": "ENV_NAME",
            "displayName": "ENV_NAME",
            "state": "ACTIVE",
            "deploymentType": "PROXY",
            "apiProxyType": "PROGRAMMABLE",
            "properties": {
              "property": [
                {
                  "name": "apigee-service-extension-enabled",
                  "value": "true"
                }
              ]
            }
        }'

      其中 ENV_NAME 是要建立的環境名稱。

    • 適用於 2024 年訂閱方案和即付即用機構:
      curl -i -X POST -H "Authorization: Bearer $TOKEN"  "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H "Content-Type:application/json" -d '{
        "name": "ENV_NAME",
        "displayName": "ENV_NAME",
        "state": "ACTIVE",
        "deploymentType": "PROXY",
        "apiProxyType": "PROGRAMMABLE",
        "type" : "COMPREHENSIVE",
        "properties": {
          "property": [
            {
              "name": "apigee-service-extension-enabled",
              "value": "true"
            }
          ]
        }
      }'

      其中:

      • ENV_NAME 是要建立的環境名稱。
      • ENV_TYPE 是要建立的環境類型。例如 INTERMEDIATECOMPREHENSIVE

    如要確認環境是否已成功建立,請執行下列步驟:

    curl -i -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments"

  3. 將環境連結至 Apigee 執行個體:
    curl -i -X POST -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/instances/INSTANCE_NAME/attachments" \
      -H "Content-Type:application/json" -d '{"environment": "ENV_NAME"}'

    其中:

    • INSTANCE_NAME 是 Apigee 執行個體的名稱。
    • ENV_NAME 是您在前一個步驟建立的環境名稱。

    如要查看環境附件作業的狀態:

    curl -X GET -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/operations/OPERATION_ID"

    其中 OPERATION_ID 是環境附件作業的 ID。

疑難排解

如果在安裝 APIM Operator 時遇到問題,請參閱「排解 APIM Operator 問題」,瞭解常見錯誤的解決方案。

後續步驟