新的 Apigee Hybrid 安裝和管理預先發布版


預先發布版使用者指南:
預先發布版 Apigee Hybrid 1.8 版安裝與管理程序。


本文內容:

預覽


本文適用於 Apigee 營運人員 (負責安裝/管理/管理 Apigee Hybrid 安裝作業的使用者)。如要按照本文的指示操作,您必須先在系統支援的某個 Kubernetes 平台上安裝 Apigee Hybrid。建議您建立評估 Apigee 機構,然後嘗試下列步驟。

意見回饋

如要提供這個程序的意見回饋,請傳送電子郵件至 Apigee-hybrid-install-preview@google.com


總覽

新的 Apigee Hybrid 安裝體驗會使用 kubectl 安裝 Apigee 元件,並整合 Apigee Hybrid 的安裝和管理作業,以及 Kubernetes 設定自動化調度管理工具 (例如 Kustomize)。加強驗證及顯示安裝中的元件,可提升偵錯能力,並改善整體安裝程序。

安裝指令碼 apigee-hybrid-setup.sh 提供簡單的工具,方便您進行基本安裝。您可以利用該檔案建立混合式安裝,然後使用 kubectl 進行修改,以符合需求,也可以使用 kubectl 從頭建立混合式安裝。 所有 Apigee Hybrid 設定屬性都儲存在 yaml 檔案中,每個主要元件各有一個檔案。這樣一來,您就能在 Kubernetes 環境中,更精細地控管混合式安裝作業。您可以在 GitHub 存放區中找到設定檔和安裝指令碼。

新安裝程序異動

Apigee 變更 Apigee Hybrid 安裝程序的原因如下:

  • 安裝 Apigee Hybrid 的新方法可與現有的 Kubernetes CI/CD 工具 (例如 Argo、Flux 或 Anthos Config Management) 整合,這些工具不會使用 overrides.yaml 設定檔。
  • Apigee Hybrid 提供apigeectl,這項自訂範本工具可產生 Kubernetes 資訊清單 (以及其他項目),用於在 Kubernetes 叢集中安裝及管理 Apigee Hybrid。新的安裝和管理程序與其他軟體供應商的程序類似。
  • 新程序會自動建立具備必要權限的服務帳戶、TLS 憑證、預先填入預設值和其他必要基礎元素,讓您快速完成基本安裝。

必要條件

使用這項搶先版安裝功能前,請務必符合下列先決條件:

預覽版

這個預覽版適用於 Apigee Hybrid 1.8.x 版。系統不支援 Apigee Hybrid 的後續版本。

Apigee Hybrid 設定

在實際安裝 Apigee Hybrid 之前,您應已完成本文件下列章節中列出的操作說明:

  1. 專案和機構設定
  2. Hybrid 執行階段設定

工具

此外,您還需要在工作站下載及設定下列工具:

  • curl
  • 執行 apigee-hybrid-setup.sh 指令碼時,必須具備 docker。按照「取得 Docker」頁面的操作說明安裝 Docker。
  • 大多數 Linux/UNIX 系統都應提供 envsubst。如為 macOS 和其他系統,請按照這個存放區中的操作說明操作。
  • 請安裝 jq下載 jq
  • kpt 下載 kpt

  • kubectl 1.23 以上版本。請參閱 Kubernetes 說明文件中的「安裝工具:kubectl」。

本指南中使用的常見變數

本指南會在幾個步驟中使用下列環境變數。您可以在指令列或使用指令碼定義這些變數,也可以在輸入指令時取代指令中的文字。

  • APIGEE_NAMESPACE:您的 Apigee 命名空間。預設值為 apigee。 不過,您可以使用其他命名空間。
  • CLUSTER_NAME:您要安裝 Apigee Hybrid 的叢集名稱。 這是您在「步驟 1:建立叢集」中建立的叢集。
  • CLUSTER_LOCATION:叢集所在的區域。本指南中的程序假設您使用區域叢集。如果您使用的是可用區叢集,請參閱「步驟 1:建立叢集」中的操作說明。
  • ENV_GROUP:Apigee Hybrid 安裝作業的環境群組名稱。這是您在「步驟 3:建立環境群組」中建立的環境群組。您可以建立多個環境群組。
  • ENV_NAME:Apigee Hybrid 安裝作業的環境群組名稱。這是您在「步驟 3:建立環境群組」中建立的環境群組。您可以建立多個環境群組。
  • INSTALL_DIR:您安裝 Apigee Hybrid 的目錄。根據預設,這是您下載安裝程式的目錄的 apigee-hybrid-install/ 子目錄,例如:/myhybrid/apigee-hybrid-install/。 這是 Apigee Hybrid 設定資料夾結構中記錄的檔案結構根目錄。
  • INSTANCE_DIR:特定 Apigee Hybrid 執行個體的目錄。根據預設,第一個執行個體會命名為 instance-1。執行個體目錄是 ${INSTALL_DIR}/overlays/instances/ 的子目錄。您可以為混合式執行個體指定任何名稱。請參閱「多執行個體安裝」。
  • ORG_NAME:Apigee Hybrid 機構的名稱。這必須與您的 Google Cloud 專案 ID 相同。請參閱:步驟 2:建立機構

基本 Apigee Hybrid 安裝作業

如要快速安裝 Apigee Hybrid,不必進行大量自訂作業,可以使用下列兩步驟程序。


  • 單一環境
  • 單一環境群組
  • 建立單一 Google Cloud 服務帳戶,並用於所有個別元件
  • 所有加密金鑰和密碼的預設值。

  1. 下載設定檔
  2. 執行設定

下載設定檔

複製 https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 的 GitHub 存放區,下載並準備設定檔:

  1. 複製存放區:

    git clone https://github.com/apigee/apigee-hybrid-install.git
    
  2. 前往複製存放區的目錄:

    cd apigee-hybrid-install
    
  3. 從 preview-1 標記建立分支版本:

    git branch preview-1 preview-1
    git checkout preview-1
    
  4. 將設定指令碼設為可執行狀態:

    chmod +x ./tools/apigee-hybrid-setup.sh
    

    複製的存放區結構會類似於「Apigee Hybrid 設定資料夾結構」一文所述:

執行設定

執行 tools/ 資料夾中的 apigee-hybrid-setup.sh shell 指令碼。

./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION --org $ORG_NAME --setup-all

如果發生錯誤,請嘗試再次執行指令碼。


您可能想使用的其他選項包括:

  • --env $ENV_NAME 會指定 Apigee 環境的名稱。
  • --envgroup $ENV_GROUP 指定環境群組。
  • --ingress-domain $HOSTNAME 指定您為環境群組提供的主機名稱。
  • --gcp-project-id $PROJECT_ID 指定 Google Cloud 專案的 ID。

如需更多選項,請參閱「瞭解指令碼」。

執行期間發生的任何錯誤都會以標準輸出的形式顯示。

指令碼順利完成後,您就完成了基本混合式安裝作業。您可以按照「建立及部署新的 API Proxy」一文中的詳細說明,建立範例 Proxy 來測試安裝作業。

自訂 Apigee Hybrid 安裝作業

如要進一步控管安裝作業,進階使用者可以按照下列步驟操作 (對於下列許多步驟,您可以選擇手動執行,或使用 Shell 指令碼自動執行該步驟):



下載設定檔

下載並準備設定檔:

  1. https://github.com/apigee/apigee-hybrid-install/ 複製 GitHub 存放區

    複製的存放區結構會類似於「Apigee Hybrid 設定資料夾結構」一文所述:

  2. cd 目錄中的 apigee-hybrid-install/

  3. 將設定指令碼設為可執行狀態:

    chmod +x ./tools/apigee-hybrid-setup.sh
    

建立命名空間

在叢集中建立 Kubernetes 命名空間,其中會包含所有 Apigee 叢集元件。

kubectl create namespace apigee


如果選擇其他命名空間名稱,可以選擇下列其中一個選項:

  • (建議) 在編輯資源 YAML 中預先填入值時,使用 --namespace={YOUR_NAMESPACE_NAME}
  • 執行下列兩項指令:

    1. 使用 kpt 指定 Apigee 命名空間:

      kpt fn eval "${INSTALL_DIR}/overlays/" \
        --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
        APIGEE_NAMESPACE="${APIGEE_NAMESPACE}"
      # This is for replacing the namespace in istio discoveryAddress which cannot be
      # achieved with kpt
      
    2. 使用 sed 取代 istio discoveryAddress 中的命名空間:

      sed -i -E -e "s/(discoveryAddress: apigee-ingressgateway-manager\.).*(\.svc:15012)/\1${APIGEE_NAMESPACE}\2/" "${INSTALL_DIR}/overlays/controllers/istiod/apigee-istio-mesh-config.yaml"
      
  • 或者,您也可以手動變更個別資源,在所選命名空間中建立資源。

使用私人存放區的 Docker 映像檔 (選用)

您可以選擇不使用公開託管的映像檔,改用自有私人存放區的映像檔:

  1. 第一步是將所有映像檔推送至私人存放區,方法請參閱「apigee-pull-push | Apigee X」。根據預設,映像檔會標記對應的 Apigee Hybrid 版本,建議您不要編輯這些標記。此外,我們也建議您不要編輯圖片名稱,這樣才能按照「圖片中心」的說明建構最終圖片路徑。
  2. 將 apigee-hybrid-config.yaml 檔案中的 imageHub 欄位值設為私有存放區主機路徑。(詳情請參閱圖片中心)。

    imageHub: "your.private.repo/apigee/hybrid"
    

這樣可確保所有 Apigee Hybrid 元件都使用私有存放區中的映像檔。

此外,您可能也想為「控制器」和 Apigee Ingress 閘道使用私人映像檔,為此您必須編輯 apigee-controller-deployment.yamlapigee-ingressgateway-manager-deployment.yaml 檔案,並將所有 image 欄位替換為私人存放區中的映像檔。



