Поделиться через


Сбор дампа TCP с узла Windows в кластере AKS

Проблемы с сетью могут возникать при использовании кластера Microsoft Служба Azure Kubernetes (AKS). Чтобы изучить эти проблемы, в этой статье объясняется, как записать дампы TCP из узла Windows в кластере AKS, а затем скачать запись на локальный компьютер.

Предварительные требования

Шаг 1. Поиск узлов для устранения неполадок

Как определить, какой узел нужно извлечь из дампа TCP? Сначала вы получите список узлов в кластере AKS с помощью клиента командной строки Kubernetes kubectl. Следуйте инструкциям, чтобы подключиться к кластеру и выполнить 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. Проверка подлинности выполняется с помощью ключа Secure Shell (SSH) или с помощью пароля администратора Windows в подключении к протоколу удаленного рабочего стола (RDP). Оба метода требуют создания промежуточного подключения, так как сейчас невозможно подключиться непосредственно к узлу Windows AKS. Независимо от того, подключаетесь ли вы к узлу через SSH или RDP, необходимо указать имя пользователя для узлов AKS. По умолчанию это имя пользователя — azureuser. Помимо подключения SSH или RDP, можно подключиться к узлу Windows из контейнера HostProcess.

  1. Создайте hostprocess.yaml со следующим содержимым. Замените AKSWINDOWSNODENAME именем узла Windows 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. kubectl apply -f hostprocess.yaml Выполните команду, чтобы развернуть контейнер Windows HostProcess в указанном узле Windows.

  3. Выполните команду kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Выполните все команды PowerShell в контейнере HostProcess для доступа к узлу Windows.

    Примечание.

    Чтобы получить доступ к файлам на узле Windows, переключите корневую папку C:\ в контейнер HostProcess.

Шаг 3. Создание записи пакетов

При подключении к узлу Windows через SSH или RDP или из контейнера HostProcess появится форма командной строки Windows:

azureuser@akswin000000 C:\Users\azureuser>

Теперь откройте командную строку и введите команду Network Shell (netsh) ниже для записи трассировок (netsh trace start). Эта команда запускает процесс записи пакетов.

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. Передача записи локально

После завершения записи пакетов определите pod HostProcess, чтобы скопировать дамп локально.

  1. На локальном компьютере откройте вторую консоль и получите список модулей 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
    hpc                                                     1/1     Running   0          3m58s
    

    Имя модуля pod HostProcess по умолчанию — hpc, как показано в третьей строке.

  2. Скопируйте файлы дампа TCP локально, выполнив следующие команды. Замените имя hpcpod на .

    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. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.