共用方式為


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

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

必要條件

步驟 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 節點。

  1. 使用下列內容建立 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
    
  2. kubectl apply -f hostprocess.yaml執行 命令,以在指定的 Windows 節點中部署 Windows HostProcess 容器。

  3. 執行 kubectl exec -it [HPC-POD-NAME] -- powershell 命令。

  4. 在 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,讓您可以在本機複製傾印。

  1. 在您的本機計算機上,開啟第二個控制台,然後執行 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,如第三行所示。

  2. 執行下列命令,在本機複製 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 意見反應社群提交產品意見反應。