步驟 11:使用 Helm 安裝 Apigee Hybrid

安裝 Apigee Hybrid 執行階段元件

在本步驟中,您將使用 Helm 安裝下列 Apigee Hybrid 元件:

  • Apigee 運算子
  • Apigee 資料存放區
  • Apigee 遙測
  • Apigee Redis
  • Apigee Ingress 管理員
  • Apigee 機構
  • 您的 Apigee 環境

您將逐一為每個環境安裝圖表。安裝元件的順序很重要。

安裝前注意事項

  1. 如果您尚未安裝 Helm 3.14.2 以上版本,請按照「安裝 Helm」中的操作說明進行安裝。
  2. Apigee Hybrid 會使用 Helm 護欄,在安裝或升級圖表前驗證設定。您可能會在這一節中每個指令的輸出內容中看到護欄專屬資訊,例如:

    # Source: apigee-operator/templates/apigee-operators-guardrails.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: apigee-hybrid-helm-guardrail-operator
      namespace:  APIGEE_NAMESPACE
      annotations:
        helm.sh/hook: pre-install,pre-upgrade
        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
      labels:
        app: apigee-hybrid-helm-guardrail
    

    如果任何 helm upgrade 指令失敗,您可以使用安全防護措施輸出內容,協助診斷原因。請參閱診斷安全防護措施問題

  3. 執行任何 Helm 升級/安裝指令前,請在指令結尾加上 --dry-run=server,使用 Helm 試執行功能。如要列出支援的指令、選項和用法,請參閱 helm install --h

安裝步驟

在混合式安裝中,選取服務帳戶驗證類型的安裝說明:

Kubernetes Secret

  1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
  2. 安裝 Apigee Operator/Controller:
    1. 模擬測試:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 確認 Apigee Operator 安裝狀態:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                                       APP VERSION
      operator   apigee   3          2025-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.15.1   1.15.1
      
    4. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           34s
      
  3. 安裝 Apigee 資料存放區:

    1. 模擬測試:
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 請先檢查 apigeedatastore 的狀態,確認其正常運作,再繼續進行下一個步驟:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    51s
      
  4. 安裝 Apigee 遙測:

    1. 模擬測試:
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   55s
      
  5. 安裝 Apigee Redis:

    1. 模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   79s
      
  6. 安裝 Apigee Ingress 管理工具:

    1. 模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           16s
      
  7. 安裝 Apigee 機構。如果您已在殼層中設定 $ORG_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查對應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      my-project-123abcd        running   4m18s
      
  8. 安裝環境。

    一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。如果您已在殼層中設定 $ENV_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。

    2. 安裝圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
    3. 請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                       STATE     AGE   GATEWAYTYPE
      apigee-my-project-my-env   running   3m1s
      
  9. 安裝環境群組 (virtualhosts)。
    1. 一次只能安裝一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP 指定環境群組。如果您已在殼層中設定 $ENV_GROUP 環境變數,可以在下列指令中使用該變數。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

      模擬測試:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_GROUP_RELEASE_NAME 是用於追蹤 apigee-virtualhosts 圖表安裝和升級作業的名稱。這個名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_GROUP 相同。不過,如果環境群組與安裝中的環境同名,您必須為環境群組和環境使用不同的發布名稱,例如 dev-envgroup-releasedev-env-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「 三大概念」。

    2. 安裝圖表:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml
      
    3. 檢查 ApigeeRoute (AR) 的狀態。

      安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

      kubectl -n APIGEE_NAMESPACE get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2m
      
      kubectl -n APIGEE_NAMESPACE get ar
      
      NAME                                                        STATE     AGE
      apigee-ingressgateway-internal-chaining-my-project-123abcd   running   19m
      my-project-myenvgroup-000-321dcba                            running   2m30s
      

