對 TKGS 叢集網路錯誤進行疑難排解時,請參閱本節中的提示。

檢查節點網路

每個 TKG 叢集應具有以下網路資源。
網路物件 網路資源 說明 疑難排解 命令
VirtualNetwork 第 1 層路由器和連結的區段 叢集的節點網路 確保已指派 SNAT IP
kubectl get virtualnetwork -n NS-NAME
VirtualNetworkInterface 區段上的邏輯連接埠 叢集節點的節點網路介面 確保每個 VirtualMachine 都具有 IP 位址
kubectl get virtualmachines -n NS-NAME NODE-NAME

檢查控制平面的負載平衡器

TKG 叢集控制平面的負載平衡器提供對 Kubernetes API 伺服器的存取。此負載平衡器由系統在建立叢集期間自動佈建。它應具有以下資源。

檢查控制平面負載平衡器的狀態,可以協助您瞭解發生錯誤時資源是否已準備就緒。通常,您可以使用該命令在主管叢集中找出該負載平衡器: kubectl get services -A | grep control-plane-service
網路物件 網路資源 說明 疑難排解 命令
VirtualMachineService 不適用 VirtualMachineService 已建立並已轉譯為 k8s 服務。 確保其狀態已更新並包含負載平衡器虛擬 IP (VIP)。
kubectl get virtualmachineservices -n NS-NAME SERVICE-NAME
服務 具有 VirtualServer 執行個體的負載平衡器伺服器和相關聯的伺服器集區 (成員集區) 已建立負載平衡器類型的 Kubernetes 服務,以存取 TKG 叢集 API 伺服器。 確保已指派外部 IP。確保可以透過 LB 服務的外部 IP 存取 TKG 叢集 API。
主管命名空間:
kubectl get services -A | grep control-plane-service
叢集命名空間:
kubectl get services -n NS-NAME
任一命名空間
curl -k https://EXTERNAL-IP:PORT/healthz
端點 端點成員 (TKG 叢集控制平面節點) 應位於成員集區中。 將建立端點以包含所有 TKG 叢集控制平面節點。
kubectl get endpoints -n NS-NAME SERVICE-NAME

檢查 worker 節點上的負載平衡器服務

在建立 LoadBalancer 類型的 Kubernetes 服務時,使用者會為 TKG 叢集工作節點建立負載平衡器執行個體。

第一步是確保雲端提供者正在 TKG 叢集上執行。
kubectl get pods -n vmware-system-cloud-provider
驗證相關 Kubernetes 物件是否已建立且處於正確狀態。
網路物件 網路資源 說明 命令
主管中的 VirtualMachineService 不適用 在主管中建立 VirtualMachineService 並在主管中轉譯為 Kubernetes 服務
kubectl get virtualmachineservice -n NS-NAME SVC-NAME
主管中的負載平衡器服務 TKG 叢集負載平衡器中的 VirtualServer 以及相關聯的成員集區。 在主管中建立負載平衡器服務以存取此 LB 類型的服務
kubectl get services -n NS-NAME SVC-NAME
主管中的端點 端點成員 (TKG 叢集工作節點) 應位於 NSX 中的成員集區中。 將建立端點以包含所有 TKG 叢集 worker 節點
# kubectl get endpoints -n NS-NAME SVC-NAME
TKG 叢集中的負載平衡器服務 不適用 使用者部署的 TKG 叢集中的負載平衡器服務應使用負載平衡器 IP 更新其狀態
kubectl get services

檢查 主管 NSX 網路堆疊

Kubernetes API 伺服器、NCP 網繭以及在任何控制器網繭中執行的管理程式容器是檢查基礎結構網路問題的主要起點。

以下錯誤訊息可能表明網路網狀架構層的任意點 (包括 ESXi 主機 NIC 連線到的實體連接埠群組) 存在路由或 MTU 問題:
{"log":"I0126 19:40:15.347154 1 log.go:172] http: TLS handshake error from 
100.64.128.1:4102: EOF\n","stream":"stderr","time":"2021-01-26T19:40:15.347256146Z"}
若要進行疑難排解,請透過 SSH 連線到 ESXi 主機並執行以下命令:
esxcli network ip interface ipv4 get

此命令將列出主機的所有 vmkernel 介面。如果您只有一個 TEP 介面,它將始終為 vmk10。如果您還有第二個或第三個 TEP 介面,則為 vmk11 和 vmk12,依此類推。建立的 TEP 介面數量取決於在上行設定檔中指派給 TEP 的上行數量。如果選擇對各上行中的 TEP 進行「負載共用」,則會為每個上行建立一個 TEP 介面。

主 TEP 到 TEP ping 命令具有以下語法:
vmkping ++netstack=vxlan -s 1572 -d -I vmk10 10.218.60.66 
其中
  • -s 是封包大小
  • -d 表示不分段
  • -I 表示從 vmk10 取得上行
  • IP address 是要執行 Ping 動作的其他 ESXi 主機或 NSX Edge 上的 TEP 介面
如果 MTU 設定為 1600,則大小超過 1573 的封包會失敗 (只需 MTU 大於 1500 即可)。如果 MTU 設定為 1500,則大小超過 1473 的任何封包都會失敗。如果要從其他 TEP 介面取得 ping,則可能需要將其變更為 vmk11。