設定 imagePullSecrets (選用)

  1. 建立包含憑證的 Kubernetes 密鑰,用來向私人存放區驗證。請參閱「從私人登錄檔提取映像檔」,瞭解如何建立密鑰。
  2. 建立密鑰後,只要參照該密鑰即可。方法是編輯 apigee-hybrid-config.yaml 檔案,將 imagePullSecret 欄位的值設為先前建立的密鑰名稱,並在對應的 kustomization.yaml 檔案中啟用 imagePullSecret 元件。

如果您在兩個位置都指定 imagePullSecrets,系統會優先採用 apigee-controller-manager.yaml 檔案中的設定。


設定轉送 Proxy (選用)

如要設定轉送 Proxy,請在 apigee-hybrid-config.yaml 檔案中加入 forwardProxy 欄位。例如:

  forwardProxy: |
    scheme: HTTP
    host: 10.12.0.47
    port: 3128

指定 Ingress 傳輸層安全標準 (TLS) 憑證

使用指令碼

./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs

如要進一步瞭解這個標記,請參閱「瞭解指令碼」。

手動

您必須提供用於 Istio Ingress 閘道的 TLS 憑證。您可以:

我們將以自行簽署的憑證為例。您可以使用下列指令產生自行簽署的憑證 (假設 DOMAIN 已正確設定,且應與環境群組中設定的主機名稱相符):

openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650

這會建立名為 tls.keytls.crt 的兩個檔案。

接著,您需要建立下列格式的密碼。如要使用 kubectl createkubectl apply,請參閱「使用自訂憑證/金鑰配對做為憑證簽署授權單位 (選用)」一文:

apiVersion: v1
kind: Secret
metadata:
  name: "{ORG_NAME}-{ENV_GROUP_NAME}"
  namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
  cert: |
    {BASE64_ENCODED_TLS_CRT}
  key: |
    {BASE64_ENCODED_TLS_KEY}

---

使用 kubectl create 建立密鑰的範例:

kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
  --cert="tls.crt" \
  --key="tls.key" \
  -n {$APIGEE_NAMESPACE}


更新 Ingress 部署作業

如要建立/修改 Ingress 部署作業,您需要在 bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml 中修改 ApigeeOrganization 自訂資源的 spec.components.ingressGateways 欄位。

根據預設,我們會使用預設參數建立一個 Ingress 部署作業(預設值會顯示在 CR 參考文件 中):

ingressGateways:
- name: "prod-1"

範例:

A. 覆寫 Ingress 服務欄位

ingressGateways:
- name: "prod-1"
  serviceSpec:
    annotations:
      {KEY}: ${VALUE}
    loadBalancerIP: ${IP}

B. 變更備用資源數量下限/上限

ingressGateways:
- name: "prod-1"
  ​​autoScaler:
    minReplicas: 4
    maxReplicas: 10

C. 新增 Ingress 部署作業

ingressGateways:
- name: "prod-1"
- name: "prod-2"

設定自訂 Google Cloud 服務帳戶



使用指令碼

./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets  --namespace APIGEE_NAMESPACE

其中 APIGEE_NAMESPACE 是自訂命名空間。預設命名空間為 apigee

如要進一步瞭解標記,請參閱「瞭解指令碼」。

手動

Google Cloud 服務帳戶金鑰必須以密鑰形式儲存在叢集中。密鑰 YAML 應具有下列結構:

apiVersion: v1
kind: Secret
metadata:
  name: "{NAME}"
  namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
  client_secret.json: |
    {BASE64_ENCODED_SA_KEY}

如要進一步瞭解所有必要服務帳戶和密鑰名稱,請參閱「Google Cloud 服務帳戶」一節。

您可以選擇其他密鑰名稱,但必須在該密鑰名稱使用的元件中進行相應變更。舉例來說,如果您決定將執行階段服務帳戶密鑰的名稱從 apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} 變更為 my-runtime-svc,就必須在該環境的 apigee-environment.yaml 中進行相應變更



使用工作負載身分


您必須設定自訂 Google Cloud 服務帳戶或使用工作負載身分。


必要條件

使用工作負載身分前,請確認 GKE 叢集已啟用支援功能。詳情請參閱「更新節點集區 | Apigee X」。

啟用 Workload Identity

如要瞭解如何在安裝前啟用工作負載身分,請參閱「Kustomize and Components」(Kustomize 和元件) 下的「Workload identities」(工作負載身分) 一節。

編輯資源 YAML

在元件 YAML 中,有些位置必須有正確的機構、環境和環境群組名稱。您可以手動設定這些值,也可以使用 Shell 指令碼自動填入這些值。

使用指令碼

./tools/apigee-hybrid-setup.sh --fill-values

建立初始化資源和控制器

#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml

#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress

# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers

# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m

# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml

將與控制層互動的權限授予 Synchronizer 服務帳戶

按照「步驟 8:啟用同步處理工具存取權」一節中的步驟操作,將服務帳戶名稱 (apigee-non-prodapigee-synchronizer) 替換為 apigee-all-sa,也就是新安裝程序建立的服務帳戶名稱。


★ 重要事項:請務必按照「啟用同步器存取權」一節中的操作說明,變更服務帳戶名稱。否則啟用同步處理工具存取權會失敗。


建立 Apigee 資料平面元件

如果您在先前的步驟中變更了任何資源的名稱,則必須在參照該資源的其他 YAML 檔案中進行相應變更。完成後,請使用下列範例中的指令:

# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

安裝所有元件。

等待資源啟動

kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m

在自訂命名空間中自訂 cert-manager 的安裝作業

如要自訂 cert-manager 的執行命名空間,請按照下列程序操作。

如果 cert-manager 安裝在叢集中,且命名空間不是 cert-manager,您需要更新用於建立 Apigee 根憑證的命名空間。

  1. 編輯 customization.yaml 檔案,建立憑證:$INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml
  2. 在檔案結尾加入下列內容。

    - patch: |-
    - op: replace
      path: /metadata/namespace
      value: "gk-cert-manager"
    target:
    group: cert-manager.io
    version: v1
    kind: Certificate
    name: apigee-root-certificate
    
  3. 儲存檔案

Kustomize 和元件

總覽

新的混合式安裝作業會沿用 Kustomize 的理念,以「基礎」和「疊加」的形式建構 YAML

  • 基底是 Apigee 提供的檔案,可能會隨著每個新 Hybrid 版本而異。您不需要修改這些檔案。這些檔案包含 Apigee 提供的部分預設值。頂層 bases/ 資料夾下的所有檔案都包含這些 Base
  • 疊加層會保留使用者設定,並做為修改 Base 中指定預設值的方法。頂層 overlays/ 資料夾下的所有檔案都包含這些疊加層



如何使用元件

頂層 overlays/ 目錄中的子資料夾經過結構化處理,因此您可以在 kustomization.yaml 檔案中註解 (或取消註解) 特定行,啟用 (或停用) 某些額外功能。

舉例來說,overlays/instances/{INSTANCE_NAME}/telemetry 資料夾結構如下所示:

telemetry
├── components
   ├── http-proxy
   ├── imagepullsecret
   ├── logger
   ├── metrics
   ├── nodeselector
   ├── openshift-scc
   ├── workload-identity-logger
   └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml

telemetry/kustomization.yaml 檔案的預設外觀可能如下所示:

resources:
- apigee-telemetry.yaml

components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc

我們可以看到 ./components/logger 已註解,這表示我們預設未啟用 uGoogle Clod 記錄器。如要啟用該功能,只要取消註解該行即可,如下所示:

components:

- ./components/logger

同樣地,如要停用指標,可以註解排除 ./components/metrics 行:

...
components:
...
# - ./components/metrics
…

以下各節將說明所有這類各種元件、使用時機和設定方式。

OpenShift

如要在 OpenShift 叢集中安裝 Apigee Hybrid,您可能需要先啟用幾個元件/資源,才能執行安裝作業。(如果您未使用指令碼執行安裝作業,則必須執行這項步驟)。需要修改的檔案如下:

  • overlays/initialization/openshift/kustomization.yaml。 在 resources: 區段下方,取消註解:

    # - ../../../bases/initialization/openshift/
    
  • overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yaml 取消註解:

    # - ./components/openshift-scc
    

    並取消註解「components:」欄位 (如果仍為註解)。

  • overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yaml 取消註解:

    # - ./components/openshift-scc
    

    並取消註解「components:」欄位 (如果仍為註解)。

接著,請按照安裝步驟操作。

imagepullsecret

如果私人存放區中儲存了映像檔,即可啟用這個元件。如要從私人存放區提取映像檔,您可以建立 Kubernetes 密鑰,其中包含驗證詳細資料,然後在該密鑰內參照這項密鑰。如需操作說明,請參閱「設定 imagePullSecrets (選用)」一文。詳情請參閱 Kubernetes 說明文件中的「從私有登錄檔提取映像檔 | Kubernetes」。

語言:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

啟用:

視需要取消註解各個 kustomization.yaml 檔案中的「./components/imagepullsecret/」行。

要進行的修改:

  • components/imagepullsecret/patch.yaml
    • 必要:在 spec.template.spec.imagePullSecrets 中將相關密鑰名稱新增至清單

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

nodeselector

這個元件可讓您在特定節點上排定 Apigee 資源的 Pod。詳情請參閱「將 Pod 指派給節點 | Kubernetes」。

語言:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

啟用:

視需要取消註解各個 kustomization.yaml 檔案中的「./components/nodeselector」行。

要進行的修改:

  • components/nodeselector/patch.yaml
    • 選用:將節點選取器標籤的值從 apigee-runtimeapigee-data 變更為所需值。

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

workload-identity

