護欄總覽
Apigee hybrid Guardrails 是一種機制,會在潛在問題影響 Hybrid 執行個體前,向客戶發出警示。換句話說,如果指令可能影響 Hybrid 執行個體的穩定性,Hybrid Guardrails 就會停止執行該指令。無論是設定錯誤或資源不足,Hybrid Guardrails 都會禁止修改混合式執行個體,直到問題風險排除為止。這能為客戶省下時間,不必花費數小時或數天解決問題。
搭配使用護欄與 Apigee Hybrid
如要使用 Hybrid Guardrails,請執行 Hybrid 安裝操作說明中記載的 Hybrid Helm 安裝或 Hybrid Helm 升級指令。不需額外指令即可執行 Guardrails。
當您為 Apigee Hybrid 發出 Helm 指令時,在 Helm 指令將設定套用至混合執行個體之前,會發生兩件事:
- Helm 會使用您套用的設定,建立暫時性的護欄 Pod。如果 Guardrails Pod 啟動至健康狀態,Pod 會根據套用的設定測試混合執行個體。如果測試通過,Guardrails Pod 就會終止,並將設定套用至 Apigee Hybrid 執行個體。
- 如果測試失敗,Guardrails Pod 會維持在健康狀態不良的狀態,以便診斷 Pod。helm 指令會顯示錯誤訊息,指出 Guardrails Pod 失敗。
以下範例說明如何使用 Guardrails 測試從混合執行個體到 Apigee 控制層的網路連線,做為安裝 apigee-datastore 元件的一部分。所有 Apigee hybrid 元件都可以使用相同的序列:
使用下列指令安裝 apigee-datastore 元件:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides.yaml
如果發生立即錯誤,Helm 指令也會顯示錯誤訊息,指出護欄檢查失敗,如下例所示:
helm upgrade datastore apigee-datastore/ \
--install \
--namespace apigee \
-f my-overrides.yaml
. . .
Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
* pod apigee-hybrid-helm-guardrail-datastore failed如要查看失敗的檢查項目和原因,請檢查護欄 Pod 記錄,如下例所示:
kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}在這個範例中,實際的測試失敗訊息是以下部分:
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}發出 helm 指令時,系統會自動佈建 Guardrails Pod。如果 Apigee 控制層連線測試通過,Guardrails Pod 會在執行結束時終止。
執行 helm install 指令後,請快速檢查 Pod 的狀態。下列輸出範例顯示 Guardrail Pod 處於健康狀態,表示控制層連線能力測試通過:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 2s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3s如果 Apigee 控制層連線測試失敗,Guardrails Pod 會維持在錯誤狀態,類似於下列輸出範例:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 4s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 5s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 6s暫時停用護欄
如要停用護欄檢查,請在 Helm 指令中加入 --no-hooks 旗標。以下範例顯示 Helm 指令中的 --no-hooks 旗標:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ -f overrides.yaml \ --no-hooks
Guardrails 檢查
下表列出 Apigee hybrid 1.15 版隨附的部分護欄檢查詳細資料。| 名稱 | 查核點 | 說明 |
|---|---|---|
cassandra_backup_enabled |
upgrade |
推出版本:1.14.0
嚴重性: 這項檢查會確認是否已啟用備份功能,再進行升級。升級前必須先備份,以便在必要時還原至先前版本。如要進一步瞭解可用的備份選項,請參閱「Cassandra 備份與復原」。 |
cassandra_recent_backup_csi |
upgrade |
推出版本:1.14.0 嚴重性: 如果已啟用 CSI 備份,這項檢查會要求在升級前,必須有過去 24 小時內的備份。這樣一來,如果需要還原至先前的版本,就能盡可能減少資料遺失。如要進一步瞭解 CSI 備份與還原,請參閱「CSI 備份」。 |
在覆寫檔案中設定護欄
從 Apigee Hybrid 1.12 版開始,系統預設會在每個圖表中設定護欄。您可以在 overrides 檔案中覆寫圖片網址、標記和圖片提取政策。
舉例來說,下列 Guardrails 映像檔網址、標記和提取政策會新增至覆寫檔案:
# Apigee Ingressgateway
ingressGateway:
image:
pullPolicy: Always
## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "1.15.9"
pullPolicy: Always
搭配使用 Kubernetes 容忍度和護欄
您也可以在 overrides 檔案中,為護欄新增容忍度。如果 Guardrails overrides 設定下未定義容忍度,Guardrails 會使用任何全域定義的容忍度。
舉例來說,如要在 overrides 檔案的 Guardrails 區段中加入容許,請新增類似下列的段落:
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "1.15.9"
pullPolicy: Always
tolerations:
- key: "say"
operator: "Equal"
value: "taunt"
effect: "NoSchedule"