預先發布版使用者指南:
預先發布版 Apigee Hybrid 1.8 版安裝與管理程序。
本文內容:
- 預覽
- 總覽
- 必要條件
- Apigee Hybrid 基本安裝
- 自訂 Apigee Hybrid 安裝作業
- Kustomize 和元件
- 概念
- 瞭解指令碼
- Apigee Hybrid 設定資料夾結構
- 將服務帳戶金鑰儲存在外部保存庫
- Apigee Hybrid 升級
- Apigee Hybrid 回復
- 清除
- 刪除環境
- 多執行個體安裝
預覽
本文適用於 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 之前,您應已完成本文件下列章節中列出的操作說明:
- 專案和機構設定
- 總覽 Apigee Hybrid 的安裝先決條件。
- 步驟 1:啟用 API
- 步驟 2:建立機構
- 步驟 3:建立環境和環境群組
- 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 服務帳戶,並用於所有個別元件
- 所有加密金鑰和密碼的預設值。
下載設定檔
複製 https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1
的 GitHub 存放區,下載並準備設定檔:
複製存放區:
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
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 指令碼自動執行該步驟):
下載設定檔
下載並準備設定檔:
在
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
如果選擇其他命名空間名稱,可以選擇下列其中一個選項:
- (建議) 在編輯資源 YAML 中預先填入值時,使用
--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
欄位值設為私有存放區主機路徑。(詳情請參閱圖片中心)。imageHub: "your.private.repo/apigee/hybrid"
這樣可確保所有 Apigee Hybrid 元件都使用私有存放區中的映像檔。
此外,您可能也想為「控制器」和 Apigee Ingress 閘道使用私人映像檔,為此您必須編輯 apigee-controller-deployment.yaml 和 apigee-ingressgateway-manager-deployment.yaml 檔案,並將所有 image
欄位替換為私人存放區中的映像檔。
設定 imagePullSecrets (選用)
- 建立包含憑證的 Kubernetes 密鑰,用來向私人存放區驗證。請參閱「從私人登錄檔提取映像檔」,瞭解如何建立密鑰。
- 建立密鑰後,只要參照該密鑰即可。方法是編輯 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 憑證。您可以:
- 使用已知授權單位簽署的憑證,方法請參閱「取得傳輸層安全標準 (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
欄位。
根據預設,我們會使用預設參數建立一個 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-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 和元件
總覽
新的混合式安裝作業會沿用 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
中將相關密鑰名稱新增至清單
- 必要:在
用法:
- 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
如果您已安裝 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-runtime
或apigee-data
變更為所需值。
- 選用:將節點選取器標籤的值從
用法:
- 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
如果您已安裝 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
行。請注意,在遙測中,我們為 metrics
和 logger
元件提供個別的工作負載身分增效工具,可分別啟用。
用法:
- 如果您尚未安裝混合式叢集,只要按照上一節所述啟用 Workload Identity,然後繼續安裝,系統就會自動使用 Workload Identity。
如果您已安裝 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
:必要欄位。HTTP
或HTTPS
其中之一host
:必要,Proxy 的主機位址port
:必要的通訊埠號碼username
:選用 與 Proxy 相關聯的使用者名稱password
:選用,用來存取 Proxy 的密碼
用法:
- 如果您尚未安裝 Apigee Hybrid,可以繼續執行安裝步驟,這些變更會在過程中套用
如果您已安裝 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
必要條件:
下載具有 Storage 物件管理員角色的帳戶的 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 建立這個密鑰。
啟用:
- 如要啟用備份功能,請取消註解 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」。
- 建立新的 Kubernetes 叢集和命名空間,用於還原混合式執行階段部署作業。您無法使用原始混合式安裝作業所用的叢集和命名空間。
除了您想要的任何其他設定外,請使用上述設定安裝 Hybrid 到新叢集:
- 您可以選擇使用基本安裝,並在新命名空間中安裝 Hybrid:
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}
- 或者,按照自訂 Apigee Hybrid 安裝程序,根據您的選擇設定項目。
還原完成後,即可刪除舊命名空間中的所有資源,並切換至新命名空間。
詳情請參閱「還原備份」。
non-gcs-backup 和 non-gcs-restore
這個 kustomize 元件可用於將 Cassandra 資料庫備份到 Google Cloud Storage,以及從 Google Cloud Storage 還原 Cassandra 資料庫。
語言:
overlays/instances/{INSTANCE_NAME}/datastore
必要條件:
- 您可以參考設定伺服器和 SSH 的現有文件。
在上述步驟中,您需要使用安全殼層私密金鑰,該金鑰位於按照先前步驟產生的「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
- 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
- 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 還原總覽」。
- 建立新的 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
如需操作說明,請參閱「啟用非 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
,並覆寫上一個步驟中建立的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}
。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.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 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)
└── ...
新增環境非常簡單,只要:
- 在環境目錄中建立新資料夾 (或您設定的資料夾結構)
- 將現有環境中的
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 Datastore 中使用強制刪除功能
如果資料存放區刪除作業因故無法繼續進行,現在可以使用下列指令強制刪除 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-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 核發憑證的 Issuer
和 Certificate
資源。也包含 Issuer
,用於向各種 Pod 發放憑證,以進行 TLS 通訊。
rbac
包含各種元件會使用的 Role
、ClusterRole
、RoleBinding
和 ClusterRoleBinding
。
crds
Contains the definition of all the CRDs which are used by Apigee.
webhook
包含 ValidatingWebhookConfiguration
和 MutatingWebhookConfiguration
,用於對自訂資源執行驗證。
輸入
包含適用於所有 Ingress POD 的設定。例如:常見的標頭修改、健康狀態檢查等。
openshift
包含 openshift SecurityContextConstraints 的定義。
控制器
apigee-controller
apigee-hybrid-config.yaml
包含 ConfigMap
,該 ConfigMap
會以輸入內容的形式提供給 apigee-controller-manager.yaml。這個 ConfigMap 包含 imageHub
、imagePullSecrets
、forwardProxy
等設定。
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 服務帳戶金鑰。
- 我們將使用 Helm 在叢集中安裝 Vault 相關資源。按照「安裝 Helm」中的步驟,在系統中設定 Helm。
按照「安裝 Vault Helm 資訊套件」中的步驟操作,也就是:
將 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 開發 Pod 中取得殼層
kubectl exec -it vault-0 -- /bin/sh ```
在本例中,我們將使用鍵/值密碼引擎儲存資料。
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 提供身分,並允許 Pod 向其他系統進行驗證。
在 Vault 開發 Pod 中取得殼層
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
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
套用
yaml
kubectl 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 平台
您不需每次都執行這個步驟,但如果較新版本的 Apigee Hybrid 不再支援 Kubernetes 平台 (例如 Kubernetes、OpenShift) 和元件 (例如 cert-manager、Cassandra 等),您就必須升級這些平台和元件的版本。文件中會列出平台和元件的支援版本。
下載設定檔
下載存放區,並將現有 Apigee Hybrid 設定中的 bases
和 tools
資料夾替換為較新的資料夾:
在
https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1
複製 GitHub 存放區預覽版 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 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 回復
還原 apigee-hybrid-setup
移至包含舊版 Apigee Hybrid 設定的目錄。如果沒有,請從步驟 1[link] 中建立的 zip 檔案還原,該檔案是在 Apigee Hybrid 升級期間建立。
回溯 Kubernetes 元件
套用 apigee CR 的變更
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
復原控制器
按照建立初始化資源和控制器的步驟,在 Apigee Hybrid 安裝工作流程中執行相同操作。您可以使用指令碼,也可以按照手動步驟回溯初始化資源和控制器。
清除所用資源
您必須清除升級期間建立的所有新資源,例如新版 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 服務帳戶密鑰、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}')
如果是 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 個執行個體的設定整理到個別的目錄結構中,因為執行個體之間的環境設定 (副本等) 一定不同。每個執行個體的設定都會分離,並獨立整理在各自的資料夾結構中。
舉例來說,在多區域情境中設定 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 等工具,確認伺服器時間已同步。
設定多區域種子主機
- 從現有執行個體複製 $INSTANCE_NAME 資料夾,並新增至執行個體資料夾下方。
- 如果命名空間欄位的值與 instance1 命名空間不同,請修改該值。
- 請按照「指定 Ingress 傳輸層安全標準 (TLS) 憑證」一文中的步驟,修改其他執行個體的 Ingress 設定。
如要瞭解如何為其他執行個體設定負載平衡器 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 都可以視為多區域種子主機。
在第 2 個執行個體中,設定 ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml 下方 apigee datastore CR 中的 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 與為第 2 個執行個體選擇的命名空間相同。通常是「apigee」。
- APIGEEORG_VALUE 是上一個步驟中,kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" 指令輸出的值。
- SOURCE_REGION 是來源叢集 nodetool 狀態的 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 datastore 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 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
疑難排解
支援、診斷與疑難排解指南
在多區域 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
在正常運作的區域 (此處為
us-east1
) 中,執行其中一個 Cassandra Podkubectl 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。
使用下列指令登入偵錯 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)