Apigee Hybrid 生態系統中的各種容器需要權限,才能對 Apigee Control Plane / Management Plane 發出特定 API 呼叫。Workload Identity 是授予 Pod (和其中的容器) 這些權限的方法之一。如要進一步瞭解這項功能,請參閱下列實用資源: - 推出 Workload Identity:為 GKE 應用程式提供更完善的驗證機制 | Google Cloud 網誌 - 使用 Workload Identity | Kubernetes Engine 說明文件 | Google Cloud

語言:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

必要條件:

如要使用 Workload Identity,您必須先透過下列方式,在 Google Cloud 專案中授予相關權限:

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
        ${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com

其中: - ${ORG_NAME} - Apigee 機構的名稱。 - ${APIGEE_NAMESPACE}:安裝 Apigee 元件的 Kubernetes 命名空間。通常是 apigee,除非使用者在安裝期間明確變更 - ${KSA_NAME} - Kubernetes 命名空間的名稱。您需要為「Kubernetes 服務帳戶」中提及的每個 Kubernetes 服務帳戶執行這項指令。 - ${GSA_NAME} - Google Cloud 服務帳戶的名稱。如果您在安裝期間未進行任何變更,這個值會是 apigee-all-sa。如果您為個別元件設定多個 Google Cloud 服務帳戶,則必須將 KSA_NAME 與對應的 GSA_NAME 相符。您可以比較「Google Cloud 服務帳戶」和「Kubernetes 服務帳戶」中的表格,找出對應項目。

啟用:

視需要取消註解各 kustomization.yaml 檔案中的 ./components/workload-identity 行。請注意,在遙測中,我們為 metricslogger 元件提供個別的工作負載身分增效工具,可分別啟用。

用法:

  1. 如果您尚未安裝混合式叢集,只要按照上一節所述啟用 Workload Identity,然後繼續安裝,系統就會自動使用 Workload Identity。
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-proxy

您可以在下列每個元件中設定 Proxy 伺服器,讓該元件的流量通過為該元件設定的 HTTP Proxy。您可以個別設定每個 Apigee 元件的 Proxy。

語言:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/telemetry

啟用:

視需要取消註解各個 kustomization.yaml 檔案中的「./components/http-proxy/」行。

要進行的修改:

  • components/http-proxy/patch.yaml 下列參數可在 spec.httpForwardProxy
    • scheme必要欄位HTTPHTTPS 其中之一
    • host必要,Proxy 的主機位址
    • port必要的通訊埠號碼
    • username選用 與 Proxy 相關聯的使用者名稱
    • password選用,用來存取 Proxy 的密碼

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

記錄器和指標

您可以在疊加/執行個體/{INSTANCE_NAME}/遙測中,個別啟用或停用記錄器或指標。記錄器預設為停用,指標則為啟用。如要啟用或停用這些功能,只要在 telemetry/kustomization.yaml 中取消註解或註解其行即可

gcs-backup 和 gcs-restore

這個 kustomize 元件可用於將 Cassandra 資料庫備份到 Google Cloud Storage,以及從 Google Cloud Storage 還原 Cassandra 資料庫。

語言:

  • overlays/instances/{INSTANCE_NAME}/datastore

必要條件:

  1. 下載具有 Storage 物件管理員角色的帳戶的 Google Cloud 服務帳戶金鑰。

    • 如果您使用指令碼執行安裝作業,且未使用工作負載身分,可以重複使用指令碼建立的 service-accounts 資料夾中下載的金鑰。
    • 您也可以使用 create-service-account.sh 指令碼建立新的服務帳戶並下載金鑰:

      ./tools/create-service-accounts=.sh --env prod --profile apigeecassandra
      
  2. 下載金鑰後,您需要建立名為 apigee-cassandra-backup-and-restore-gcp-sa-key 的 Kubernetes Secret,方法是使用下列指令:

    kubectl create secret generic "apigee-cassandra-backup-and-restore-gcp-sa-key" \
              --from-file="dbbackup_key.json=${PATH_TO_SA_KEY}" \
              -n "${APIGEE_NAMESPACE}"
    

    其中:

    • ${PATH_TO_SA_KEY}:含有服務帳戶金鑰的檔案路徑。
    • ${APIGEE_NAMESPACE} - 安裝 Apigee 元件的 Kubernetes 命名空間。除非在安裝期間明確變更,否則通常是 apigee

或者,您也可以使用範本檔案 templates/secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml 建立這個密鑰。

啟用:

  • 如要啟用備份功能,請取消註解 datastore kustomization.yaml 檔案中的「./components/gcs-backup」行。
  • 如要還原備份,請取消 datastore kustomization.yaml 檔案中的「./components/gcs-restore」行註解。

僅修改備份

  • components/gcs-backup/apigee-datastore-patch.yaml
    • 必要:變更 DATABASE_STORAGE_BUCKET 環境變數的值 (格式為 gs://BUCKET_NAME),並指向需要備份資料的 Google Cloud Storage 值區。說明與這裡所述的 dbStorageBucket 相符。
  • components/gcs-backup/cron-patch.yaml
    • 必要:變更 spec.schedule,指定備份頻率。這個欄位接受標準 Crontab 排程格式。說明符合這裡所述的排程。
    • 必要:變更 DATABASE_STORAGE_BUCKET 環境變數的值 (格式為 gs://BUCKET_NAME),並指向需要備份資料的 Google Cloud Storage 值區。說明與這裡所述的 dbStorageBucket 相符。
    • 選用:變更 HTTP_PROXY_URL 的值,指向已設定的 Proxy。格式如下:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS>:${HOST_PORT}

執行備份

您可以使用下列指令執行備份:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

如要套用變更並啟用備份功能,請按照下列步驟操作:

僅適用於還原的修改項目

  • components/gcs-restore/apigee-datastore-patch.yaml
    • 必要:變更 DATABASE_STORAGE_BUCKET 環境變數的值,該值會採用 gs://BUCKET_NAME 形式,並指向需要備份資料的 Google Cloud Storage 值區。說明與這裡所述的 dbStorageBucket 相符。
  • components/gcs-restore/job-patch.yaml
    • 必要:變更 DATABASE_STORAGE_BUCKET 環境變數的值,該變數會採用 gs://BUCKET_NAME 形式,並指向需要備份資料的 Google Cloud Storage 值區。
    • 必要:變更 BACKUP_SNAPSHOT_TIMESTAMP 環境變數的值。 說明與還原:snapshotTimestamp 如本文所述
    • 選用:變更 HTTP_PROXY_URL 的值,指向已設定的 Proxy。格式如下:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

執行還原作業:

如要瞭解還原備份的背景資訊,請參閱「還原備份 | Apigee X | Google Cloud」。

  1. 建立新的 Kubernetes 叢集和命名空間,用於還原混合式執行階段部署作業。您無法使用原始混合式安裝作業所用的叢集和命名空間。
  2. 除了您想要的任何其他設定外,請使用上述設定安裝 Hybrid 到新叢集:

    • 您可以選擇使用基本安裝,並在新命名空間中安裝 Hybrid:
    ./tools/apigee-hybrid-setup.sh \
    --cluster-name $CLUSTER_NAME \
    --cluster-region $CLUSTER_LOCATION \
    --namespace ${NEW_APIGEE_NAMESPACE}
    
  3. 還原完成後,即可刪除舊命名空間中的所有資源,並切換至新命名空間。

詳情請參閱「還原備份」。

non-gcs-backup 和 non-gcs-restore

這個 kustomize 元件可用於將 Cassandra 資料庫備份到 Google Cloud Storage,以及從 Google Cloud Storage 還原 Cassandra 資料庫。

語言:

  • overlays/instances/{INSTANCE_NAME}/datastore

必要條件:

  1. 您可以參考設定伺服器和 SSH 的現有文件。
  2. 在上述步驟中,您需要使用安全殼層私密金鑰,該金鑰位於按照先前步驟產生的「ssh_key」檔案中。接著,我們會建立名為 apigee-cassandra-backup-and-restore-gcp-sa-key 的 Kubernetes 密鑰,其中包含這個 SSH 私密金鑰。



    您可以使用下列指令建立 Kubernetes Secret:

    kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \
            --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \
            -n "${APIGEE_NAMESPACE}"
    

    其中:

    • ${PATH_TO_SSH_PRIVATE_KEY} - 包含 SSH 私密金鑰的檔案路徑
    • ${APIGEE_NAMESPACE} - 安裝 Apigee 元件的 Kubernetes 命名空間。除非在安裝期間明確變更,否則通常是 apigee

    或者,您也可以使用範本檔案 templates/secret-apigee-cassandra-backup-and-restore-key-file.yaml 建立這個密鑰。

啟用:

  • 如要啟用備份功能,請取消 datastore kustomization.yaml 檔案中的「./components/non-gcs-backup」行註解。
  • 如要還原備份,請取消註解 datastore kustomization.yaml 檔案中的「./components/non-gcs-restore」行。

僅修改備份

  • components/non-gcs-backup/apigee-datastore-patch.yaml
    • 必要:變更 BACKUP_SERVER_IP 的值。說明與這裡所述的 BACKUP_SERVER_IP 相符。
    • 必要:變更 BACKUP_STORAGE_DIR 的值。說明與這裡所述的 BACKUP_STORAGE_DIR 相符。
  • components/non-gcs-backup/cron-patch.yaml
    • 必要:變更 spec.schedule,指定備份頻率。這個欄位接受標準 Crontab 排程格式。說明符合這裡所述的排程。
    • 必要:變更 BACKUP_SERVER_IP 的值。說明與這裡所述的 BACKUP_SERVER_IP 相符。
    • 必要:變更 BACKUP_STORAGE_DIR 的值。說明與這裡所述的 BACKUP_STORAGE_DIR 相符。
    • 選用:變更 HTTP_PROXY_URL 的值,指向已設定的 Proxy。格式如下:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

執行備份

您可以使用下列指令執行備份:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

如要套用變更並啟用備份功能,請按照下列步驟操作:

僅修改備份

  • components/non-gcs-restore/apigee-datastore-patch.yaml
    • 必要:變更 BACKUP_SERVER_IP 的值。說明符合BACKUP_SERVER_IP 這裡的說明
    • 必要:變更 BACKUP_STORAGE_DIR 的值。說明符合BACKUP_STORAGE_DIR 這裡的說明
  • components/non-gcs-restore/job-patch.yaml
    • 必要:變更 BACKUP_SNAPSHOT_TIMESTAMP 環境變數的值。說明符合restore:snapshotTimestamp 這裡的說明
    • 必要:變更 BACKUP_SERVER_IP 的值。說明符合BACKUP_SERVER_IP 這裡的說明
    • 必要:變更 BACKUP_STORAGE_DIR 的值。說明符合BACKUP_STORAGE_DIR 這裡的說明
    • 選用:將 HTTP_PROXY_URL 的值變更為指向已設定的任何 Proxy。格式如下:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

執行還原作業:

如要瞭解如何還原備份,請參閱「Cassandra 還原總覽」。

  1. 建立新的 Kubernetes 叢集和命名空間,用於還原混合式執行階段部署作業。您無法使用原始混合式安裝作業所用的叢集和命名空間。
  2. 使用上述設定安裝 Hybrid 到新叢集,並視需要調整其他設定: 您可以選擇使用基本安裝方式,並在新命名空間中安裝 Hybrid:

    ./tools/apigee-hybrid-setup.sh \
      --cluster-name $CLUSTER_NAME \
      --cluster-region $CLUSTER_LOCATION \
      --namespace ${NEW_APIGEE_NAMESPACE}
    

    或者,按照自訂 Apigee Hybrid 安裝程序,根據您的選擇設定項目。

  3. 還原完成後,即可刪除舊命名空間中的所有資源,並切換至新命名空間。

    詳情請參閱「在遠端伺服器上排定備份作業」。

http-client

如需操作說明,請參閱「啟用 HTTP 用戶端 | Apigee」。

語言:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

啟用:

在對應的 route-config/${ENV_GROUP}/kustomization.yaml 檔案中,取消註解「./components/http-client」行

要進行的修改:

  • 不需要進行任何強制修改。

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

non-sni-client

等同於現有的「如何設定非 SNI 用戶端 | Apigee」。

語言:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

啟用:

在對應的 route-config/${ENV_GROUP}/kustomization.yaml 檔案中,取消註解「./components/non-sni-client」行

要進行的修改:

  • components/non-sni-client/apigee-route.yaml

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

如需操作說明,請參閱「啟用非 SNI 和 HTTP 用戶端支援 | Apigee」。

啟用:

在對應的 route-config/${ENV_GROUP}/kustomization.yaml 檔案中,取消註解「./components/http-and-non-sni-client」行

要進行的修改:

  • components/http-and-non-sni-client/apigee-route.yaml

用法:

  1. 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
  2. 如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

多區域

設定多區域 Cassandra 部署作業時,可以使用這個元件。詳情請參閱「GKE 和 GKE On-Prem 的多區域部署」一文。

啟用:

datastore/kustomization.yaml 檔案中取消註解「./components/multi-region」行

要進行的修改:

  • components/multi-region/cassandra-data-replication.yaml

    • 必要 source.region 用於複製資料的來源 Cassandra 資料中心名稱。您可以在來源叢集中使用下列指令來識別:
    kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'
    
  • components/multi-region/patch.yaml

    • 必要 spec.components.properties.multiRegionSeedHost 任何來源 Cassandra Pod 的 Pod IP。我們可以使用的工具包括:
    kubectl get pods -n ${APIGEE_NAMESPACE} -o wide
    
    • 如要列出所有 Pod 並取得任何 Cassandra Pod 的 IP,請使用下列指令:
    kubectl get pods -o wide -n apigee
    

    輸出內容應如下所示:

    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
    

詳情請參閱「GKE、GKE On-Prem 和 AKS 的多區域部署」一文中的「GKE 的必備條件」:

用法:

如果您要在新叢集中設定 Apigee Hybrid,且已擁有另一個可正常運作的 Apigee Hybrid 設定,使用這個元件就很有意義。

  1. 新叢集和現有叢集都必須使用相同的 TLS 憑證,才能確保 Cassandra Pod 之間的通訊正常運作。因此,我們需要從現有叢集複製 apigee-root-certificate 密碼,並在新叢集中使用:
  2. 執行作業:

    kubectl config get-contexts
    
    • 如要取得所有 Kubernetes 環境的清單,然後執行
    kubectl config use-context SOURCE_CLUSTER_CONTEXT
    

    其中 SOURCE_CLUSTER_CONTEXT 是來源 Kubernetes 叢集環境的名稱。

  3. 將根憑證密碼儲存在檔案中:

    kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
    
  4. 將叢集環境切換至要安裝 Apigee Hybrid 的新叢集。

    kubectl config use-context ${NEW_CLUSTER_CONTEXT}
    
  5. 在新叢集中建立根層級密鑰:

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  6. 禁止建立新的根憑證。這樣可確保我們不會建立新的 apigee-root-certificate,並覆寫上一個步驟中建立的 apigee-root-certificate

  7. overlays/initialization/certificates/kustomization.yaml 檔案中取消註解下列程式碼行:

    # components:
    # - ./components/disable-apigee-root-certificate-generation
    
  8. 繼續進行其餘的 Apigee Hybrid 安裝程序,您可以選擇使用基本 Apigee Hybrid 安裝自訂 Apigee Hybrid 安裝。舉例來說,按照「基本 Apigee Hybrid 安裝」一文的說明操作後,您可以執行下列指令:

    ./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
    
  9. 使用下列指令驗證重建狀態。



    kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    
  10. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小:

    kubectl logs apigee-cassandra-default-0 -f -n ${APIGEE_NAMESPACE}
    kubectl exec apigee-cassandra-default-0 -n ${APIGEE_NAMESPACE}  -- nodetool -u ${JMX_USER} -pw ${JMX_PASSWORD} status
    
  11. 使用下列指令驗證重建狀態。



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
      "state": "complete",
      "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
      "state": "complete",
      "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
      "state": "complete",
      "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
    

    另請參閱「多區域部署作業」。

  12. components/multi-region/patch.yaml 移除下列程式碼行:

      properties:
        multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
    
  13. 套用變更:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

概念

圖片中心

Docker 容器映像檔通常以以下格式指定:

${REGISTRY_HOST_PATH}/${IMAGE_NAME}:${IMAGE_TAG}

或使用摘要的項目,例如:

${REGISTRY_HOST_PATH}/${IMAGE_NAME}@${DIGEST}

Apigee 使用「映像檔中心」的概念,在上述格式中是指 ${REGISTRY_HOST_PATH}。Image Hub 的預設值為 gcr.io/apigee-release/hybrid/

(使用 DIGEST 的圖片必須在每個子元件中個別設定)

Apigee 會結合下列值,建構最終圖片路徑:

  • 「Image Hub」,可在 apigee-hybrid-config.yaml 中覆寫 (如需如何覆寫 Image Hub 的詳細步驟,請參閱「使用私人存放區的 Docker 映像檔」一節)。
  • IMAGE_TAG 的值是從 version 欄位取得,該欄位位於每個個別元件的 yaml 檔案中 (例如 apigee-organization.yaml)。Apigee 會使用 Apigee Hybrid 版本標記映像檔,也就是說,Apigee Hybrid 1.8 版的標記為 IMAGE_TAG 1.8
  • IMAGE_NAME 是從要使用映像檔的容器名稱隱含決定。舉例來說,如果是 apigee-runtime 容器,IMAGE_NAME 會是 apigee-runtime。

因此,圖片路徑的完整範例為 gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0

這樣一來,系統就會建構最終的映像檔路徑,並在各自 Pod 的每個容器中使用。

Google Cloud 服務帳戶

Google Cloud 服務帳戶是應用程式用來向 Google API 進行授權呼叫的帳戶。您可以下載 Google Cloud 服務帳戶金鑰,用於驗證。Apigee 預期使用者會建立密鑰來提供服務帳戶金鑰。以下是元件名稱,以及元件尋找服務帳戶金鑰的密鑰預設名稱:

元件 子元件 包含服務帳戶金鑰的預設 Kubernetes Secret 名稱
機構
connectAgent apigee-connect-agent-gcp-sa-key-${ORG_NAME}
watcher apigee-watcher-gcp-sa-key-${ORG_NAME}
mart apigee-mart-gcp-sa-key-${ORG_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}
ingressGateways 不適用
環境
執行階段 apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
同步器 apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
遙測
個指標 apigee-metrics-gcp-sa-key
containerLogs apigee-logger-gcp-sa-key

Kubernetes 服務帳戶

Kubernetes 服務帳戶會為叢集中的 Pod 提供身分。根據預設,Apigee 控制器會為您建立這些項目。不過,如要覆寫建立作業 (例如使用 工作負載身分時),可以在各種子元件中指定 podServiceAccountName 欄位。

啟用工作負載身分修補程式時,可指定 Kubernetes 服務帳戶的元件清單及其各自的子元件,以及 k8s 服務帳戶的預設名稱。

元件 子元件 預設名稱 (啟用 Workload Identity 修補程式後即可使用)
機構
connectAgent apigee-connect-agent-svc-account-${ORG_NAME}
watcher apigee-watcher-svc-account-${ORG_NAME}
mart apigee-mart-svc-account-${ORG_NAME}
udca apigee-udca-svc-account-${ORG_NAME}
環境
同步器 apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME}
執行階段 apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME}
datastore
cassandra apigee-datastore-svc-account
遙測
metricsApp apigee-metricsApp-svc-account
metricsProxy apigee-metricsProxy-svc-account
metricsAdapter apigee-metricsAdapter-svc-account
containerLogs apigee-container-logs-svc-account

工作負載身分

透過工作負載身分,在 GKE 中執行的 Pod (使用 Kubernetes 服務帳戶) 可直接向 Google Cloud API 進行驗證,無須使用 Google Cloud 服務帳戶金鑰。

新增環境

.
├── ...
├── instances/instance1/components
│   ├── ...
│   ├── environments
│   │   ├── dev
│   │   │   └── apigee-environment.yaml
│   │   │   └── secrets.yaml
│   │   └── new-env-name (new)
│   │       └── apigee-environment.yaml (new)
│   │       └── secrets.yaml (new)
└── ...

新增環境非常簡單,只要:

  1. 在環境目錄中建立新資料夾 (或您設定的資料夾結構)
  2. 將現有環境中的 apigee-environment.yaml 檔案複製到新資料夾。
  3. 如要為新環境建立新的服務帳戶和加密金鑰,請將 secrets.yaml 複製到新資料夾,並適當重新命名密鑰,以便與其他現有環境區分 (通常是在結尾加上環境名稱)
  4. apigee-environment.yaml 進行適當變更,例如:
    • 變更環境名稱
    • 如果將建立新的服務帳戶和加密金鑰,則必須在 YAML 中正確參照這些項目。
  5. 套用 yaml
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml

在 Apigee Datastore 中使用強制刪除功能

如果資料存放區刪除作業因故無法繼續進行,現在可以使用下列指令強制刪除 apigee 資料存放區,無論叢集目前處於何種狀態。





  1. 刪除 apigee 命名空間中的 apigeeds

    Kubectl delete -n apigee apigeeds default
    

    如果這個步驟停滯不動,請按 CTRL + C 鍵退出。

  2. 編輯新的 apigeeds

    Kubectl edit -n apigee apigeeds default
    
  3. 在 Apigee 資料儲存庫規格中新增/更新 forceDelete 欄位

    spec:
    forceDelete: true
    
  4. 儲存檔案並結束。

現在請等待資料存放區刪除完成。刪除所有 Cassandra 資源可能需要幾分鐘的時間。

瞭解指令碼

apigee-hybrid-setup.sh 指令碼會執行一些基本驗證,並協助自動執行步驟,否則您必須執行這些步驟,才能進行更詳細的自訂作業,如「自訂 Apigee Hybrid 安裝作業」一文所述。即使是自訂安裝,您還是可以部分使用指令碼,協助完成特定工作。

您可以執行 ./tools/apigee-hybrid-setup.sh --help 查看支援的標記清單,並取得指令碼的額外協助。目前支援的標記如下:

  • --namespace 根據預設,指令碼會安裝 apigee 命名空間中的所有元件。如要變更這項行為,請使用這個標記指定命名空間的名稱。
  • --org 用於提供 Apigee 機構的名稱。如未指定,預設值為目前在 gcloud 中選取的 Google Cloud 專案。
  • --envgroup 用於提供貴機構內環境群組的名稱。如果未指定,系統會嘗試查詢控制平面 API,判斷環境群組的名稱。如果找到多個環境群組,系統會傳回錯誤並結束指令碼。
  • --env 用於提供貴機構內環境的名稱。如果未指定,系統會嘗試查詢控制平面 API,判斷環境名稱。如果找到多個環境,或環境不屬於環境群組,系統會傳回錯誤並結束指令碼。
  • --cluster-name Kubernetes 叢集名稱。
  • --cluster-region Kubernetes 叢集所在的地區
  • --gcp-project-id Kubernetes 叢集所在的 Google Cloud 專案 ID
  • --ingress-domain 指定用於為 Istio Ingress 閘道產生自行簽署 TLS 憑證的主機名稱/網域名稱。如未指定,系統會嘗試查詢控制層 API,從 envgroup 取得值,以判斷值。如果判斷 envgroup 時發生問題,或為 envgroup 設定多個主機名稱,系統會傳回錯誤並結束指令碼。
  • --generate-internal-tls-certs 這會產生名為 apigee-ca 的 Kubernetes 密鑰,其中包含我們產生的憑證和金鑰組。
  • --create-ingress-tls-certs 這會在 istio-system 命名空間中產生名為 {ORG_NAME}-{ENV_GROUP_NAME} 的密鑰 (衍生自機構和環境群組名稱),其中包含用於 TLS 通訊的憑證和金鑰組。用於產生這些憑證的網域名稱,是從 envgroup 設定中的值衍生而來。如有衝突 (例如找到多個網域),系統會顯示適當的錯誤訊息。
  • --create-gcp-sa-and-secrets 在 Google Cloud 專案中建立單一 Google Cloud 服務帳戶、下載金鑰,然後建立包含金鑰的 Kubernetes 密鑰。您可以在 Google Cloud 服務帳戶中找到密鑰名稱。
  • --fill-values 在各種 YAML 中需要使用機構、環境、環境群組和其他名稱時,會替換這些名稱的值。
  • --apply-configuration 這會建立憑證簽發者、自訂資源定義、Webhook、角色和控制器資源。系統會依正確順序建立資源,並封鎖指令,直到所有資源都正常運作。
  • -- rename-directories 將環境和環境群組重新命名為正確的環境和環境群組名稱。
  • --verbose 顯示詳細的偵錯輸出內容。
  • --help 顯示使用資訊。
  • --setup-all 這會執行這項指令碼可執行的所有工作

Apigee Hybrid 設定資料夾結構

根據預設,apigee-hybrid-setup 資料夾具有下列階層式結構:

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── apigee-ingressgateway-manager
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   ├── datastore
      └── backup-and-restore
          ├── backup
             ├── cronjob.yaml
             └── kustomization.yaml
          ├── common
             ├── kustomization.yaml
             ├── rbac.yaml
             └── tls-certificate.yaml
          └── restore
              ├── job.yaml
              └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
   └── api_references
       ├── v1alpha1.md
       └── v1alpha2.md
├── kokoro
   ├── build.sh
   ├── common.cfg
   ├── continuous.cfg
   ├── presubmit.cfg
   └── release.cfg
├── LICENSE
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── apigee-ingressgateway-manager
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate-patch.yaml
         ├── apigee-serving-cert-patch.yaml
         ├── components
            └── disable-apigee-root-certificate-generation
                └── kustomization.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         ├── envoyfilter-1.11.yaml
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-ingressgateway-manager
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── multi-region
                    ├── cassandra-data-replication.yaml
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── non-gcs-backup
                    ├── apigee-datastore-patch.yaml
                    ├── cron-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── non-gcs-restore
                    ├── apigee-datastore-patch.yaml
                    ├── job-patch.yaml
                    ├── kustomization.yaml
                    └── tls-certificate-patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── kustomization.yaml
                         ├── patch.yaml
                         └── service-accounts.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── kustomization.yaml
                     ├── patch.yaml
                     └── service-accounts.yaml
                  └── workload-identity-metrics
                      ├── kustomization.yaml
                      ├── patch.yaml
                      └── service-accounts.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── certificate-org-envgroup.yaml
   ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
   ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
   ├── secret-gcp-sa-key.yaml
   └── secret-ingress-tls-cert-key.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── apigee-pull-push.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

您可以在 GitHub 存放區的 preview-1 標記中找到上述檔案的版本:https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1

上述資料夾包含 Apigee Hybrid 執行階段的 Kubernetes 資訊清單,並使用 Kustomize 進行設定管理。資訊清單是根據 Kustomize 基礎和疊加層的概念整理。bases 資料夾包含每個 Apigee 元件所需的基本設定。疊加層資料夾包含多項額外功能(設定),這些功能定義為元件。如要啟用元件,請取消註解 kustomization.yaml 中的元件參照。

範例:如要為 Apigee 資料儲存區啟用 gcs-backup,請取消以下 customization.yaml 中 gcs-backup 元件的註解。

路徑: ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml

namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}

