從 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 叢集中的節點清單。 請遵循指示來連線到叢集,並使用 Azure 入口網站 或 Azure CLI 執行 kubectl get nodes --output wide
命令。 隨即會出現類似下列輸出的節點清單:
$ 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) 金鑰,或在遠端桌面通訊協定 (RDP) 連線中使用 Windows 系統管理員密碼進行驗證。 這兩種方法都需要建立中繼連線,因為您目前無法直接連線到 AKS Windows 節點。 無論您是透過 SSH 或 RDP 連線到節點,都必須指定 AKS 節點的使用者名稱。 根據預設,此使用者名稱為 azureuser。 除了使用 SSH 或 RDP 連線之外,您還可以從 HostProcess 容器連線到 Windows 節點。
使用下列內容建立 hostprocess.yaml 。 將取代
AKSWINDOWSNODENAME
為 AKS Windows 節點名稱。apiVersion: v1 kind: Pod metadata: labels: pod: hpc name: hpc spec: securityContext: windowsOptions: hostProcess: true runAsUserName: "NT AUTHORITY\\SYSTEM" hostNetwork: true containers: - name: hpc image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019 command: - powershell.exe - -Command - "Start-Sleep 2147483" imagePullPolicy: IfNotPresent nodeSelector: kubernetes.io/os: windows kubernetes.io/hostname: AKSWINDOWSNODENAME tolerations: - effect: NoSchedule key: node.kubernetes.io/unschedulable operator: Exists - effect: NoSchedule key: node.kubernetes.io/network-unavailable operator: Exists - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists
kubectl apply -f hostprocess.yaml
執行 命令,以在指定的 Windows 節點中部署 Windows HostProcess 容器。執行
kubectl exec -it [HPC-POD-NAME] -- powershell
命令。在 HostProcess 容器內執行任何 PowerShell 命令,以存取 Windows 節點。
注意
若要存取 Windows 節點中的檔案,請將根資料夾切換至
C:\
HostProcess 容器內部。
步驟 3:建立封包擷取
當您透過 SSH 或 RDP 或從 HostProcess 容器連線到 Windows 節點時,會出現 Windows 命令提示字元的形式:
azureuser@akswin000000 C:\Users\azureuser>
現在開啟命令提示字元,然後輸入下方的網路 殼 層 (netsh) 命令來擷取追蹤 (netsh 追蹤開始)。 此命令會啟動封包擷取程式。
netsh trace start capture=yes tracefile=C:\temp\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:\temp\AKS_node_name.cab".
File location = C:\temp\AKS_node_name.etl
Tracing session was successfully stopped.
步驟 4:在本機傳輸擷取
完成封包擷取之後,請識別 HostProcess Pod,讓您可以在本機複製傾印。
在您的本機計算機上,開啟第二個控制台,然後執行
kubectl get pods
命令以取得 Pod 清單: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 hpc 1/1 Running 0 3m58s
HostProcess Pod 的預設名稱為 hpc,如第三行所示。
執行下列命令,在本機複製 TCP 傾印檔案。 將 Pod 名稱取代為
hpc
。kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.etl tar: Removing leading '/' from member names kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.cab tar: Removing leading '/' from member names
.etl 和 .cab 檔案現在會出現在您的本機目錄中。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。