徵兆
當您採取下列其中一個動作時,您會收到「來自伺服器的錯誤:錯誤撥號後端:撥號 tcp」錯誤訊息:
- 使用任何
kubectllogs、exec、、attachtop或port-forward命令。 - 使用第三方 Kubernetes 用戶端工具來達到與上一個清單專案中命令相同的功能。
發生錯誤的原因
Kubernetes API 伺服器必須針對數個使用案例,將 API 要求轉送至上游元件。 如果 API 伺服器無法建立上游元件的 TCP 連線,就會發生此錯誤。 這類上游元件的範例包括叢集和 kubelet 內的 kubernetes 服務。
如果問題持續發生,網路封鎖可能是原因。 若要識別負責任的網路組態,請先判斷問題的範圍。
縮小範圍:所有 kubectl 子命令是否失敗?
嘗試至少 kubectl exec執行、 kubectl logs <podname>和 kubectl top pods 命令。
如果只有 kubectl logs <podname> 或 kubectl exec 失敗,請檢查問題是否發生在不同節點上的 Pod。
如果只 kubectl top pods 失敗,請檢查所有節點上的Pod是否發生問題,或只針對一個節點上的Pod發生問題。
原因 1:kubelet 埠 (node:10250) 遭到封鎖
當 API 伺服器無法連線到埠 10250 上的節點以存取 Kubelet API 時,就會發生 Pod 特定的存取問題,例如執行 和 kubectl logs時遇到的kubectl exec問題。 這些問題可能是網路安全組 (NSG) 或防火牆封鎖的連線所造成。
若要解決此問題,請檢查節點子網上的 NSG 是否包含可能封鎖 TCP 連接埠 10250 的輸入規則。
原因 2:特定服務失敗
Kubernetes 會存取 svc/metrics-server 命名空間底下的 kube-system kubectl top 命令。 還有其他案例,例如 許可 Webhook,其中 API 伺服器也可以連線到其他服務。 請務必注意,根據服務失敗模式,錯誤訊息可能會有所不同。
若要針對問題進行疑難解答,請檢查錯誤訊息,以識別受影響的服務,並檢閱相關 Pod、服務和端點的狀態。
原因 3:Konnectivity 或通道失敗
未啟用 API Server VNet 整合時,AKS 會部署通道解決方案,以 Proxy API 伺服器對叢集中網路位置的要求。 大部分的 AKS 叢集都會使用 Konnectivity 解決方案。 Konnectivity 不需要您在 API 伺服器上開啟特殊埠。 如需詳細資訊,請參閱 AKS 必要的網路規則。
若要解決此問題,請檢查命名空間中的 konnectivity-agent 是否kube-system正在執行,且其容器處於就緒狀態。 嘗試刪除 Pod,以查看連線是否在新的 Pod 就緒之後復原。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
與我們連絡,以取得說明
如果您有疑問,可以詢問 Azure 社群支援。 您也可以向 Azure 意見反應社群提交產品意見反應。