Udostępnij za pośrednictwem


Przechwytywanie zrzutu TCP z węzła systemu Windows w klastrze usługi AKS

Problemy z siecią mogą wystąpić, gdy używasz klastra usługi Microsoft Azure Kubernetes Service (AKS). Aby ułatwić badanie tych problemów, w tym artykule wyjaśniono, jak przechwycić zrzut TCP z węzła systemu Windows w klastrze usługi AKS, a następnie pobrać przechwytywanie na komputer lokalny.

Wymagania wstępne

Krok 1. Znajdowanie węzłów do rozwiązania problemów

Jak określić, z którego węzła ściągnąć zrzut TCP? Najpierw uzyskasz listę węzłów w klastrze usługi AKS przy użyciu klienta wiersza polecenia kubernetes kubectl. Postępuj zgodnie z instrukcjami, aby nawiązać połączenie z klastrem i uruchomić kubectl get nodes --output wide polecenie przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Zostanie wyświetlona lista węzłów podobna do następujących danych wyjściowych:

$ 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

Krok 2. Nawiązywanie połączenia z węzłem systemu Windows

Następnym krokiem jest nawiązanie połączenia z węzłem klastra usługi AKS. Uwierzytelniasz się przy użyciu klucza protokołu Secure Shell (SSH) lub hasła administratora systemu Windows w połączeniu protokołu RDP (Remote Desktop Protocol). Obie metody wymagają utworzenia połączenia pośredniego, ponieważ obecnie nie można połączyć się bezpośrednio z węzłem systemu Windows usługi AKS. Niezależnie od tego, czy łączysz się z węzłem za pośrednictwem protokołu SSH, czy RDP, musisz określić nazwę użytkownika dla węzłów usługi AKS. Domyślnie ta nazwa użytkownika to azureuser. Oprócz korzystania z połączenia SSH lub RDP można nawiązać połączenie z węzłem systemu Windows z kontenera HostProcess.

  1. Utwórz plik hostprocess.yaml z następującą zawartością. Zastąp ciąg AKSWINDOWSNODENAME nazwą węzła systemu Windows usługi AKS.

    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. Uruchom polecenie , kubectl apply -f hostprocess.yaml aby wdrożyć kontener Windows HostProcess w określonym węźle systemu Windows.

  3. Uruchom polecenie kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Uruchom wszystkie polecenia programu PowerShell wewnątrz kontenera HostProcess, aby uzyskać dostęp do węzła systemu Windows.

    Uwaga 16.

    Aby uzyskać dostęp do plików w węźle systemu Windows, przełącz folder główny na C:\ wewnątrz kontenera HostProcess.

Krok 3. Tworzenie przechwytywania pakietów

Po nawiązaniu połączenia z węzłem systemu Windows za pośrednictwem protokołu SSH lub RDP lub z kontenera HostProcess zostanie wyświetlony formularz wiersza polecenia systemu Windows:

azureuser@akswin000000 C:\Users\azureuser>

Teraz otwórz wiersz polecenia i wprowadź poniższe polecenie powłoki sieciowej (netsh) w celu przechwytywania śladów (start śledzenia netsh). To polecenie uruchamia proces przechwytywania pakietów.

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

Dane wyjściowe są podobne do następującego tekstu:

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

Gdy śledzenie jest uruchomione, zreplikuj problem wiele razy. Ta akcja gwarantuje przechwycenie problemu w zrzutie TCP. Zanotuj sygnaturę czasową podczas replikowania problemu. Aby zatrzymać przechwytywanie pakietów po zakończeniu, wprowadź polecenie 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.

Krok 4. Transfer przechwytywania lokalnie

Po zakończeniu przechwytywania pakietów zidentyfikuj zasobnik HostProcess, aby można było skopiować zrzut lokalnie.

  1. Na komputerze lokalnym otwórz drugą konsolę, a następnie pobierz listę zasobników, uruchamiając kubectl get pods polecenie :

    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
    

    Domyślna nazwa zasobnika HostProcess to hpc, jak pokazano w trzecim wierszu.

  2. Skopiuj pliki zrzutu TCP lokalnie, uruchamiając następujące polecenia. Zastąp nazwę zasobnika ciągiem 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
    

    Pliki .etl i .cab będą teraz obecne w katalogu lokalnym.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.