防護機制總覽
Apigee Hybrid Guardrails 是一種機制,可在潛在問題影響 Hybrid 執行個體前,提醒客戶。換句話說,如果 Hybrid 限制條件會在 Hybrid 執行個體的穩定性受到威脅時,停止指令。無論是設定錯誤或資源不足,Hybrid Guardrails 都會防止對 Hybrid 執行個體進行任何修改,直到問題風險消除為止。這樣一來,客戶就不必花費時間解決通常需要花上數小時或數天才能解決的問題。
搭配 Apigee Hybrid 使用 Guardrails
如要使用 Hybrid 警示線,請執行 Hybrid 安裝說明中所述的相同 Hybrid Helm 安裝或 Hybrid Helm 升級指令。您不需要額外指令即可執行 Guardrails。
當您為 Apigee Hybrid 發出 Helm 指令時,Helm 指令會先執行兩項操作,然後才將設定套用至 Hybrid 執行個體:
- Helm 會使用您套用的設定建立臨時 Guardrails Pod。如果 Guardrails 容器啟動至健康狀態,則會根據您套用的設定,測試混合型執行個體。如果測試通過,系統就會終止 Guardrails pod,然後將設定套用至 Apigee Hybrid 執行個體。
- 如果測試失敗,Guardil 的 pod 會維持在無效狀態,以便對 pod 進行診斷。Helm 指令會顯示錯誤訊息,指出 Guardrails Pod 已失敗。
以下範例說明如何使用 Guardrails 測試從 Hybrid 執行個體到 Apigee 控制平面的網路連線,做為 apigee-datastore
元件安裝作業的一部分。您可以為所有 Apigee 混合式元件使用相同的序列:
使用下列指令安裝 apigee-datastore 元件:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides.yaml
如果發生即時錯誤,Helm 指令也會顯示錯誤訊息,說明 Guardrails 檢查失敗,如下例所示:
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
如要查看哪些檢查失敗以及原因,請查看 Guardrails 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 Control Plane 連線測試通過,系統會在執行結束時終止 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
暫時停用 Guardrails
如果您需要停用 Guardrails 檢查,請在 Helm 指令中新增 --no-hooks
旗標。以下範例顯示 Helm 指令中的 --no-hooks
標記:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ -f overrides.yaml \ --no-hooks
在覆寫檔案中設定 Guardrails
從 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: "12345_6789abcde" pullPolicy: Always
搭配 Guardrails 使用 Kubernetes 容忍度
您也可以在 overrides
檔案中為 Guardrail 新增容許值。如果在 Guardrails overrides
設定下未定義容許值,Guardrails 會使用任何全域定義的容許值。
舉例來說,如要在 overrides
檔案的「Guardrails」區段中加入容許值,您可以新增類似下列的段落:
# Apigee Guardrails guardrails: image: url: "gcr.io/ng-hybrid/guardrails/apigee-watcher" tag: "12345_6789abcde" pullPolicy: Always tolerations: - key: "say" operator: "Equal" value: "taunt" effect: "NoSchedule"
排解限制機制問題
環境變數檢查點遺漏或空白
如果您在 apigee 操作員 guradrails pod 記錄中看到 Client.Timeout exceeded
錯誤,請參閱以下疑難排解步驟,判斷問題是出在護欄還是基礎架構。
- 建立新的 yaml 檔案,並加入下列內容。您可以隨意命名 YAML 檔案。
- 使用下列指令套用新的 yaml 檔案:
- 使用下列指令進入 Pod:
- 在
apigee-simple-client
Pod 中執行下列指令,然後查看輸出內容:
apiVersion: v1 kind: Pod metadata: labels: name: apigee-simple-client spec: containers: - name: apigee-simple-client image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.10.1" imagePullPolicy: Always command: - sleep - "3650d" restartPolicy: Never hostNetwork: false
kubectl apply -n apigee-system -f name of the yaml file
kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
curl -v -I --proxy http://cspnaproxy1.wlb2.nam.nsroot.net:8882 https://apigee.googleapis.com
cspnaproxy1.wlb2.nam.nsroot.net
是 Proxy 位址。您可以使用任何可存取的 Proxy 地址。如果您無法存取 Proxy,可以使用下列指令測試網路連線:
curl -v -I https://apigee.googleapis.com
如果 curl 指令成功連線至 HTTP Proxy 並到達 apigee.googleapis.com
,則 curl 指令應傳回 HTTP 回應碼。如果 curl 指令無法存取 Proxy,或無法透過 Proxy 連線至 apigee.googleapis.com
,curl 指令應會顯示錯誤。