從 AKS 叢集中的 Windows 節點擷取 TCP 傾印
當您使用 Microsoft Azure Kubernetes Service (AKS) 叢集時,可能會發生網路問題。 為了協助調查這些問題,本文說明如何從 AKS 叢集中的 Windows 節點擷取 TCP 傾印,然後將擷取下載到本機計算機。
必要條件
- Azure CLI 2.0.59 版或更新版本。 您可以在網頁瀏覽器中開啟 Azure Cloud Shell,以輸入 Azure CLI 命令。 或在本機電腦上 安裝或升級 Azure CLI 。 若要尋找電腦上安裝的版本,請執行
az --version
。 - AKS 叢集。 如果您沒有 AKS 叢集,請使用 Azure CLI 或透過 Azure 入口網站 建立一個叢集。
步驟 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 意應見反社群。