resources:
- apigee-datastore.yaml

components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore

如要自訂任何值,都必須在 gcs-backup 的對應 patch.yaml 中設定。 在下方檔案中,CLOUD_STORAGE_BUCKET_PATH 的值必須由使用者設定

路徑: $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: apigee-cassandra-backup
  namespace: apigee
spec:
  schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: apigee-cassandra-backup
            env:
            - name: APIGEE_CLOUDPROVIDER
              value: "GCP"
            - name: DATABASE_STORAGE_BUCKET
              value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
            volumeMounts:
            - name: apigee-cassandra-backup
              mountPath: /var/secrets/google
          volumes:
          - name: apigee-cassandra-backup
            secret:
              secretName: "apigee-cassandra-backup-and-restore-svc-account"

同樣地,如要啟用任何需要自訂的設定/功能,只要取消註解 apigee 元件的 kustomization.yaml 中的元件即可。此外,您也必須視需要為元件 patch.yaml 中的欄位設定對應值。

資料夾和檔案簡要說明:

這個資料夾包含範本,其中含有各個 Apigee 元件所需的基本設定。這個資料夾中的資訊清單不需要修改。

疊加層

這個資料夾包含其他設定的 kustomize 元件範本

初始化

namespaces.yaml

Apigee 資料平面元件的安裝命名空間。預設命名空間名稱為 apigee

