疑難排解 Istio CNI 外掛程式
本頁說明如何疑難排解 Istio CNI 外掛程式的問題。在閱讀本文之前,您應該閱讀CNI 安裝和操作指南。
記錄
Istio CNI 外掛程式記錄提供有關外掛程式如何根據 PodSpec
設定應用程式 Pod 流量重新導向的資訊。
此外掛程式在容器執行階段處理程序空間中執行,因此您可以在 kubelet
記錄中看到 CNI 記錄項目。為了方便除錯,CNI 外掛程式也會將其記錄傳送到 istio-cni-node
DaemonSet。
CNI 外掛程式的預設記錄層級為 info
。若要取得更詳細的記錄輸出,您可以編輯 values.cni.logLevel
安裝選項並重新啟動 CNI DaemonSet Pod 來變更層級。
Istio CNI DaemonSet Pod 記錄也提供有關 CNI 外掛程式安裝和競爭條件修復的資訊。
監控
CNI DaemonSet 產生指標,可用於監控 CNI 安裝、就緒狀態和競爭條件緩解。Prometheus 抓取註解 (prometheus.io/port
、prometheus.io/path
) 預設會新增到 istio-cni-node
DaemonSet Pod。您可以透過標準 Prometheus 設定來收集產生的指標。
DaemonSet 就緒
CNI DaemonSet 的就緒狀態表示 Istio CNI 外掛程式已正確安裝並設定。如果 Istio CNI DaemonSet 未就緒,則表示出現問題。請查看 istio-cni-node
DaemonSet 記錄以進行診斷。您也可以透過 istio_cni_install_ready
指標追蹤 CNI 安裝就緒狀態。
修復競爭條件
預設情況下,Istio CNI DaemonSet 已啟用競爭條件緩解,這將會驅逐在 CNI 外掛程式就緒之前啟動的 Pod。若要了解哪些 Pod 被驅逐,請尋找類似以下的記錄行
2021-07-21T08:32:17.362512Z info Deleting broken pod: service-graph00/svc00-0v1-95b5885bf-zhbzm
您也可以透過 istio_cni_repair_pods_repaired_total
指標追蹤已修復的 Pod。
診斷 Pod 啟動失敗
CNI 外掛程式的一個常見問題是,由於容器網路設定失敗,導致 Pod 無法啟動。通常,失敗原因會寫入 Pod 事件,並可透過 Pod 描述查看
$ kubectl describe pod POD_NAME -n POD_NAMESPACE
如果 Pod 持續出現初始化錯誤,請檢查初始化容器 istio-validation
記錄中是否有類似以下的「連線被拒絕」錯誤
$ kubectl logs POD_NAME -n POD_NAMESPACE -c istio-validation
...
2021-07-20T05:30:17.111930Z error Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
2021-07-20T05:30:18.112503Z error Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
...
2021-07-20T05:30:22.111676Z error validation timeout
istio-validation
初始化容器會設定一個本機虛擬伺服器,該伺服器會監聽流量重新導向目標的輸入/輸出埠,並檢查測試流量是否可以重新導向至虛擬伺服器。當 CNI 外掛程式未正確設定 Pod 流量重新導向時,istio-validation
初始化容器會阻止 Pod 啟動,以防止流量繞過。若要查看是否有任何錯誤或非預期的網路設定行為,請在 istio-cni-node
中搜尋 Pod ID。
另一個 CNI 外掛程式故障的症狀是,應用程式 Pod 在啟動時會持續被驅逐。這通常是因為外掛程式未正確安裝,因此無法設定 Pod 流量重新導向。CNI 競爭修復邏輯會認為 Pod 因競爭條件而損壞,並持續驅逐 Pod。當遇到此問題時,請檢查 CNI DaemonSet 記錄以取得有關外掛程式為何無法正確安裝的資訊。