JSON 檔案

  1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
  2. 安裝 Apigee Operator/Controller:
    1. 模擬測試:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 確認 Apigee Operator 安裝狀態:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                                       APP VERSION
      operator   apigee   3          2025-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.15.1   1.15.1
      
    4. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           34s
      
  3. 安裝 Apigee 資料存放區:

    1. 模擬測試:
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 請先檢查 apigeedatastore 的狀態,確認其正常運作,再繼續進行下一個步驟:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    51s
      
  4. 安裝 Apigee 遙測:

    1. 模擬測試:
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   55s
      
  5. 安裝 Apigee Redis:

    1. 模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   79s
      
  6. 安裝 Apigee Ingress 管理工具:

    1. 模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           16s
      
  7. 安裝 Apigee 機構。如果您已在殼層中設定 $ORG_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查對應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      my-project-123abcd        running   4m18s
      
  8. 安裝環境。

    一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。如果您已在殼層中設定 $ENV_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。

    2. 安裝圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
    3. 請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                       STATE     AGE   GATEWAYTYPE
      apigee-my-project-my-env   running   3m1s
      
  9. 安裝環境群組 (virtualhosts)。
    1. 一次只能安裝一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP 指定環境群組。如果您已在殼層中設定 $ENV_GROUP 環境變數,可以在下列指令中使用該變數。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

      模擬測試:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_GROUP_RELEASE_NAME 是用於追蹤 apigee-virtualhosts 圖表安裝和升級作業的名稱。這個名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_GROUP 相同。不過,如果環境群組與安裝中的環境同名,您必須為環境群組和環境使用不同的發布名稱,例如 dev-envgroup-releasedev-env-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「 三大概念」。

    2. 安裝圖表:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml
      
    3. 檢查 ApigeeRoute (AR) 的狀態。

      安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

      kubectl -n APIGEE_NAMESPACE get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2m
      
      kubectl -n APIGEE_NAMESPACE get ar
      
      NAME                                                        STATE     AGE
      apigee-ingressgateway-internal-chaining-my-project-123abcd   running   19m
      my-project-myenvgroup-000-321dcba                            running   2m30s
      

保管箱

  1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
  2. 安裝 Apigee Operator/Controller:
    1. 模擬測試:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 確認 Apigee Operator 安裝狀態:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                                       APP VERSION
      operator   apigee   3          2025-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.15.1   1.15.1
      
    4. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           34s
      
  3. 安裝 Apigee 資料存放區:

    1. 模擬測試:
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 請先檢查 apigeedatastore 的狀態,確認其正常運作,再繼續進行下一個步驟:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    51s
      
  4. 安裝 Apigee 遙測:

    1. 模擬測試:
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   55s
      
  5. 安裝 Apigee Redis:

    1. 模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   79s
      
  6. 安裝 Apigee Ingress 管理工具:

    1. 模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           16s
      
  7. 安裝 Apigee 機構。如果您已在殼層中設定 $ORG_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查對應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      my-project-123abcd        running   4m18s
      
  8. 安裝環境。

    一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。如果您已在殼層中設定 $ENV_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。

    2. 安裝圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
    3. 請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                       STATE     AGE   GATEWAYTYPE
      apigee-my-project-my-env   running   3m1s
      
  9. 安裝環境群組 (virtualhosts)。
    1. 一次只能安裝一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP 指定環境群組。如果您已在殼層中設定 $ENV_GROUP 環境變數,可以在下列指令中使用該變數。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

      模擬測試:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_GROUP_RELEASE_NAME 是用於追蹤 apigee-virtualhosts 圖表安裝和升級作業的名稱。這個名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_GROUP 相同。不過,如果環境群組與安裝中的環境同名,您必須為環境群組和環境使用不同的發布名稱,例如 dev-envgroup-releasedev-env-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「 三大概念」。

    2. 安裝圖表:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml
      
    3. 檢查 ApigeeRoute (AR) 的狀態。

      安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

      kubectl -n APIGEE_NAMESPACE get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2m
      
      kubectl -n APIGEE_NAMESPACE get ar
      
      NAME                                                        STATE     AGE
      apigee-ingressgateway-internal-chaining-my-project-123abcd   running   19m
      my-project-myenvgroup-000-321dcba                            running   2m30s
      