憑證

內含用於向 Webhook 核發憑證的 IssuerCertificate 資源。也包含 Issuer,用於向各種 Pod 發放憑證,以進行 TLS 通訊。

rbac

包含各種元件會使用的 RoleClusterRoleRoleBindingClusterRoleBinding

crds
    Contains the definition of all the CRDs which are used by Apigee.
webhook

包含 ValidatingWebhookConfigurationMutatingWebhookConfiguration,用於對自訂資源執行驗證。

輸入

包含適用於所有 Ingress POD 的設定。例如:常見的標頭修改、健康狀態檢查等。

openshift

包含 openshift SecurityContextConstraints 的定義。

控制器

apigee-controller
apigee-hybrid-config.yaml

包含 ConfigMap,該 ConfigMap 會以輸入內容的形式提供給 apigee-controller-manager.yaml。這個 ConfigMap 包含 imageHubimagePullSecretsforwardProxy 等設定。

apigee-controller-deployment.yaml

包含控制器和 Webhook 的兩項服務,以及控制器的部署作業。如要為控制器使用私人映像檔,請在此處進行變更。

istiod

Apigee-istio-mesh-config.yaml 包含 Apigee 使用的 Istio 網格設定。這不適用於叢集中 ASM/Istio 的其他安裝項目。

