逐步排解 Cloud Service Mesh 問題
本節說明如何排解及解決使用 Cloud Service Mesh 時的問題。如需其他協助,請參閱取得支援。
疑難排解步驟
請按照下列一般步驟排解 Cloud Service Mesh 問題:
- 使用自動設定驗證工具。
- 確認是否有常見問題,並查看是否有已知的解決方法。
- 縮小問題範圍。
- 查看相關記錄和資訊。
- 收集診斷記錄檔並尋求協助。
Cloud Service Mesh 診斷工具可偵測常見的設定問題。請按照這些操作說明安裝疑難排解工具。
事前準備
請確認 kubeconfig 檔案中含有叢集的 kubeconfig 背景資訊。如果沒有,請執行下列指令:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_LOCATION --project=PROJECT_NAME
更改下列內容:
CLUSTER_NAME
:叢集名稱。CLUSTER_LOCATION
:叢集的可用區或區域。PROJECT_NAME
:專案名稱。
確認已建立應用程式預設憑證。如果不是,請執行下列其中一個指令:
gcloud auth application-default login --billing-project=PROJECT_NAME
gcloud auth application-default set-quota-project PROJECT_NAME
將
PROJECT_NAME
替換為您的專案名稱。
查看控制層狀態
下列指令可協助您瞭解 Cloud Service Mesh 控制層的狀態:
代管
取得 Cloud Service Mesh 控制平面中用戶端連線狀態的清單:
gcloud beta container fleet mesh debug proxy-status \ --membership=MEMBERSHIP_NAME \ --location=MEMBERSHIP_LOCATION \ --project=PROJECT_NAME
更改下列內容:
MEMBERSHIP_NAME
:會員方案名稱。MEMBERSHIP_LOCATION
:會員區域。您可以使用gcloud container fleet memberships list --project FLEET_PROJECT_ID
查看會員的位置,方法是將FLEET_PROJECT_ID
替換為車隊專案 ID。PROJECT_NAME
:專案名稱。
下表說明可能的回應。
不明 (預設) 無法取得或未知狀態資訊。 已同步 控制層已將設定傳送至用戶端,並收到來自用戶端的 ACK。 錯誤 控制層將設定傳送至用戶端,並接收來自用戶端的 NACK。 已過期 控制平面已將設定傳送至用戶端,但未收到來自用戶端的 ACK 或 NACK。 未傳送 未傳送設定。 不適用 不適用。 不支援 疑難排解 API 不支援同步處理狀態。
叢集內
kubectl get pods -n istio-system
kubectl describe -n istio-system
- 針對 istio-system 中的所有 Pod:
kubectl logs -n istio-system -l istio --all-containers
istioctl version
istioctl proxy-status
kubectl get configmap istio -o yaml && kubectl get configmap istio-sidecar-injector -o yaml
kubectl top pods -n istio-system
請使用下列指令瞭解部署規模:
kubectl get nodes
kubectl get services --all-namespaces
kubectl get pods --all-namespaces
查看 Proxy 設定
下列指令可協助您瞭解 Cloud Service Mesh 代理程式設定:
代管
gcloud beta container fleet mesh debug proxy-config POD_NAME.NAMESPACE \
--type=TYPE \
--membership=MEMBERSHIP_NAME \
--location=MEMBERSHIP_LOCATION \
--project=PROJECT_NAME
POD_NAME
:Pod 名稱。NAMESPACE
:Pod 的命名空間。TYPE
:下列項目之一:叢集、收聽器、路徑、端點、啟動程序、記錄、密鑰、全部。MEMBERSHIP_NAME
:會員方案名稱。MEMBERSHIP_LOCATION
:會員區域。您可以使用gcloud container fleet memberships list --project FLEET_PROJECT_ID
查看會員的位置,方法是將FLEET_PROJECT_ID
替換為車隊專案 ID。PROJECT_NAME
:專案名稱。
叢集內
使用 istioctl proxy-config
即可查看叢集內控制平面 Proxy 設定。詳情請參閱「偵錯 Envoy 和 istiod」。
如果問題仍未解決,請參閱下一節,瞭解是否已知曉你的問題。
檢查常見問題和解決方案
您可以節省時間,檢查您的問題症狀是否與以下常見問題和解決方法相符,這些問題和解決方法已依 Cloud Service Mesh 功能領域分組:
- 安裝問題
- 受管理的控制層問題
- 觀測能力問題
- 非Google Cloud 部署問題
- Proxy 問題
- 資源問題
- 資源調度問題
- 安全性問題
- 流量管理問題
- Webhook 問題
- Sidecar Proxy 問題
如果這樣做無法解決問題,請參閱下一節。
縮小問題範圍
Cloud Service Mesh 由多項技術組成,這些技術會共同運作,這表示某些類型的問題會與特定功能領域或元件相關聯。每個元件都會產生有用的記錄。在嘗試手動分析他們提供的大量資訊之前,請先回答下列問題,縮小排解問題的範圍:
- 問題是否發生在控制層或資料層 (例如
istiod
或 Envoy Proxy)? - 您在哪個功能領域遇到問題,例如網路、遙測、安全性等?
- 服務網狀結構是否有流量損失,或是在特定部署中發生?
- 是否因為無法在服務網格中擴充流量,導致問題出現或惡化?
- 這個問題是否會導致延遲或其他效能問題?
- 你可以重現問題嗎?
- 問題是否是在 Istio、GKE 等最近的設定變更後開始發生?
- 服務網格中的流量是否有增加或遽增的情形?
- 這個叢集是否啟用了任何明顯的功能或非典型部署?
- 您是否觀察到 CPU 或記憶體使用率偏高?如果是的話,預期的大量使用量是多少?
- 是否有配額限制需要考量?
查看相關記錄和資訊
縮小問題範圍後,您就能更有效率地專注於特定記錄和資訊。如要瞭解 Cloud Service Mesh 產生的記錄,以及如何解讀記錄中包含的資訊,請參閱「解讀 Cloud Service Mesh 記錄」。