GKE 的 WIF

  1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
  2. 安裝 Apigee Operator/Controller:
    1. 模擬測試:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 確認 Apigee Operator 安裝狀態:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                                       APP VERSION
      operator   apigee   3          2025-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.15.1   1.15.1
      
    4. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           34s
      
  3. 安裝 Apigee 資料存放區:

    1. 模擬測試:
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 為 Cassandra 設定服務帳戶繫結,以搭配 GKE 適用的工作負載身分聯盟:

      helm upgrade 指令的輸出內容應包含 NOTES 區段中的指令。請按照這些指令設定服務帳戶繫結。應有兩個指令,格式如下:

      正式環境

      gcloud iam service-accounts add-iam-policy-binding CASSANDRA_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-cassandra-default]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-cassandra-default]" \
        --project PROJECT_ID
      

      且:

      正式環境

      kubectl annotate serviceaccount apigee-cassandra-default \
        iam.gke.io/gcp-service-account=CASSANDRA_SERVICE_ACCOUNT_EMAIL \
        --namespace APIGEE_NAMESPACE
      

      非正式環境

      kubectl annotate serviceaccount apigee-cassandra-default \
        iam.gke.io/gcp-service-account=NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --namespace APIGEE_NAMESPACE
      

      例如:

      正式環境

      NOTES:
      For Cassandra backup GKE Workload Identity, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
        gcloud iam service-accounts add-iam-policy-binding apigee-cassandra@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-default]" \
              --project my-project
      
        kubectl annotate serviceaccount apigee-cassandra-default \
              iam.gke.io/gcp-service-account=apigee-cassandra@my-project.iam.gserviceaccount.com \
              --namespace apigee
      

      非正式環境

      NOTES:
      For Cassandra backup GKE Workload Identity, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-default]" \
              --project my-project
      
        kubectl annotate serviceaccount apigee-cassandra-default \
              iam.gke.io/gcp-service-account=apigee-non-prod@my-project.iam.gserviceaccount.com \
              --namespace apigee
      

      選用:如不想在此時設定 Cassandra 備份,請編輯覆寫檔案,移除或註解 cassandra.backup 節,然後執行 helm upgrade 指令,但不要使用 --dry-run 標記。如要進一步瞭解如何設定 Cassandra 備份,請參閱「Cassandra 備份與還原」。

    3. 安裝圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    4. 請先檢查 apigeedatastore 的狀態,確認其正常運作,再繼續進行下一個步驟:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    51s
      
  4. 安裝 Apigee 遙測:

    1. 模擬測試:
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 為 Loggeer 和 Metrics 設定服務帳戶繫結,以搭配 GKE 適用的工作負載身分聯盟:

      helm upgrade 指令的輸出內容應包含 NOTES 區段中的指令。請按照這些指令設定服務帳戶繫結。應有兩個指令,格式如下:

      Logger KSA: apigee-logger-apigee-telemetry

      gcloud iam service-accounts add-iam-policy-binding LOGGER_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-logger-apigee-telemetry]" \
        --project PROJECT_ID
      

      指標 KSA: apigee-metrics-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding METRICS_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-metrics-sa]" \
        --project PROJECT_ID

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-metrics-sa]" \
        --project PROJECT_ID

      例如:

      正式環境

      NOTES:
      For GKE Workload Identity, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
        Logger KSA: apigee-logger-apigee-telemetry
        gcloud iam service-accounts add-iam-policy-binding apigee-logger@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-logger-apigee-telemetry]" \
              --project my-project
      
        Metrics KSA: apigee-metrics-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-metrics@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-metrics-sa]" \
              --project my-project
      

      非正式環境

      NOTES:
      For GKE Workload Identity, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
        Logger KSA: apigee-logger-apigee-telemetry
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-logger-apigee-telemetry]" \
              --project my-project
      
        Metrics KSA: apigee-metrics-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-metrics-sa]" \
              --project my-project
      
    3. 安裝圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    4. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   55s
      
  5. 安裝 Apigee Redis:

    1. 模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   79s
      
  6. 安裝 Apigee Ingress 管理工具:

    1. 模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           16s
      
  7. 安裝 Apigee 機構。如果您已在殼層中設定 $ORG_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 為 Workload Identity Federation for GKE、MART、Apigee Connect、UDCA 和 Watcher 設定機構範圍元件的服務帳戶繫結。

      helm upgrade 指令的輸出內容應包含 NOTES 區段中的指令。請按照這些指令設定服務帳戶繫結。應該有四個指令。

      MART KSA: apigee-mart-PROJECT_ID-ORG_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding MART_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-mart-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-mart-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      Connect Agent KSA: apigee-connect-agent-PROJECT_ID-ORG_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding MART_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-connect-agent-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-connect-agent-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      Mint Task Scheduler KSA: (如果您使用 Monetization for Apigee hybrid) apigee-mint-task-scheduler-PROJECT_ID-ORG_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding MINT_TASK_SCHEDULER_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-mint-task-scheduler-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-mint-task-scheduler-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      UDCA KSA: apigee-udca-PROJECT_ID-ORG_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding UDCA_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-udca-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-udca-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      Watcher KSA: apigee-watcher-PROJECT_ID-ORG_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding WATCHER_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-watcher-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-watcher-PROJECT_ID-ORG_HASH_ID-sa]" \
        --project PROJECT_ID
      

      例如:

      正式環境

      NOTES:
      For Apigee Organization GKE Workload Identity, my-project, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
      
      
        MART KSA: apigee-mart-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-mart@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-mart-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        Connect Agent KSA: apigee-connect-agent-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-mart@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-connect-agent-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        Mint task scheduler KSA: apigee-mint-task-scheduler-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-mint-task-scheduler@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-mint-task-scheduler-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        UDCA KSA: apigee-udca-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-udca@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-udca-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        Watcher KSA: apigee-watcher-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-watcher@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-watcher-my-project-1a2b3c4-sa]" \
              --project my-project
      

      非正式環境

      NOTES:
      For Apigee Organization GKE Workload Identity, my-project, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
      
        MART KSA: apigee-mart-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-mart-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        Connect Agent KSA: apigee-connect-agent-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-connect-agent-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        UDCA KSA: apigee-udca-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-udca-my-project-1a2b3c4-sa]" \
              --project my-project
      
      
        Watcher KSA: apigee-watcher-my-project-1a2b3c4-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-non-prod@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-watcher-my-project-1a2b3c4-sa]" \
              --project my-project
      
    3. 安裝圖表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    4. 檢查對應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      my-project-123abcd        running   4m18s
      
  8. 安裝環境。

    一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。如果您已在殼層中設定 $ENV_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。

    2. 為 Workload Identity Federation for GKE、Runtime、Synchronizer 和 UDCA,設定環境範圍元件的服務帳戶繫結。

      helm upgrade 指令的輸出內容應包含 NOTES 區段中的指令。請按照這些指令設定服務帳戶繫結。應該有四個指令。

      執行階段 KSA: apigee-runtime-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding RUNTIME_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-runtime-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-runtime-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      Synchronizer KSA: apigee-synchronizer-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding SYNCHRONIZER_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-synchronizer-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-synchronizer-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      UDCA KSA: apigee-udca-PROJECT_ID-ORG_HASH_ID-ENV_NAME-ENV_HASH_ID-sa

      正式環境

      gcloud iam service-accounts add-iam-policy-binding UDCA_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-udca-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      非正式環境

      gcloud iam service-accounts add-iam-policy-binding NON_PROD_SERVICE_ACCOUNT_EMAIL \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[apigee/apigee-udca-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa]" \
        --project PROJECT_ID
      

      例如:

      NOTES:
      For Apigee Environment GKE Workload Identity, my-env, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
      
      
        Runtime KSA: apigee-runtime-my-project-my-env-b2c3d4e-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-runtime@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-runtime-my-project-my-env-b2c3d4e-sa]" \
              --project my-project
      
      
        Synchronizer KSA: apigee-synchronizer-my-project-my-env-b2c3d4e-sa
        gcloud iam service-accounts add-iam-policy-binding apigee-synchronizer@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-synchronizer-my-project-my-env-b2c3d4e-sa]" \
              --project my-project
      
      
        UDCA KSA: apigee-udca-my-project-my-env-b2c3d4e-sa:
        gcloud iam service-accounts add-iam-policy-binding apigee-udca@my-project.iam.gserviceaccount.com \
              --role roles/iam.workloadIdentityUser \
              --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-udca-my-project-my-env-b2c3d4e-sa]" \
              --project my-project
      
    3. 安裝圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
    4. 請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                       STATE     AGE   GATEWAYTYPE
      apigee-my-project-my-env   running   3m1s
      
  9. 安裝環境群組 (virtualhosts)。
    1. 一次只能安裝一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP 指定環境群組。如果您已在殼層中設定 $ENV_GROUP 環境變數,可以在下列指令中使用該變數。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

      模擬測試:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_GROUP_RELEASE_NAME 是用於追蹤 apigee-virtualhosts 圖表安裝和升級作業的名稱。這個名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_GROUP 相同。不過,如果環境群組與安裝中的環境同名,您必須為環境群組和環境使用不同的發布名稱,例如 dev-envgroup-releasedev-env-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「 三大概念」。

    2. 安裝圖表:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml
      
    3. 檢查 ApigeeRoute (AR) 的狀態。

      安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

      kubectl -n APIGEE_NAMESPACE get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2m
      
      kubectl -n APIGEE_NAMESPACE get ar
      
      NAME                                                        STATE     AGE
      apigee-ingressgateway-internal-chaining-my-project-123abcd   running   19m
      my-project-myenvgroup-000-321dcba                            running   2m30s
      
  10. (選用) 您可以在 Google Cloud console的「Kubernetes: Workloads Overview」(Kubernetes:工作負載總覽) 頁面中,查看 Kubernetes 服務帳戶的狀態。

    前往「Workloads」(工作負載)