apigee-ingressgateway-manager-deployment-patch.yaml

包含 Istiod 的服務和部署作業。這是專供 Apigee 用途的私有 istiod。

instances/{instanceName}

datastore
apigee-datastore.yaml

包含管理 Cassandra 的ApigeeDatastore自訂資源。

secrets.yaml

包含資料儲存庫的預設憑證。

redis
apigee-redis.yaml

包含管理 Redis 的 ApigeeRedis 自訂資源。

secrets.yaml

包含資料儲存庫的預設憑證。

組織
apigee-organization.yaml

包含 ApigeeOrganization 自訂資源,可管理其他子元件,例如 connectAgent、watcherAndSynchronizer、MART、UDCA 和 Ingress。

secrets.yaml

包含 apigee-organization.yaml 中參照的 Secret。部分密鑰是由指令碼產生,因此會以註解形式標示。如果停用生成功能,您就必須手動建立這些

environments

包含貴機構中的所有環境。您應為每個環境建立個別資料夾,方法是複製已提供給您的資料夾,然後根據需求進行設定。

dev
apigee-environment.yaml

包含 ApigeeEnvironment 自訂資源,用於管理其他子元件 (例如執行階段)。

secrets.yaml

包含 apigee-environment.yaml 中參照的 Secret。部分密鑰是由指令碼產生,因此會以註解形式標示。如果停用生成功能,您就必須手動建立這些

遙測
apigee-telemetry.yaml

包含 ApigeeTelemetry 自訂資源。

secrets.yaml

包含 apigee-telemetry.yaml 中參照的 Secret。部分密鑰是由指令碼產生,因此會以註解形式標示。如果停用生成功能,您就必須手動建立這些

route-config
dev-envgroup
apigee-route-config.yaml

包含 ApigeeRouteConfig 自訂資源。

secrets.yaml

包含 Secret,該 Secret 會在 apigee-route-config.yaml 中參照。由於 apigee-hybrid-setup.sh 指令碼會自動產生這個檔案,因此檔案會註解掉,並保留在該處,以便在您手動建立密鑰時,提供密鑰範例。

診斷

diagnostic-collector.yaml

用於啟動診斷部署作業的資源

工具

apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh

將服務帳戶金鑰儲存在外部保存庫中

