預覽使用者指南:
Apigee hybrid v1.8 的新安裝和管理程式預覽。
本文內容:
- 預覽
- 總覽
- 必要條件
- Apigee Hybrid 基本安裝
- 客製化 Apigee Hybrid 安裝
- 客製化與組件
- 概念
- 理解劇本
- Apigee Hybrid 設定資料夾結構
- 將服務帳戶金鑰儲存在外部金鑰庫中
- Apigee Hybrid 升級版
- Apigee Hybrid 回復
- 清除
- 刪除環境
- 多執行個體安裝
預覽
本文適用於 Apigee 營運人員 (負責安裝/管理/管理 Apigee Hybrid 安裝作業的使用者)。如要按照本文的指示操作,您必須先在支援的 Kubernetes 平台上安裝 Apigee Hybrid。建議您建立一個 Apigee 評估組織,並嘗試以下步驟。
意見回饋
請將此過程的回饋發送至 Apigee-hybrid-install-preview@google.com。
總覽
新的 Apigee 混合式安裝體驗使用 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 之前,您需要完成以下文件章節中列出的說明:
- 專案和機構設定
- 總覽 Apigee Hybrid 的安裝先決條件。
- 步驟 1:啟用 API
- 步驟 2:建立機構
- 步驟 3:建立環境與環境群組
- 混合運行時設定
工具
此外,您還需要在工作站上下載並設定以下工具:
curl- 執行
apigee-hybrid-setup.sh腳本需要docker。按照「取得 Docker」頁面的操作說明安裝 Docker。 - 大多數 Linux/UNIX 系統都應提供
envsubst。如為 macOS 和其他系統,請按照這個存放區的操作說明操作。 - 應該安裝
jq。下載 jq。 kpt下載 kpt。kubectl1.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 Setup Folder Structure 中記錄的檔案結構的根目錄。INSTANCE_DIR: 特定 Apigee hybrid 執行個體的目錄。預設情況下,第一個實例名為instance-1。實例目錄是${INSTALL_DIR}/overlays/instances/的子目錄。您可以為混合實例指定任何名稱。請參閱多實例安裝。ORG_NAME: 您的 Apigee hybrid 組織的名稱。這必須與您的 Google Cloud 項目 ID 相同。請參閱:步驟 2:建立組織。
Apigee 混合動力基本安裝
要快速安裝 Apigee Hybrid 而無需進行大量自訂,您可以使用以下兩步驟流程。
- 單一環境
- 單一環境群組
- 建立一個 Google Cloud 服務帳戶,並將其用於所有單獨的元件。
- 所有加密金鑰和密碼的預設值。
下載安裝文件
請複製 GitHub 倉庫 https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 下載並準備安裝檔案:
複製存放區:
git clone https://github.com/apigee/apigee-hybrid-install.git導航至克隆倉庫所在的目錄:
cd apigee-hybrid-install從 preview-1 標籤建立分支:
git branch preview-1 preview-1 git checkout preview-1使設定指令碼可執行:
chmod +x ./tools/apigee-hybrid-setup.sh克隆的儲存庫將具有類似於 Apigee Hybrid 安裝資料夾結構 中所述的結構:
運行設定
執行位於 tools/ 資料夾內的 apigee-hybrid-setup.sh 殼層指令碼。
./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 安裝
如要進一步控管安裝作業,進階使用者可以按照下列步驟操作 (對於下列許多步驟,您可以選擇手動執行,或使用殼層指令碼自動執行該步驟):
下載安裝文件
下載並準備安裝檔:
複製
https://github.com/apigee/apigee-hybrid-install/的 GitHub 存放區克隆的儲存庫將具有類似於 Apigee Hybrid 安裝資料夾結構 中所述的結構:
cd進入apigee-hybrid-install/目錄使設定指令碼可執行:
chmod +x ./tools/apigee-hybrid-setup.sh
建立命名空間
在叢集中建立一個 Kubernetes 命名空間,其中將包含所有 Apigee 叢集元件。
kubectl create namespace apigee
如果您為命名空間選擇了其他名稱,則可以選擇遵循以下三個選項之一:
- (建議)在 編輯資源 yamls 中預填值時使用
--namespace={YOUR_NAMESPACE_NAME}。 執行以下兩個命令:
使用
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使用
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 映像(可選)
您可以選擇不使用公開託管的圖片,而可以使用您自己的私人儲存庫中的圖片:
- 第一步是將所有映像推送到您的私人倉庫,這可以透過按照 apigee-pull-push | Apigee X 中的步驟來完成。預設情況下,圖像會標記其對應的 Apigee Hybrid 版本,建議您不要編輯這些標籤。此外,我們也建議您不要編輯圖片名稱,這樣才能按照「圖片中心」的說明建構最終圖片路徑。
將 apigee-hybrid-config.yaml 檔案中
imageHub欄位的值設定為私有倉庫主機路徑。(詳情請參閱Image Hub)。imageHub: "your.private.repo/apigee/hybrid"
這將確保所有 Apigee hybrid 元件都使用您私有存放區中的映像。
此外,您可能還想為 controller 和 Apigee 入口閘道使用私有鏡像,為此,您需要編輯 apigee-controller-deployment.yaml 和 apigee-ingressgateway-manager-deployment.yaml 文件,並將所有 image 文件中的私有鏡像。
配置 imagePullSecrets(可選)
- 建立一個包含用於對私人儲存庫進行驗證的憑證的 kubernetes secret。請參閱 從私有註冊表中拉取映像,以瞭解如何建立金鑰。
- 一旦建立了金鑰,剩下的就是引用該金鑰,這可以透過編輯檔案 apigee-hybrid-config.yaml 並將
imagePullSecret欄位的值設為先前建立的金鑰的名稱,並在對應的kustomization.yaml檔案中啟用imagePullSecret元件來完成。
如果您在兩個地方都指定了 imagePullSecrets,則 apigee-controller-manager.yaml 檔案中的那個將優先。
配置轉送代理(可選)
可以透過向 apigee-hybrid-config.yaml 檔案中新增 forwardProxy 欄位來設定轉送代理程式。例如:
forwardProxy: |
scheme: HTTP
host: 10.12.0.47
port: 3128
指定入口 TLS 證書
使用腳本
./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs
有關此標誌的更多詳細信息,請參閱 - 以瞭解腳本。
手動
您需要提供 Istio 入口閘道的 TLS 憑證。您可以:
- 使用已知授權單位簽署的憑證,方法請參閱「取得傳輸層安全標準 (TLS) 憑證:範例 | Apigee X」一文。
- 或產生自簽名憑證。
這裡我們將以自簽名憑證為例進行說明。可以使用以下方法產生自簽名憑證(假設 DOMAIN 已正確設置,並且應該與您的環境群組中設定的主機名稱相符):
openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650
這將會建立兩個名為tls.key和tls.crt的檔案。
接下來,您需要建立一個具有以下格式的金鑰。您可以使用 kubectl create 或 kubectl 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 欄位。
預設情況下,我們會建立一個帶有預設參數的入口部署(預設值將顯示在 CR 參考文件中 ):
ingressGateways:
- name: "prod-1"
範例:
A. 覆寫傳入服務欄位
ingressGateways:
- name: "prod-1"
serviceSpec:
annotations:
{KEY}: ${VALUE}
loadBalancerIP: ${IP}
B. 更改副本最小值/最大值
ingressGateways:
- name: "prod-1"
autoScaler:
minReplicas: 4
maxReplicas: 10
C. 新增新的入口部署
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」。
啟用工作負載身份
有關如何在安裝前啟用工作負載標識的詳細信息,請參閱 Kustomize 和組件 下的 工作負載標識 部分。
編輯資源 YAML 文件
元件 YAML 中的某些位置必須包含正確的機構、環境和環境群組名稱。您可以手動設定這些值,也可以使用殼層指令碼自動填入這些值。
使用腳本
./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
授予同步器服務帳戶與控制平面互動的權限
按照「步驟 8:啟用同步處理工具存取權」一節中的步驟操作,將服務帳戶名稱 (apigee-non-prod 或 apigee-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 根憑證的命名空間。
- 編輯 customization.yaml 檔案,建立憑證:
$INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml 在檔案結尾加入下列內容。
- patch: |- - op: replace path: /metadata/namespace value: "gk-cert-manager" target: group: cert-manager.io version: v1 kind: Certificate name: apigee-root-certificate儲存檔案
客製化和組件
總覽
新的混合安裝繼承了 Kustomize 的理念,即以 Bases 和 Overlays 的形式建構 YAML 檔案。
- 基礎文件是由 Apigee 提供的文件,這些文件可能會在每個新的 Hybrid 版本之間發生變化。您無需修改這些文件。這些檔案包含 Apigee 提供的一些預設值。頂層
bases/資料夾下的所有文件都包含這些基礎文件 疊加層會保留使用者設定,並做為修改 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 Secret,其中包含您的身份驗證詳細信息,然後可以在其中引用此 Secret。有關說明,請參閱 配置 imagePullSecrets(可選)。有關更多信息,請參閱 Kubernetes 文件中的 從私有鏡像倉庫拉取鏡像 | Kubernetes。
語言:
overlays/controllers/apigee-controlleroverlays/controllers/istiodoverlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
啟用:
根據需要,在對應的 kustomization.yaml 檔案中取消註解「./components/imagepullsecret/」行。
需要進行的修改:
- components/imagepullsecret/patch.yaml
- 必要 將相關的金鑰名稱加入
spec.template.spec.imagePullSecrets中的清單中
- 必要 將相關的金鑰名稱加入
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 Apigee Hybrid,則需要使用以下命令套用這些新變更:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
nodeselector
這個元件可讓您在特定節點上排定 Apigee 資源的 Pod。詳情請參閱「將 Pod 指派給節點 | Kubernetes」。
語言:
overlays/controllers/apigee-controlleroverlays/controllers/istiodoverlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
啟用:
根據需要,在對應的 kustomization.yaml 檔案中取消註解「./components/nodeselector」行。
需要進行的修改:
- components/nodeselector/patch.yaml
- 可選 將節點選擇器標籤的值從
apigee-runtime或apigee-data變更為所需的值。
- 可選 將節點選擇器標籤的值從
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 Apigee Hybrid,則需要使用以下命令套用這些新變更:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
工作負載身份
Apigee Hybrid 生態系統中的各種容器需要權限才能向 Apigee 控制平面 / 管理平面發出某些 API 呼叫。Workload Identity 是授予 Pod (和其中的容器) 這些權限的方法之一。想要瞭解更多相關信息,可以閱讀以下資源: - Workload Identity 簡介:為您的 GKE 應用程式提供更佳的身份驗證 | Google Cloud 博客 - 使用 Workload Identity | Kubernetes Engine 文件 | Google Cloud
語言:
overlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/redisoverlays/instances/{INSTANCE_NAME}/telemetry
先決條件:
在使用工作負載識別之前,您需要在 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 行。請注意,在遙測中,我們為 metrics 和 logger 元件提供了單獨的工作負載標識插件,可以單獨啟用。
用法:
- 如果您尚未安裝混合部署,您可以按照上一節所述啟用工作負載標識,然後繼續安裝,安裝程序將自動使用工作負載標識。
如果您已安裝 Apigee Hybrid,則需要使用以下命令套用這些新變更:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
http-proxy
您可以在以下每個元件中設定代理伺服器,以便該元件的流量通過為該元件配置的 http 代理程式。您可以為每個 Apigee 元件單獨配置代理程式。
語言:
overlays/instances/{INSTANCE_NAME}/datastoreoverlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}overlays/instances/{INSTANCE_NAME}/organizationoverlays/instances/{INSTANCE_NAME}/telemetry
啟用:
根據需要,在對應的 kustomization.yaml 檔案中取消註解「./components/http-proxy/」行。
需要進行的修改:
- components/http-proxy/patch.yaml 可以在
spec.httpForwardProxy-
下配置以下參數
scheme: 必需HTTP或HTTPS之一host:必要:Proxy 的主機位址port: 必需 埠號username: 可選 與您的代理程式關聯的使用者名password: 可選 存取代理程式的密碼
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 Apigee Hybrid,則需要使用以下命令套用這些新變更:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
日誌記錄器和指標
您可以單獨啟用或停用 overlays/instances/{INSTANCE_NAME}/telemetry 中的日誌記錄器或指標。記錄器預設為停用,指標則為啟用。啟用或停用它們只需在 telemetry/kustomization.yaml 檔案中取消註解或註解相應的行即可。
gcs-backup 和 gcs-restore
這個 kustomize 元件可用於將 Cassandra 資料庫備份及還原至 Google Cloud Storage。
語言:
overlays/instances/{INSTANCE_NAME}/datastore
先決條件:
下載具有儲存物件管理員角色的 Google Cloud 服務帳戶金鑰。
- 如果您使用腳本執行安裝且未使用工作負載標識,則可以重複使用腳本建立的 service-accounts 資料夾下提供的已下載金鑰。
您也可以使用 create-service-account.sh 腳本來建立一個新的服務帳戶並下載其金鑰:
./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
下載金鑰後,您需要建立名為 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 來建立此金鑰。
啟用:
- 如果要啟用備份,請取消註解資料儲存 kustomization.yaml 檔案中的「./components/gcs-backup」行。
- 如果要還原備份,請取消註解資料儲存 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 的值,使其指向已配置的任何代理程式。
格式可以如下:
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
- 建立新的 Kubernetes 叢集,並在其中建立新的命名空間,用於還原混合式執行階段部署作業。您不能使用與原始混合安裝相同的叢集和命名空間。
除了您想要的任何其他設定外,請使用上述設定將 Hybrid 安裝到新叢集:
- 您可以在新的命名空間中使用基本安裝和安裝混合方式:
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}- 或依照 自訂 Apigee Hybrid 安裝 進行配置,以滿足您的需求。
恢復完成後,舊命名空間中的所有資源都可以刪除並切換到新命名空間。
有關更多信息,請參閱恢復備份。
非 GCS 備份和非 GCS 恢復
這個 kustomize 元件可用於將 Cassandra 資料庫備份及還原至 Google Cloud Storage。
語言:
overlays/instances/{INSTANCE_NAME}/datastore
必要條件:
- 可以利用現有文件中關於 設定伺服器和 SSH 的步驟。
根據上述步驟,您需要使用 SSH 私鑰,該私鑰位於按照前面步驟產生的「ssh_key」檔案中。然後,我們將建立一個名為 apigee-cassandra-backup-and-restore-gcp-sa-key 的 Kubernetes Secret,其中包含此 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 建立這個密鑰。
啟用:
- 如果要啟用備份,請取消註解資料儲存 kustomization.yaml 檔案中的「
./components/non-gcs-backup」行。 - 如果要還原備份,請取消註解資料儲存 kustomization.yaml 檔案中的「
./components/non-gcs-restore」行。
僅供備份使用的修改
- components/non-gcs-backup/apigee-datastore-patch.yaml
- 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 的值,使其指向已配置的任何代理程式。格式如下:
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的值以指向任何已配置的代理程式。格式可以如下: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 復原概述。
- 建立一個新的 Kubernetes 集群,並分配一個新的命名空間,用於恢復混合運行時部署。您不能使用與原始混合安裝相同的叢集和命名空間。
使用上述設定安裝 Hybrid 到新叢集,並視需要進行其他設定: 您可以選擇使用基本安裝方式,並在新命名空間中安裝 Hybrid:
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}或者,您也可以按照自訂 Apigee Hybrid 安裝程序,根據自己的選擇設定項目。
恢復完成後,舊命名空間中的所有資源都可以刪除並切換到新命名空間。
有關更多信息,請參閱在遠端伺服器上安排備份。
http-client
有關說明,請參閱 啟用 HTTP 用戶端 | Apigee。
語言:
- overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}
啟用:
在對應的 route-config/${ENV_GROUP}/kustomization.yaml 檔案中,取消註解「./components/http-client」行
需要進行的修改:
- 不需要進行任何強制修改。
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 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
- 必需
credentialName描述與credential_name此處描述 相符。
- 必需
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 Apigee Hybrid,請使用下列指令套用這些新變更:
kubectl apply -k overlays/instances/{INSTANCE_NAME}
http-and-non-sni-client
如需操作說明,請參閱「Enable support for both non-SNI and HTTP clients | Apigee」(啟用非 SNI 和 HTTP 用戶端支援 | Apigee)。
啟用:
取消註解對應 route-config/${ENV_GROUP}/kustomization.yaml 檔案中的「./components/http-and-non-sni-client」行
要進行的修改:
- components/http-and-non-sni-client/apigee-route.yaml
- 必需
credentialName描述與credential_name此處描述 相符。
- 必需
用法:
- 如果您尚未安裝 Apigee Hybrid,您可以繼續執行安裝步驟,這些變更將在安裝過程中套用。
如果您已安裝 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 設定時,使用此元件才比較有意義。
- 新叢集和現有叢集都需要使用相同的 TLS 證書,以確保 Cassandra pod 之間能夠正常通訊。因此,我們需要從現有叢集複製
apigee-root-certificate密碼,並在新叢集中使用: 執行作業:
kubectl config get-contexts- 若要取得所有 Kubernetes 上下文的列表,請執行
kubectl config use-context SOURCE_CLUSTER_CONTEXT其中 SOURCE_CLUSTER_CONTEXT 是來源 Kubernetes 叢集上下文的名稱。
將根憑證金鑰儲存在檔案中:
kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml將叢集上下文切換到要安裝 Apigee Hybrid 的新叢集。
kubectl config use-context ${NEW_CLUSTER_CONTEXT}在新叢集中建立根密鑰:
kubectl -n cert-manager apply -f apigee-root-certificate.yaml禁用建立新的根憑證。這將確保我們不會創造新的
apigee-root-certificate最終會覆蓋我們在上一步建立的文件。在
overlays/initialization/certificates/kustomization.yaml檔案中取消註解下列程式碼行:# components: # - ./components/disable-apigee-root-certificate-generation繼續完成 Apigee Hybrid 的其餘安裝,可以使用 基本 Apigee Hybrid 安裝 或 自訂 Apigee Hybrid 安裝。 例如,在完成 Apigee Hybrid 基本安裝 後,您可以執行以下操作:
./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION使用以下命令驗證重建狀態。
kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"從記錄檔驗證重建程序。此外,請使用 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使用以下命令驗證重建狀態。
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 }另請參閱:多區域部署。
從
components/multi-region/patch.yaml中刪除以下幾行:properties: multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED套用變更:
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}。圖片中心的預設值為gcr.io/apigee-release/hybrid/。
(使用 DIGEST 的圖像需要在每個子組件中單獨設定)
Apigee 透過組合以下值來建立最終影像路徑:
- 「Image Hub」可以在apigee-hybrid-config.yaml中被覆蓋(有關如何覆蓋 Image Hub 的詳細步驟,請參閱使用來自私有倉庫的 docker 映像部分)。
IMAGE_TAG的值取自version字段,該字段存在於每個單獨的 components 的 yaml 檔案中(例如,apigee-organization.yaml)。Apigee 會為映像檔加上 Apigee Hybrid 版本標記,也就是說,Apigee Hybrid 1.8 版的標記為IMAGE_TAG1.8IMAGE_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 金鑰名稱 |
|---|---|---|
| 組織 | ||
| connectAgent | apigee-connect-agent-gcp-sa-key-${ORG_NAME} |
|
| 觀察者 | apigee-watcher-gcp-sa-key-${ORG_NAME} |
|
| 市場 | 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 服務帳戶,以及啟用工作負載身分修補程式時 Kubernetes 服務帳戶的預設名稱。
| 元件 | 子元件 | 預設名稱(啟用工作負載標識補丁後可用) |
|---|---|---|
| 組織 | ||
| connectAgent | apigee-connect-agent-svc-account-${ORG_NAME} |
|
| 觀察者 | apigee-watcher-svc-account-${ORG_NAME} |
|
| 市場 | 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} |
|
| 資料儲存 | ||
| 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)
└── ...
新增環境非常簡單:
- 在 environments 目錄(或您設定的任何資料夾結構)內建立一個新資料夾
- 將
apigee-environment.yaml檔案從任何現有環境複製到新資料夾。 - 如果您希望為新環境建立新的服務帳戶和加密金鑰,請將
secrets.yaml複製到新資料夾中,並適當地重命名金鑰,以便將其與其他現有環境區分開來(通常是透過新增環境名稱作為後綴來完成的)。 - 對
apigee-environment.yaml進行適當的更改,例如:- 更改環境名稱
- 如果需要建立新的服務帳戶和加密金鑰,則需要在 yaml 檔案中正確引用它們。
- 應用
yaml:
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml
在 Apigee 資料儲存中使用強制刪除
如果由於任何原因導致資料儲存刪除無法進行,現在無論叢集的當前狀態如何,都可以使用以下命令強制刪除 Apigee 資料儲存。
刪除
apigee命名空間中的apigeeds:Kubectl delete -n apigee apigeeds default如果此步驟卡住,您可以使用 CTRL + C 退出。
編輯一個新的
apigeeds:Kubectl edit -n apigee apigeeds default在 Apigee 資料存儲規範中新增/更新 forceDelete 字段
spec: forceDelete: true儲存檔案並結束。
現在請等待資料存放區刪除完成。刪除所有 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-nameKubernetes 叢集名稱。--cluster-regionKubernetes 叢集所在的區域--gcp-project-idKubernetes 叢集所在的 Google Cloud 雲端專案 ID--ingress-domain指定將用於為 istio ingress-gateway 產生自簽名 TLS 憑證的主機名稱/網域名稱。如果沒有指定,則會嘗試透過查詢控制層 API 來確定環境群組的值。如果在確定環境群組時出現問題,或為環境群組配置了多個主機名,則會傳回錯誤並退出腳本。--generate-internal-tls-certs這將產生一個名為 apigee-ca 的 Kubernetes Secret,其中包含我們產生的憑證和金鑰對。--create-ingress-tls-certs這將在 istio-system 命名空間內產生一個名為{ORG_NAME}-{ENV_GROUP_NAME}的金鑰(源自組織和環境群組名稱),其中包含用於 TLS 通訊的憑證和金鑰對。用於產生這些憑證的網域名稱源自於 envgroup 配置中的值。如果出現衝突(例如,當我們找到多個域時),將顯示相應的錯誤訊息。--create-gcp-sa-and-secrets在 Google Cloud 雲端專案中建立一個 Google Cloud 服務帳戶,下載金鑰,然後建立包含該金鑰的 Kubernetes Secret。金鑰名稱可在 Google Cloud 服務帳號 中找到。--fill-values在各種 YAML 中需要 org、env、envgroup 和其他名稱值的位置,將這些值替換為實際值。--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 & overlays 的概念進行組織的。bases 資料夾包含 Apigee 每個元件所需的最小配置。overlays 資料夾包含多個附加功能(配置),定義為 components。 可以透過取消註解 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 頒發憑證的 Issuer 和 Certificate 資源。也包含用於核發憑證給各個 Pod,以進行 TLS 通訊的 Issuer。
rbac
包含各種元件將要使用的 Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。
信用
Contains the definition of all the CRDs which are used by Apigee.
網路鉤子
包含 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration,它們將用於對自訂資源執行驗證。
輸入
包含適用於所有入口 Pod 的配置。例如:常見頭部修改、健康檢查等。
OpenShift
包含 openshift SecurityContextConstraints 的定義。
控制器
鴿子控制器
apigee-hybrid-config.yaml
包含一個 ConfigMap,它是在 apigee-controller-manager.yaml 中作為輸入提供的。此 ConfigMap 包含諸如 imageHub、imagePullSecrets、forwardProxy 等配置。
apigee-controller-deployment.yaml
包含控制器和 webhook 的兩個服務,以及控制器的部署。如果您想為控制器使用私有鏡像,則需要在此處進行變更。
伊斯蒂奧德
Apigee-istio-mesh-config.yaml 包含 Apigee 使用的 Istio 的網格配置。這不適用於叢集中其他 ASM/Istio 安裝。
apigee-ingressgateway-manager-deployment-patch.yaml
包含 Istiod 的服務和部署。這是一個僅供 Apigee 使用場景的私有系統。
instances/{實例名稱}
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
包含Secret被引用的apigee-organization.yaml 。腳本產生時,部分秘密訊息會被註解掉。如果停用它們的生成,則需要手動建立這些物件。
environments
包含您組織中的所有環境。你應該為每個環境建立一個單獨的資料夾,方法是複製已經提供給你的資料夾,並根據需要進行配置。
dev
apigee-environment.yaml
包含 ApigeeEnvironment 自訂資源,用於管理執行時間等其他子元件。
secrets.yaml
包含Secret被引用的apigee-environment.yaml 。腳本產生時,部分秘密訊息會被註解掉。如果停用它們的生成,則需要手動建立這些物件。
遙測
apigee-telemetry.yaml
包含 ApigeeTelemetry 自訂資源。
secrets.yaml
包含Secret被引用的apigee-telemetry.yaml 。腳本產生時,部分秘密訊息會被註解掉。如果停用生成功能,您就必須手動建立這些
路由配置
dev-envgroup
apigee-route-config.yaml
包含 ApigeeRouteConfig 自訂資源。
secrets.yaml
包含 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 Provider 掛載儲存在 Vault 提供的某些金鑰引擎中的 Google Cloud 服務帳戶金鑰的基本範例。
- 我們將使用 Helm 在您的叢集中安裝與 Vault 相關的資源。請依照 安裝 Helm 中的步驟在您的系統中設定 Helm。
請依照安裝 Vault Helm chart中的步驟操作,即:
將 Hashicorp 程式碼庫加入 Helm。
helm repo add hashicorp https://helm.releases.hashicorp.com更新 Helm 倉庫
helm repo update安裝 Vault
helm install vault hashicorp/vault \ --set "server.dev.enabled=true" \ --set "injector.enabled=false" \ --set "csi.enabled=true"
現在我們將把這個秘密保存在保險庫裡。
取得 Vault 開發艙內的 shell。
kubectl exec -it vault-0 -- /bin/sh ```在本例中,我們將使用鍵/值 Secret 引擎儲存資料。
vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"若要驗證金鑰是否已成功存儲,請使用:
vault kv get secret/runtime-gcp-sa-key
設定身份驗證,允許運行時 pod 取得金鑰。如 Kubernetes 服務帳戶 所述,Kubernetes 服務帳戶為 Pod 提供身份,並允許它們與其他系統進行身份驗證。
取得 Vault 開發艙內的 shell。
kubectl exec -it vault-0 -- /bin/sh啟用 Kubernetes 身份驗證方法
vault auth enable kubernetes撰寫驗證設定
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建立身份驗證策略
vault policy write apigee-runtime-app - <<EOF path "secret/data/runtime-gcp-sa-key" { capabilities = ["read"] } EOF將策略與服務帳戶綁定
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 使用了其他命名空間,則需要使用該名稱。
退出 Vault-0 內的外殼
exit
安裝密鑰儲存 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創造
SecretProviderClass引用您在 Vault 中建立的金鑰的 Kubernetes 資源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應用
yamlkubectl apply -f spc-vault.yaml建立 Kubernetes 服務帳戶,並在步驟 (4.e) 中指派權限
kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa修改環境變數 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"套用變更:
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
Apigee Hybrid 升級
您應該已完成 先決條件 中提到的所有要求。此外,建議您對所有組件進行滾動重啟,以檢查集群是否健康。重啟順序為 Cassandra、Redis、ApigeeOrganization 和 ApigeeEnvironment。
建立備份
建立目前混合部署方案的備份副本。如果需要將升級回滾到目前版本,則需要進行備份。
tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR建立 Cassandra 資料庫備份。Cassandra 備份是應對災難情況的重要保護措施。
如有需要,請升級您的 Kubernetes 平台
雖然並非每次都需要執行此步驟,但如果您的 Kubernetes 平台(如 kubernetes、openshift)以及元件(如 cert-manager、cassandra 等)的版本不再受新版 Apigee Hybrid 支持,則您需要升級這些平台和元件的版本。文件將包含 個受支援的平台和元件版本。
下載安裝文件
下載存放區,並將現有 Apigee Hybrid 設定中的 bases 和 tools 資料夾替換為較新的資料夾:
複製 GitHub 倉庫 preview-1 標籤,位址為
https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1複製的存放區結構會與「Apigee Hybrid 設定資料夾結構」一文所述的結構類似:
取代現有 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 混合版本可能需要為新的 / 現有的元件建立額外的服務帳戶,那麼您需要建立這些帳戶。您可以使用工具資料夾中提供的
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 Rollback
恢復 Apigee 混合設置
切換到包含先前版本的 Apigee Hybrid 安裝程式的目錄。如果不可用,請從 Apigee Hybrid 升級過程中步驟 1[連結] 建立的 zip 檔案中復原。
回滾 Kubernetes 元件
套用 Apigee CR 的變更
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}復原控制器
請依照 Apigee hybrid 安裝工作流程中提供的步驟 建立初始化資源和控制器 進行操作。您可以使用指令碼或按照提供的手動步驟復原初始化資源和控制器。
清除所用資源
您需要清理升級過程中建立的任何新的額外資源,例如在新版本的混合系統中引入的新元件或服務帳戶。升級指南會說明需要清除的所有資源,以及清除步驟。
刪除環境
如要從 Kubernetes 叢集刪除與環境相關的所有資源,請按照下列步驟操作:
取得環境 CR 的名稱。如要執行這項操作,請取得所有環境:
kubectl get env -n ${APIGEE_NAMESPACE}將資源名稱儲存在
APIGEE_ENV環境變數中。刪除環境加密金鑰。例如,如果您沒有更改加密金鑰的名稱,則可以使用下列命令刪除它們:
kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys刪除 Google Cloud 服務帳戶金鑰:
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')刪除 Kubernetes 服務帳戶:
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')刪除 Apigee 環境自訂資源:
kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
刪除混合型設定
以下步驟用於從 Kubernetes 叢集中刪除所有與 Apigee Hybrid 相關的資源:
您需要刪除 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')您必須刪除已部署的 Apigee Hybrid 資料平面元件。使用以下命令刪除所有組件:
kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME如果您未使用 Kubernetes 服務帳戶 Secret、Google Cloud 服務帳戶 Secret 等的預設名稱,則需要執行此步驟。如果您使用了預設名稱,則這些 Secret 將在下一步中刪除;否則,您需要使用以下指令手動刪除它們:
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}')對於 OpenShift,您需要刪除在安裝 Apigee Hybrid 期間建立的 scc(安全性上下文約束)。
kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}執行以下命令刪除角色、角色綁定、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執行以下命令刪除 Apigee 命名空間
kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml或者,使用以下命令:
kubectl delete $APIGEE_NAMESPACE
多實例安裝
多執行個體設定是指可跨多個區域或在同一區域內使用的混合設定。Apigee 建議您將第 2 個執行個體的設定整理到個別的目錄結構中,因為執行個體之間的環境設定 (副本等) 一定不同。每個執行個體的設定都會分離,並獨立整理到各自的資料夾結構中。
舉例來說,在多區域情境中,如果採用「主動-被動」設定,您可能會想在暖待機狀態下,設定第 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 上設定多實例
必要條件
在配置多個混合實例之前,您需要完成以下先決條件:
- 在多個區域(相同或不同)中使用不同的 CIDR 區塊設定 Kubernetes 集群
- 設定跨區域通訊
- 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 通訊埠 7000 和 7001 (疑難排解期間,7000 可能會做為備份選項)。另請參閱「設定通訊埠」。
您可以使用諸如 ntpdate 之類的工具來驗證伺服器時間是否同步。
設定多區域種子主機
- 從現有執行個體複製 $INSTANCE_NAME 資料夾,並新增至 instances 資料夾下方。
- 如果命名空間欄位的值與 instance1 命名空間不同,請修改該值。
- 依照 指定入口 TLS 憑證 中指定的步驟修改另一個實例的入口設定。
如要瞭解如何為其他執行個體設定負載平衡器 IP,請參閱「管理 Apigee Ingress 閘道」。
在檢索種子名稱之前,請將 kubectl 上下文設定為原始叢集。
kubectl config use-context original-cluster-name執行以下kubectl指令,以決定目前區域中 Cassandra 的種子主機位址。
kubectl get pods -o wide -n apigee -l app=apigee-cassandra上一個指令傳回的任何 Pod IP 都可以被視為多區域種子主機。
在第二個實例中,設定 Apigee 資料儲存 CR 的 ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml 檔案中 multiRegionSeedHost 的值。
設定新實例
將上下文設定為現有集群
kubectl config use-context existing-cluster-name將 apigee-ca 金鑰匯出到文件
kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml將環境設為新區域的叢集名稱:
kubectl config use-context NEW_CLUSTER_NAME將密鑰導入新集群
kubectl -n cert-manager apply -f apigee-root-certificate.yaml依照 建立初始化資源和控制器 中概述的步驟,在新實例(區域)中安裝混合模式。
在新資料中心的所有 pod 上部署 Cassandra。使用以下命令從集群中獲取 apigeeorg:
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"建立 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 是為第二個實例選擇的相同命名空間。這通常是“apigee”。
- APIGEEORG_VALUE 是上一步中 kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" 指令輸出的值。
- SOURCE_REGION 是來源叢集中 nodetool status 指令傳回的 cassandra 資料中心的值。
使用下列指令套用 CassandraDataReplication:
kubectl apply -f datareplication.yaml使用以下命令驗證重建狀態。
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 }從記錄檔驗證重建程序。此外,請使用 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從 Apigee 資料儲存 CR 移除
multiRegionSeedHost,然後執行以下命令以套用變更。kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore檢查 Cassandra 叢集狀態
以下命令可用於查看兩個資料中心中的叢集設定是否成功。此指令檢查兩個區域的 nodetool 狀態。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password statusDatacenter: 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
疑難排解
支持性、診斷和故障排除指南
在多區域 Apigee Hybrid 設定中使用 forceDelete 後進行手動清理
- 在以下範例中,有 2 個區域 -
us-east1和us-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進入 up 區域(此處為
us-east1)中的某個 Cassandra Pod。kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash apigee@apigee-cassandra-default-0:~$檢查節點工具狀態,它會顯示已刪除區域(此處為
us-west1)中所有已關閉的節點。apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} statusDatacenter: 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 statusDatacenter: 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 apigeeNAME COMPLETIONS DURATION AGE apigee-cassandra-schema-setup-apigee--0d2504c 0/1 5m54s 5m54s apigee-cassandra-user-setup--apigee--0d2504c 0/1 7s 7skubectl delete job apigee-cassandra-user-setup--apigee--0d2504c等待使用者設定作業完成
kubectl get jobs -n apigeeNAME 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。
使用下列指令登入偵錯 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)