在其他平台使用 WIF

  1. 如果沒有,請前往 APIGEE_HELM_CHARTS_HOME 目錄。從該目錄執行下列指令。
  2. 安裝 Apigee Operator/Controller:
    1. 模擬測試:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 確認 Apigee Operator 安裝狀態:

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                                       APP VERSION
      operator   apigee   3          2025-06-26 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.15.1   1.15.1
      
    4. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           34s
      
  3. 安裝 Apigee 資料存放區:

    1. 模擬測試:
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 如果您已啟用 Cassandra 備份或 Cassandra 還原功能,請授予 Cassandra Kubernetes 服務帳戶權限,模擬相關聯的 apigee-cassandraIAM 服務帳戶。
      1. 列出 Cassandra 的 IAM 服務帳戶電子郵件地址:

        正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-cassandra"

        非正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-non-prod"

        輸出內容應如下所示:

        正式環境

        apigee-cassandra      apigee-cassandra@my-project.iam.gserviceaccount.com      False
                          

        非正式環境

        apigee-non-prod       apigee-non-prod@my-project.iam.gserviceaccount.com      False
                          
      2. 列出 Cassandra Kubernetes 服務帳戶:
        kubectl get serviceaccount -n APIGEE_NAMESPACE | grep "apigee-cassandra"

        輸出內容應如下所示:

        apigee-cassandra-backup-sa                       0   7m37s
        apigee-cassandra-default                         0   7m12s
        apigee-cassandra-guardrails-sa                   0   6m43s
        apigee-cassandra-restore-sa                      0   7m37s
        apigee-cassandra-schema-setup-my-project-1a2b2c4 0   7m30s
        apigee-cassandra-schema-val-my-project-1a2b2c4   0   7m29s
        apigee-cassandra-user-setup-my-project-1a2b2c4   0   7m22s
                      
      3. 如果您已建立 apigee-cassandra-backup-saapigee-cassandra-restore-sa Kubernetes 服務帳戶,請執行下列指令,授予每個帳戶模擬 apigee-cassandra IAM 服務帳戶的存取權:

        正式環境

        範本

        gcloud iam service-accounts add-iam-policy-binding \
          CASSANDRA_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-cassandra@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-cassandra-backup-sa" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        範本

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-cassandra-backup-sa" \
            --role=roles/iam.workloadIdentityUser

        其中:

        • CASSANDRA_IAM_SA_EMAIL:Cassandra IAM 服務帳戶的電子郵件地址。
        • PROJECT_NUMBER:您建立 workload identity pool 的專案專案編號
        • POOL_ID:工作負載身分集區 ID。
        • MAPPED_SUBJECT:ID 權杖中聲明所屬的 Kubernetes ServiceAccount。在大多數混合式安裝作業中,這會採用 system:serviceaccount:APIGEE_NAMESPACE:K8S_SA_NAME 格式。
          • 對於 apigee-cassandra-backup-sa,這會與 system:serviceaccount:apigee:apigee-cassandra-backup-sa 類似。
          • 對於 apigee-cassandra-restore-sa,這會與 system:serviceaccount:apigee:apigee-cassandra-restore-sa 類似。
    4. 請先檢查 apigeedatastore 的狀態,確認其正常運作,再繼續進行下一個步驟:

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    51s
      
  4. 安裝 Apigee 遙測:

    1. 模擬測試:
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   55s
      
    4. 授予遙測 Kubernetes 服務帳戶權限,模擬相關聯的 apigee-metricsIAM 服務帳戶。
      1. 列出指標的 IAM 服務帳戶電子郵件地址:

        正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-metrics"

        輸出內容應如下所示:

        apigee-metrics   apigee-metrics@my-project.iam.gserviceaccount.com   False

        非正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-non-prod"

        輸出內容應如下所示:

        apigee-non-prod   apigee-non-prod@my-project.iam.gserviceaccount.com   False
      2. 列出遙測 Kubernetes 服務帳戶:
        kubectl get serviceaccount -n APIGEE_NAMESPACE | grep "telemetry"

        輸出內容應如下所示:

        apigee-metrics-apigee-telemetry                    0   42m
        apigee-open-telemetry-collector-apigee-telemetry   0   37m
      3. 使用下列指令,授予每個遙測 Kubernetes 服務帳戶模擬 apigee-metrics IAM 服務帳戶的存取權:

        正式環境

        Apigee 指標 KSA: apigee-metrics-apigee-telemetryapigee-metrics Google IAM 服務帳戶

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          METRICS_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-metrics@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-metrics-apigee-telemetry" \
            --role=roles/iam.workloadIdentityUser

        Apigee OpenTelemetry Collector KSA: apigee-open-telemetry-collector-apigee-telemetryapigee-metrics Google IAM 服務帳戶

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          METRICS_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-metrics@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-open-telemetry-collector-apigee-telemetry" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        Apigee 指標 KSA: apigee-metrics-apigee-telemetryapigee-non-prod Google IAM 服務帳戶

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-metrics-apigee-telemetry" \
            --role=roles/iam.workloadIdentityUser

        Apigee OpenTelemetry Collector KSA: apigee-open-telemetry-collector-apigee-telemetryapigee-non-prod Google IAM 服務帳戶

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-open-telemetry-collector-apigee-telemetry" \
            --role=roles/iam.workloadIdentityUser
  5. 安裝 Apigee Redis:

    1. 模擬測試:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查狀態,確認是否已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   79s
      
  6. 安裝 Apigee Ingress 管理工具:

    1. 模擬測試:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查可用性,確認該服務是否正常運作:

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           16s
      
  7. 安裝 Apigee 機構。如果您已在殼層中設定 $ORG_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      
    2. 安裝圖表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 檢查對應機構的狀態,確認是否已啟動並正常運作:

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      my-project-123abcd        running   4m18s
      
    4. 授予機構範圍的 Kubernetes 服務帳戶權限,模擬相關聯的 IAM 服務帳戶。
      1. 列出 apigee-martapigee-udcaapigee-watcher 元件使用的 IAM 服務帳戶電子郵件地址:

        正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-mart\|apigee-udca\|apigee-watcher"

        輸出內容應如下所示:

        apigee-mart      apigee-mart@my-project.iam.gserviceaccount.com      False
        apigee-udca      apigee-udca@my-project.iam.gserviceaccount.com      False
        apigee-watcher   apigee-watcher@my-project.iam.gserviceaccount.com   False
        

        如果您使用 Apigee Hybrid 的營利功能,請一併取得 apigee-mint-task-scheduler 服務帳戶的電子郵件地址。

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-mint-task-scheduler"

        輸出內容應如下所示:

        apigee-mint-task-scheduler   apigee-mint-task-scheduler@my-project.iam.gserviceaccount.com   False
        

        非正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-non-prod"

        輸出內容應如下所示:

        apigee-non-prod     apigee-non-prod@my-project.iam.gserviceaccount.com         False
                          
      2. 列出機構範圍的 Kubernetes 服務帳戶:
        kubectl get serviceaccount -n APIGEE_NAMESPACE | grep "apigee-connect-agent\|apigee-mart\|apigee-udca\|apigee-watcher"

        輸出內容應如下所示:

        apigee-connect-agent-my-project-123abcd         0   1h4m
        apigee-mart-my-project-123abcd                  0   1h4m
        apigee-mint-task-scheduler-my-project-123abcd   0   1h3m
        apigee-udca-my-project-123abcd                  0   1h2m
        apigee-watcher-my-project-123abcd               0   1h1m
                      
      3. 使用下列指令,授予機構範圍的 Kubernetes 服務帳戶權限,模擬相關聯的 IAM 服務帳戶,如下所示:

        正式環境

        連結代理程式 KSA:將 Kubernetes 服務帳戶 apigee-connect-agent-ORG_NAME-ORG_HASH_ID 連結至 IAM 服務帳戶 apigee-mart

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          APIGEE_MART_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-mart@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-connect-agent-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        MART KSA: apigee-mart-ORG_NAME-ORG_HASH_IDKubernetes 服務帳戶至 apigee-mart IAM 服務帳戶。MART 和 Connect 代理程式使用相同的 IAM 服務帳戶。

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          APIGEE_MART_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-mart@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-mart-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        Mint 工作排程器 KSA: (如果使用 Apigee Hybrid 營利服務)

        apigee-mint-task-scheduler-ORG_NAME-ORG_HASH_ID Kubernetes 服務帳戶對應至 apigee-mint-task-scheduler IAM 服務帳戶。

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          APIGEE_MINT_TASK_SCHEDULER_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-mint-task-scheduler@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-mint-task-scheduler-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        機構範圍的 UDCA KSA:Kubernetes 服務帳戶對應至 apigee-udca IAM 服務帳戶。apigee-udca-ORG_NAME-ORG_HASH_ID

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          APIGEE_UDCA_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-udca-task-scheduler@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-udca-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        監控程式 KSA:從 Kubernetes 服務帳戶 apigee-watcher-ORG_NAME-ORG_HASH_ID 轉換為 apigee-watcher IAM 服務帳戶。

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          APIGEE_WATCHER_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-watcher@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-watcher-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        連結代理程式 KSA:將 Kubernetes 服務帳戶 apigee-connect-agent-ORG_NAME-ORG_HASH_ID 連結至 IAM 服務帳戶 apigee-non-prod

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-connect-agent-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        MART KSA:從 Kubernetes 服務帳戶到 IAM 服務帳戶。apigee-mart-ORG_NAME-ORG_HASH_IDapigee-non-prod

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-mart-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        Mint 工作排程器 KSA: (如果使用 Apigee Hybrid 營利服務)

        apigee-mint-task-scheduler-ORG_NAME-UUIORG_HASH_IDD Kubernetes 服務帳戶對應至 apigee-non-prod IAM 服務帳戶。

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-mint-task-scheduler-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        機構範圍的 UDCA KSA:Kubernetes 服務帳戶對應至 apigee-non-prod IAM 服務帳戶。apigee-udca-ORG_NAME-ORG_HASH_ID

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-udca-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser

        監控程式 KSA:從 Kubernetes 服務帳戶 apigee-watcher-ORG_NAME-ORG_HASH_ID 轉換為 apigee-non-prod IAM 服務帳戶。

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-watcher-my-org-123abcd" \
            --role=roles/iam.workloadIdentityUser
  8. 安裝環境。

    一次只能安裝一個環境。使用 --set env=ENV_NAME 指定環境。如果您已在殼層中設定 $ENV_NAME 環境變數,可以在下列指令中使用該變數:

    1. 模擬測試:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用於追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組的名稱相同,您必須為環境和環境群組使用不同的發布名稱,例如 dev-env-releasedev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。

    2. 安裝圖表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
    3. 請檢查相應環境的狀態,確認該環境已啟動並執行:

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                       STATE     AGE   GATEWAYTYPE
      apigee-my-project-my-env   running   3m1s
      
    4. 授予環境範圍的 Kubernetes 服務帳戶權限,模擬相關聯的 IAM 服務帳戶。
      1. 列出 apigee-runtimeapigee-synchronizerapigee-udca 元件使用的 IAM 服務帳戶電子郵件地址:

        正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-runtime\|apigee-synchronizer\|apigee-udca"

        非正式環境

        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-non-prod"
        gcloud iam service-accounts list --project PROJECT_ID | grep "apigee-mart\|apigee-udca\|apigee-watcher"

        輸出內容應如下所示:

        正式環境

        apigee-runtime         apigee-runtime@my-project.iam.gserviceaccount.com         False
        apigee-synchronizer    apigee-synchronizer@my-project.iam.gserviceaccount.com      False
        apigee-udca            apigee-udca@my-project.iam.gserviceaccount.com         False
                          

        非正式環境

        apigee-non-prod     apigee-non-prod@my-project.iam.gserviceaccount.com         False
                          
      2. 列出環境範圍的 Kubernetes 服務帳戶:
        kubectl get serviceaccount -n APIGEE_NAMESPACE | grep "apigee-runtime\|apigee-synchronizer\|apigee-udca"

        輸出內容應如下所示:

        apigee-runtime-my-project--my-env-cdef123          0   19m
        apigee-synchronizer-my-project-my-env-cdef123      0   17m
        apigee-udca-my-project-123abcd                     0   1h29m
        apigee-udca-my-project-my-env-cdef123              0   22m
                      
      3. 請使用下列指令,授予環境範圍的 Kubernetes 服務帳戶權限,模擬相關聯的 IAM 服務帳戶:

        正式環境

        執行階段 KSA:KSA 至 apigee-runtime Google IAM SAapigee-runtime-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          RUNTIME_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-runtime@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-runtime-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser

        同步器 KSA: apigee-synchronizer-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa KSA 至 apigee-synchronizer Google IAM SA

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          SYNCHRONIZER_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-synchronizer@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-synchronizer-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser

        UDCA KSA: apigee-udca-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa KSA 至 apigee-udca Google IAM SA

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          UDCA_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-udca@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-udca-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        執行階段 KSA:KSA 至 apigee-non-prod Google IAM SAapigee-runtime-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-runtime-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        同步器 KSA: apigee-synchronizer-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa KSA 至 apigee-non-prod Google IAM SA

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-synchronizer-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser

        非正式環境

        UDCA KSA: apigee-udca-PROJECT_ID-ENV_NAME-ENV_HASH_ID-sa KSA 至 apigee-non-prod Google IAM SA

        程式碼

        gcloud iam service-accounts add-iam-policy-binding \
          NON_PROD_IAM_SA_EMAIL \
            --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
            --role=roles/iam.workloadIdentityUser

        範例

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-non-prod@my-project.iam.gserviceaccount.com \
            --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-udca-my-project-my-env-cdef123" \
            --role=roles/iam.workloadIdentityUser
  9. 安裝環境群組 (virtualhosts)。
    1. 一次只能安裝一個環境群組 (虛擬主機)。使用 --set envgroup=ENV_GROUP 指定環境群組。如果您已在殼層中設定 $ENV_GROUP 環境變數,可以在下列指令中使用該變數。針對 overrides.yaml 檔案中提及的每個環境群組,重複執行下列指令:

      模擬測試:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_GROUP_RELEASE_NAME 是用於追蹤 apigee-virtualhosts 圖表安裝和升級作業的名稱。這個名稱不得與安裝項目中的其他 Helm 版本名稱重複。通常與 ENV_GROUP 相同。不過,如果環境群組與安裝中的環境同名,您必須為環境群組和環境使用不同的發布名稱,例如 dev-envgroup-releasedev-env-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「 三大概念」。

    2. 安裝圖表:

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        --set envgroup=$ENV_GROUP \
        -f overrides.yaml
      
    3. 檢查 ApigeeRoute (AR) 的狀態。

      安裝 virtualhosts 會建立 ApigeeRouteConfig (ARC),Apigee 監控程式從控制層提取環境群組相關詳細資料後,ARC 會在內部建立 ApigeeRoute (AR)。因此,請檢查對應 AR 的狀態是否為執行中:

      kubectl -n APIGEE_NAMESPACE get arc
      
      NAME                                STATE   AGE
      apigee-org1-dev-egroup                       2m
      
      kubectl -n APIGEE_NAMESPACE get ar
      
      NAME                                                        STATE     AGE
      apigee-ingressgateway-internal-chaining-my-project-123abcd   running   19m
      my-project-myenvgroup-000-321dcba                            running   2m30s
      

下一步

在下一個步驟中,您將設定 Apigee Ingress 閘道,並部署 Proxy 來測試安裝作業。

(NEXT) Step 1: Expose Apigee ingress 2