Vault (由 Hashicorp 提供) 是熱門的密鑰管理系統,可與 Google、Azure、AWS 等提供的密鑰儲存空間整合。Hashicorp Vault 可讓您從外部來源擷取密鑰,然後在 Kubernetes 資源中使用。您可以使用 Vault 透過多種方式取得密鑰。下列步驟是基本範例,說明如何使用 Vault CSI 供應商,掛接儲存在 Vault 提供的某些密鑰引擎中的 Google Cloud 服務帳戶金鑰。



  1. 我們將使用 Helm 在叢集中安裝 Vault 相關資源。按照「安裝 Helm」中的步驟,在系統中設定 Helm。
  2. 按照「安裝 Vault Helm 資訊套件」中的步驟操作,也就是:

    1. 將 Hashicorp 存放區新增至 Helm

      helm repo add hashicorp https://helm.releases.hashicorp.com
      
    2. 更新 Helm 存放區

      helm repo update
      
    3. 安裝 Vault

      helm install vault hashicorp/vault \
      --set "server.dev.enabled=true" \
      --set "injector.enabled=false" \
      --set "csi.enabled=true"
      
  3. 現在,我們將密鑰儲存在保管箱中。

    1. 在 Vault 開發 Pod 中取得殼層

      kubectl exec -it vault-0 -- /bin/sh
       ```
      
    2. 在本例中,我們將使用鍵/值密碼引擎儲存資料。

      vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
      
    3. 如要確認金鑰是否已成功儲存,請使用:

      vault kv get secret/runtime-gcp-sa-key
      
  4. 設定驗證,允許執行階段 Pod 提取金鑰。如「Kubernetes 服務帳戶」一節所述,Kubernetes 服務帳戶會為 Pod 提供身分,並允許 Pod 向其他系統進行驗證。

    1. 在 Vault 開發 Pod 中取得殼層

      kubectl exec -it vault-0 -- /bin/sh
      
    2. 啟用 Kubernetes 驗證方法

      vault auth enable kubernetes
      
    3. 撰寫驗證設定

      vault write auth/kubernetes/config \
      issuer="https://kubernetes.default.svc.cluster.local" \
      token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
      kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
      kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
      disable_iss_validation=true
      
    4. 建立驗證政策

      vault policy write apigee-runtime-app - <<EOF
      path "secret/data/runtime-gcp-sa-key" {
      capabilities = ["read"]
      }
      EOF
      
    5. 將政策繫結至服務帳戶

      vault write auth/kubernetes/role/apigee-runtime-role \
      bound_service_account_names=apigee-runtime-sa \
      bound_service_account_namespaces=${APIGEE_NAMESPACE} \
      policies=apigee-runtime-app \
      ttl=20m
      

    在這裡,我們假設服務帳戶位於 apigee 命名空間中。如果您使用其他命名空間安裝 Apigee,請改用該命名空間名稱。

    1. 結束 vault-0 內的殼層

      exit
      
  5. 安裝密鑰儲存空間 CSI 驅動程式

    # Add repo to helm
    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts
    # Install driver in cluster
    helm install csi secrets-store-csi-driver/secrets-store-csi-driver
    
  6. 建立 SecretProviderClass Kubernetes 資源,參考您在 Vault 中建立的密鑰

    cat > spc-vault.yaml <<EOF
    apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
    kind: SecretProviderClass
    metadata:
    name: vault-apigee-runtime-gcp-sa-key
    spec:
    provider: vault
    parameters:
      vaultAddress: "http://vault.default:8200"
      roleName: "apigee-runtime-role"
      objects: |
        - objectName: "client_secret.json"
          secretPath: "secret/data/runtime-gcp-sa-key"
          secretKey: "key"
    EOF
    
  7. 套用yaml

    kubectl apply -f spc-vault.yaml
    
  8. 建立 Kubernetes 服務帳戶,並在步驟 (4.e) 中指派權限

    kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
    
  9. 修改環境的 apigee-environment.yaml 檔案,並新增下列幾行:

    apiVersion: apigee.cloud.google.com/v1alpha2
    kind: ApigeeEnvironment
    # existing content
    spec:
    name: {ENV_NAME}
    organizationRef: {ORG_NAME}
    components:
     runtime:
    # existing content
       pod
       containers:
       - name: apigee-runtime
         podServiceAccountName: apigee-runtime-sa
    # existing content
         volumeMounts:
         - name: secrets-store-inline
           mountPath: "/opt/apigee/sa"
           readOnly: true
       volumes:
       - name: secrets-store-inline
         csi:
           driver: secrets-store.csi.k8s.io
           readOnly: true
           volumeAttributes:
             secretProviderClass: "vault-apigee-runtime-gcp-sa-key"
    
  10. 套用變更:

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
    

Apigee Hybrid 升級



您應已完成「必要條件」一節中提及的所有規定。此外,建議您對所有元件執行滾動式重新啟動,檢查叢集是否正常運作。重新啟動的順序為 Cassandra、Redis、ApigeeOrganization 和 ApigeeEnvironment。

建立備份

  1. 建立目前混合式設定的備份副本。如果需要將升級作業復原為目前版本,您必須先備份資料。

    tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
    
  2. 建立 Cassandra 資料庫的備份。Cassandra 備份是防範災難的重要措施。

視需要升級 Kubernetes 平台

您不需每次都執行這個步驟,但如果較新版本的 Apigee Hybrid 不再支援 Kubernetes 平台 (例如 Kubernetes、OpenShift) 和元件 (例如 cert-manager、Cassandra 等),您就必須升級這些平台和元件的版本。文件中會列出平台和元件的支援版本

下載設定檔

下載存放區,並將現有 Apigee Hybrid 設定中的 basestools 資料夾替換為較新的資料夾:

  1. https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 複製 GitHub 存放區預覽版 1 標記

    複製的存放區結構會類似於「Apigee Hybrid 設定資料夾結構」一文所述:

  2. 取代現有 Apigee Hybrid 設定中的初始化、工具和控制器資料夾。

    export HYBRID_INSTALL_HOME=PATH_TO_PREVIOUS_HYBRID_INSTALL_DIRECTORY
    mv -f bases $HYBRID_INSTALL_HOME/bases
    mv -f tools $HYBRID_INSTALL_HOME/tools
    

視需要更新服務帳戶權限

這個步驟也不需要每次都執行,但您可能需要建立新的服務帳戶,或視需要更新現有服務帳戶的權限。升級指南會詳細說明需要修改或建立哪些服務帳戶,以及需要新增哪些角色。

  • 如要修改現有服務帳戶的權限,請使用適當的 gcloud 指令。升級指南會詳細說明需要新增的指令和角色。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-component@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/$NEW_ROLE"
    
  • 如果較新的 Apigee Hybrid 版本可能需要額外的服務帳戶,才能使用新 / 現有元件,則您必須建立這些帳戶。您可以使用工具資料夾中隨附的 apigee-create-service-account.sh 指令碼建立新的服務帳戶。由於指令碼已在步驟 4 中更新,因此會包含建立新服務帳戶所需的詳細資料和新設定檔。

    您必須在對應的元件 CR 中參照新建立的服務帳戶名稱。

    ./tools/create-service-account --env prod --profile apigee-component
    

升級控制器

${INSTALL_DIR}/overlays/instances/$INSTANCE_DIR/kustomization.yaml 中列出的元件版本欄位,變更為相關的混合版本。

以下是 $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/kustomization.yaml 檔案範例。版本欄位的值必須更新為相關版本

resources:
- datastore/
- environments/
- organization/
- redis/
- route-config/
- telemetry/

patches:
- target:
    group: apigee.cloud.google.com
    version: v1alpha1
    kind: ApigeeDatastore
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)
- target:
    group: apigee.cloud.google.com
    version: v1alpha2
    kind: ApigeeEnvironment
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)

請按照 Apigee Hybrid 安裝工作流程中的「建立初始化資源和控制器」一節所述步驟操作。您可以透過指令碼或手動步驟升級初始化資源和控制器。

更新 Apigee Kubernetes 元件

您需要進行下列變更: - 如果有任何架構變更、導入新欄位或淘汰舊欄位,您必須根據升級指南中的操作說明,對 CR 進行適當變更。 - 至少須將 CR 中的版本欄位 (表示已安裝的 Apigee Hybrid 版本) 更新為較新的 Apigee Hybrid 版本。

套用 apigee CR 的變更。對於非正式環境,您可以同時將所有變更套用至 Apigee 元件

kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

Apigee Hybrid 回復

  1. 還原 apigee-hybrid-setup

    移至包含舊版 Apigee Hybrid 設定的目錄。如果沒有,請從步驟 1[link] 中建立的 zip 檔案還原,該檔案是在 Apigee Hybrid 升級期間建立。

  2. 回溯 Kubernetes 元件

    套用 apigee CR 的變更

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. 復原控制器

    按照建立初始化資源和控制器的步驟,在 Apigee Hybrid 安裝工作流程中執行相同操作。您可以使用指令碼,也可以按照手動步驟回溯初始化資源和控制器。

  4. 清除所用資源

    您必須清除升級期間建立的所有新資源,例如新版 Hybrid 導入的新元件或服務帳戶。升級指南會說明需要清除的所有資源,以及清除步驟。

刪除環境



如要從 Kubernetes 叢集刪除與環境相關的所有資源,請按照下列步驟操作:

  1. 取得環境 CR 的名稱。如要這麼做,請取得所有環境:

    kubectl get env -n ${APIGEE_NAMESPACE}
    

    將資源名稱儲存在 APIGEE_ENV 環境變數中。

  2. 刪除環境加密金鑰。舉例來說,如果您未變更加密金鑰的名稱,可以使用下列指令刪除金鑰:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
    
  3. 刪除 Google Cloud 服務帳戶密鑰:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    
  4. 刪除 Kubernetes 服務帳戶:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  5. 刪除 Apigee 環境自訂資源:

    kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
    

刪除混合設定



如要從 Kubernetes 叢集刪除與 Apigee Hybrid 相關的所有資源,請按照下列步驟操作:

  1. 您需要刪除 Apigee 使用者設定和結構定義設定作業。

    # To list all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} get jobs
    # To delete all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} delete jobs $(kubectl -n ${APIGEE_NAMESPACE} get jobs -o custom-columns=':.metadata.name')
    
  2. 您必須刪除已部署的 Apigee Hybrid 資料平面元件。使用下列指令刪除所有元件:

    kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
    
  3. 如果您並非依預設名稱使用 Kubernetes 服務帳戶密鑰、Google Cloud 服務帳戶密鑰等,才需要執行這個步驟。如果您依預設名稱使用,系統會在下一個步驟中刪除這些密鑰。否則,您必須使用下列指令手動刪除:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  4. 如果是 OpenShift,您需要刪除安裝 Apigee Hybrid 時建立的 SCC (安全性情境限制)。

    kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
    
  5. 執行下列指令,刪除角色、角色繫結、CRD、控制器部署作業等。

    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/ingress
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/rbac
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/webhooks
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/crds
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/certificates
    
  6. 執行下列指令,刪除 apigee 命名空間

    kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
    

    或者,使用下列指令:

    kubectl delete $APIGEE_NAMESPACE
    

多執行個體安裝

多執行個體設定是指可跨多個區域或在同一區域內使用的混合設定。Apigee 建議您將第 2 個執行個體的設定整理到個別的目錄結構中,因為執行個體之間的環境設定 (副本等) 一定不同。每個執行個體的設定都會分離,並獨立整理在各自的資料夾結構中。

舉例來說,在多區域情境中設定 Active-Passive 時,您可能會想在暖待機狀態下,以不同大小和設定來設定第 2 個區域。

在下方的資料夾結構中,您可以複製名為 instance1 的目錄,並將副本命名為 instance2,然後視需要修改資料儲存區和 Ingress 設定。

apigee-hybrid-setup 資料夾結構,適用於多個執行個體設定。]

.
├── bases
   ├── controllers
      ├── apigee-controller
         ├── apigee-controller-deployment.yaml
         └── kustomization.yaml
      └── istiod
          ├── apigee-ingressgateway-manager-deployment.yaml
          └── kustomization.yaml
   └── initialization
       ├── certificates
          ├── certificates-and-issuers.yaml
          └── kustomization.yaml
       ├── crds
          ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
          ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
          └── kustomization.yaml
       ├── ingress
          ├── envoyfilter-1.11.yaml
          └── kustomization.yaml
       ├── openshift
          ├── kustomization.yaml
          └── scc.yaml
       ├── rbac
          ├── apigee-controller
             ├── kustomization.yaml
             └── rbac.yaml
          └── apigee-embedded-ingress-controller
              ├── cluster-role-bindings.yaml
              ├── cluster-roles.yaml
              ├── kustomization.yaml
              └── service-account.yaml
       └── webhooks
           ├── kustomization.yaml
           ├── mutatingwebhookconfiguration.yaml
           └── validatingwebhookconfiguration.yaml
├── instances
   └── instance1 (Add the 2nd instance under instances directory similar to instance1)
       ├── datastore
          ├── apigee-datastore.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── environments
          ├── kustomization.yaml
          └── test
              ├── apigee-environment.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
       ├── kustomization.yaml
       ├── organization
          ├── apigee-organization.yaml
          ├── components
             ├── http-proxy
                ├── kustomization.yaml
                └── patch.yaml
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── redis
          ├── apigee-redis.yaml
          ├── components
             ├── imagepullsecret
                ├── kustomization.yaml
                └── patch.yaml
             ├── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
             └── workload-identity
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
          ├── kustomization.yaml
          └── secrets.yaml
       ├── route-config
          ├── kustomization.yaml
          └── test-env-group
              ├── apigee-route-config.yaml
              ├── components
                 ├── http-and-non-sni-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 ├── http-client
                    ├── apigee-route.yaml
                    └── kustomization.yaml
                 └── non-sni-client
                     ├── apigee-route.yaml
                     └── kustomization.yaml
              └── kustomization.yaml
       └── telemetry
           ├── apigee-telemetry.yaml
           ├── components
              ├── http-proxy
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── imagepullsecret
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── logger
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── metrics
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── nodeselector
                 ├── kustomization.yaml
                 └── patch.yaml
              ├── workload-identity-logger
                 ├── apigee-workload-identities.yaml
                 ├── kustomization.yaml
                 └── patch.yaml
              └── workload-identity-metrics
                  ├── apigee-workload-identities.yaml
                  ├── kustomization.yaml
                  └── patch.yaml
           └── kustomization.yaml
├── overlays
   ├── controllers
      ├── apigee-controller
         ├── apigee-hybrid-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      ├── istiod
         ├── apigee-ingressgateway-manager-deployment-patch.yaml
         ├── apigee-istio-mesh-config.yaml
         ├── components
            ├── imagepullsecret
               ├── kustomization.yaml
               └── patch.yaml
            └── nodeselector
                ├── kustomization.yaml
                └── patch.yaml
         └── kustomization.yaml
      └── kustomization.yaml
   ├── initialization
      ├── certificates
         ├── apigee-ingressgateway-manager-certificate.yaml
         └── kustomization.yaml
      ├── crds
         └── kustomization.yaml
      ├── ingress
         └── kustomization.yaml
      ├── namespace.yaml
      ├── openshift
         ├── kustomization.yaml
         └── scc.yaml
      ├── rbac
         ├── apigee-controller
            └── kustomization.yaml
         ├── apigee-embedded-ingress-controller
            └── kustomization.yaml
         └── kustomization.yaml
      └── webhooks
          ├── kustomization.yaml
          ├── mutatingwebhookconfiguration.yaml
          └── validatingwebhookconfiguration.yaml
   └── instances
       └── instance1
           ├── datastore
              ├── apigee-datastore.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── openshift-scc
                    ├── kustomization.yaml
                    └── scc.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── environments
              ├── kustomization.yaml
              └── test
                  ├── apigee-environment.yaml
                  ├── components
                     ├── http-proxy
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── imagepullsecret
                        ├── kustomization.yaml
                        └── patch.yaml
                     ├── nodeselector
                        ├── kustomization.yaml
                        └── patch.yaml
                     └── workload-identity
                         ├── apigee-workload-identities.yaml
                         ├── kustomization.yaml
                         └── patch.yaml
                  ├── kustomization.yaml
                  └── secrets.yaml
           ├── kustomization.yaml
           ├── organization
              ├── apigee-organization.yaml
              ├── components
                 ├── http-proxy
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── redis
              ├── apigee-redis.yaml
              ├── components
                 ├── imagepullsecret
                    ├── kustomization.yaml
                    └── patch.yaml
                 ├── nodeselector
                    ├── kustomization.yaml
                    └── patch.yaml
                 └── workload-identity
                     ├── apigee-workload-identities.yaml
                     ├── kustomization.yaml
                     └── patch.yaml
              ├── kustomization.yaml
              └── secrets.yaml
           ├── route-config
              ├── kustomization.yaml
              └── test-envgroup
                  ├── apigee-route-config.yaml
                  ├── components
                     ├── http-and-non-sni-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     ├── http-client
                        ├── apigee-route.yaml
                        └── kustomization.yaml
                     └── non-sni-client
                         ├── apigee-route.yaml
                         └── kustomization.yaml
                  └── kustomization.yaml
           └── telemetry
               ├── apigee-telemetry.yaml
               ├── components
                  ├── http-proxy
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── imagepullsecret
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── logger
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── metrics
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── nodeselector
                     ├── kustomization.yaml
                     └── patch.yaml
                  ├── openshift-scc
                     ├── kustomization.yaml
                     └── scc.yaml
                  ├── workload-identity-logger
                     ├── apigee-workload-identities.yaml
                     └── kustomization.yaml
                  └── workload-identity-metrics
                      ├── apigee-workload-identities.yaml
                      ├── kustomization.yaml
                      └── patch.yaml
               └── kustomization.yaml
├── README.md
├── templates
   ├── ingress-certificate.yaml
   ├── ingress-cert-secret.yaml
   └── service-account-key-secret.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

在 GKE 上設定多個執行個體

必要條件

設定多個混合式執行個體前,請先完成下列必要條件:

  • 在多個地區(相同或不同) 中設定 Kubernetes 叢集,並使用不同的 CIDR 區塊
  • 設定跨區域通訊
  • 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 通訊埠 7000 和 7001 (疑難排解期間,7000 可能會做為備份選項)。另請參閱「設定通訊埠」。

您可以使用 ntpdate 等工具,確認伺服器時間已同步。


設定多區域種子主機

  1. 從現有執行個體複製 $INSTANCE_NAME 資料夾,並新增至執行個體資料夾下方。
  2. 如果命名空間欄位的值與 instance1 命名空間不同,請修改該值。
  3. 請按照「指定 Ingress 傳輸層安全標準 (TLS) 憑證」一文中的步驟,修改其他執行個體的 Ingress 設定。
  4. 如要瞭解如何為其他執行個體設定負載平衡器 IP,請參閱「管理 Apigee Ingress 閘道」。



  5. 在擷取種子名稱前,請將 kubectl 環境設為原始叢集

    kubectl config use-context original-cluster-name
    
  6. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. 先前指令傳回的任何 Pod IP 都可以視為多區域種子主機。

  8. 在第 2 個執行個體中,設定 ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml 下方 apigee datastore CR 中的 multiRegionSeedHost 值

設定新執行個體

  1. 將環境定義設為現有叢集

    kubectl config use-context existing-cluster-name
    
  2. 將 apigee-ca 密鑰匯出至檔案

    kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
    
  3. 將環境設為新區域的叢集名稱:

    kubectl config use-context NEW_CLUSTER_NAME
    
  4. 將密鑰匯入新叢集

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  5. 按照「建立初始化資源和控制器」一文中的步驟,在新執行個體 (區域) 中安裝混合式。

  6. 在新資料中心的所有 Pod 上設定 Cassandra。使用下列指令從叢集取得 apigeeorg:

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在下列範例中,檔案名稱為 datareplication.yaml。檔案必須包含下列內容

    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: CassandraDataReplication
    metadata:
    name: REGION_EXPANSION
    namespace: NAMESPACE
    spec:
    organizationRef: APIGEEORG_VALUE
    force: false
    source:
      region: SOURCE_REGION
    

    其中:

    • REGION_EXPANSION 是您為這項中繼資料指定的名稱。您可以選擇「cassandra-data-replication」等名稱
    • NAMESPACE 與為第 2 個執行個體選擇的命名空間相同。通常是「apigee」。
    • APIGEEORG_VALUE 是上一個步驟中,kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" 指令輸出的值。
    • SOURCE_REGION 是來源叢集 nodetool 狀態的 Cassandra 資料中心值。
  8. 使用下列指令套用 CassandraDataReplication:

    kubectl apply -f datareplication.yaml
    
  9. 使用下列指令驗證重建狀態。



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    結果應如下所示:

    {
    "rebuildDetails": {
      "apigee-cassandra-default-0": {
        "state": "complete",
        "updated": 1623105760
      },
      "apigee-cassandra-default-1": {
        "state": "complete",
        "updated": 1623105765
      },
      "apigee-cassandra-default-2": {
        "state": "complete",
        "updated": 1623105770
      }
    },
    "state": "complete",
    "updated": 1623105770
    }
    
  10. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小:

    kubectl logs apigee-cassandra-default-0 -f -n apigee
    

    請參閱 datastore/secrets.yaml,瞭解 JMX_user 和 JMX_password

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
  11. 從 apigee datastore CR 中移除 multiRegionSeedHost,然後執行下列指令來套用變更

    kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
    
  12. 檢查 Cassandra 叢集狀態

    下列指令有助於查看叢集是否已在兩個資料中心成功設定。這項指令會檢查兩個區域的 nodetool 狀態。

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
    
    Datacenter: us-central1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
    UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
    UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.4.33   78.69 KiB  256          100.0%               a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
    UN  10.0.0.21   78.68 KiB  256          100.0%               9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
    UN  10.0.1.26   15.46 KiB  256          100.0%               1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1
    

疑難排解

支援、診斷與疑難排解指南

https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/troubleshooting-apigee-hybrid.

在多區域 Apigee Hybrid 設定中使用 forceDelete 後的手動清理作業

  • 在以下範例中,有 2 個區域 - us-east1us-west1
  • us-west1 區域中,apigee 資料儲存庫已透過強制刪除功能刪除。
  • us-east1 區域,cassandra 仍可正常運作。
  • 使用指令驗證 apigeeds 是否已刪除

    kubectl get apigeeds -n apigee
    No resources found in apigee namespace.
    
  • 將 kubectl 環境變更為 Cassandra 叢集仍在運作的其他區域 (這裡為 us-east1 區域)。

  • 確認資料儲存區處於執行狀態

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • 在正常運作的區域 (此處為 us-east1) 中,執行其中一個 Cassandra Pod

    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    apigee@apigee-cassandra-default-0:~$
    
  • 檢查 nodetool 狀態,系統會顯示已刪除區域 (這裡為 us-west1) 中所有節點的狀態為關閉

    apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} status
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load           Tokens   Owns    Host ID                                                           Rack
    UN  10.52.0.212   685.01 KiB  256          ?         e1aa61e3-4eae-4549-9b58-506d495d87ab   ra-1
    UN  10.52.0.72     606.75 KiB  256          ?         477dfc03-f93e-40ea-810a-d15769822ad5     ra-1
    UN  10.52.0.104   648.3 KiB    256          ?         a8854cff-c2e3-4f0c-a342-e692787efcab        ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens   Owns     Host ID                                                           Rack
    DN  10.60.0.143   567.06 KiB    256          ?           355d6ace-ab77-42cb-8138-9993bfd62d0e    ra-1
    DN  10.60.0.40     535.99 KiB    256          ?           4ed2c903-ff56-40fa-a15e-80a3de3cb22d      ra-1
    DN  10.60.0.17     573.08 KiB    256          ?           f9a50d19-c04a-4d0d-a088-612384bed9f5     ra-1
    
  • 移除已刪除區域中的所有節點 (此處為 us-west1 區域)

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 355d6ace-ab77-42cb-8138-9993bfd62d0e
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 4ed2c903-ff56-40fa-a15e-80a3de3cb22d
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode f9a50d19-c04a-4d0d-a088-612384bed9f5
    
  • 確認已刪除區域 (在此為 us-west1) 的節點

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
    
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens  Owns   Host ID                                                           Rack
    UN  10.52.0.212   699.71 KiB    256          ?        e1aa61e3-4eae-4549-9b58-506d495d87ab  ra-1
    UN  10.52.0.72     586.77 KiB    256          ?        477dfc03-f93e-40ea-810a-d15769822ad5    ra-1
    UN  10.52.0.104   623.6 KiB      256          ?        a8854cff-c2e3-4f0c-a342-e692787efcab       ra-1
    
  • 完成後,請刪除上層區域 (這裡為 us-east1) 中的使用者設定工作。系統會在幾秒內自動重新建立工作。

    kubectl get jobs -n apigee
    
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    0/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                          0/1            7s         7s
    
    
    kubectl delete job apigee-cassandra-user-setup--apigee--0d2504c
    
  • 等待使用者設定工作完成

    kubectl get jobs -n apigee
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    1/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                      1/1           7m                7m
    
  • 確認鍵空間沒有已刪除的區域。

  • 建立 Cassandra 偵錯 Pod。

    • 如果是混合式版本 1.5 以上,請參閱 Cassandra 疑難排解指南的說明文件 (例如混合式版本 1.5 的連結、混合式版本 1.6 的連結),然後執行建立的 Pod
  • 使用下列指令登入偵錯 Pod 中的 cqlsh:

    apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
    Password:
    
  • 確認所有鍵空間都已移除 us-west1 區域

    ddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;
    
    keyspace_name              | durable_writes | replication
    ---------------------------+----------------+-----------------------------------------------------------------------------------
    cache_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      rtc_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_schema |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    quota_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kms_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                         system |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kvm_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
    (11 rows)