從 AKS 叢集中的 Windows 節點擷取 TCP 傾印

當您使用 Microsoft Azure Kubernetes Service (AKS) 叢集時,可能會發生網路問題。 為了協助調查這些問題,本文說明如何從 AKS 叢集中的 Windows 節點擷取 TCP 傾印,然後將擷取下載到本機計算機。

必要條件

步驟 1:尋找要進行疑難解答的節點

如何判斷要從哪個節點提取 TCP 傾印? 您會先使用 Kubernetes 命令行用戶端 kubectl 取得 AKS 叢集中的節點清單。 請依照指示連線到叢集,並kubectl get nodes --output wide使用 Azure 入口網站Azure CLI 執行命令。 會出現類似下列輸出的節點清單:

$ kubectl get nodes --output wide
NAME                                STATUS   ROLES   AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
akswin000000                        Ready    agent   3m8s    v1.20.9   10.240.0.4     <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000001                        Ready    agent   3m50s   v1.20.9   10.240.0.115   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000002                        Ready    agent   3m32s   v1.20.9   10.240.0.226   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6

步驟 2:連線到 Windows 節點

下一個步驟是建立與 AKS 叢集節點的連線。 您可以使用安全殼層 (SSH) 金鑰進行驗證,或使用遠端桌面通訊協定中的 Windows 系統管理員密碼 (RDP) 連線。 這兩種方法都需要建立中繼連線,因為您目前無法直接連線到 AKS Windows 節點。 無論您是透過 SSH 或 RDP 連線到節點,都必須指定 AKS 節點的使用者名稱。 根據預設,此使用者名稱為 azureuser

如果您有 SSH 金鑰, 請建立與 Windows 節點的 SSH 連線。 SSH 金鑰不會儲存在您的 AKS 節點上。 SSH 金鑰會還原為在任何期間初始安裝在叢集上的金鑰:

  • 重新開機
  • 版本升級
  • 節點映射升級

步驟 3:建立封包擷取

當您透過 SSH 或 RDP 連線到 Windows 節點時,會出現 Windows 命令提示字元的形式:

azureuser@akswin000000 C:\Users\azureuser>

現在,開啟命令提示字元,並輸入下方的 Network Shell (netsh) 命令,以 (netsh 追蹤開始) 擷取追蹤。 此命令會啟動封包擷取程式。

netsh trace start capture=yes tracefile=C:\Users\azureuser\AKS_node_name.etl 

輸出會顯示如下欄文字:

Trace configuration:
-------------------------------------------------------------------
Status:             Running
Trace File:         AKS_node_name.etl
Append:             Off
Circular:           On
Max Size:           250 MB
Report:             Off

當追蹤正在執行時,請復寫您的問題多次。 此動作可確保已在 TCP 傾印中擷取問題。 請記下複寫問題時的時間戳。 若要在完成時停止封包擷取,請輸入 netsh trace stop

azureuser@akswin000000 C:\Users\azureuser>netsh trace stop
Merging traces ... done
Generating data collection ... done
The trace file and additional troubleshooting information have been compiled as "C:\Users\azureuser\AKS_node_name.cab".
File location = C:\Users\azureuser\AKS_node_name.etl
Tracing session was successfully stopped.

步驟 4:在本機傳輸擷取

完成封包擷取之後,請識別協助程式Pod,以便在本機複製傾印。 開啟第二個控制台,然後執行 來取得 Pod kubectl get pods清單,如下所示。

kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   2          3d21h
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   2          3d21h
node-debugger-aks-nodepool1-38878740-vmss000000-6ztp6   1/1     Running   0          3m58s

協助程式 Pod 的前置詞為 node-debugger-aks,如第三列所示。 取代 Pod 名稱,然後執行下列安全複製 (scp) 命令。 這些命令會擷取事件追蹤記錄檔 (.etl) ,並封存針對封包擷取產生的 (.cab) 檔案。

scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.cab .
scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.etl .

類似下列文字的輸出隨即出現:

$ scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.cab .

Authorized uses only. All activity may be monitored and reported.
AKS_node_name.cab                                                                  100%  571KB 984.0KB/s   00:00

scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.etl .

Authorized uses only. All activity may be monitored and reported.
AKS_node_name.etl                                                                  100% 1536KB   1.3MB/s   00:01

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群