Сбор дампа TCP с узла Windows в кластере AKS
Проблемы с сетью могут возникать при использовании кластера Microsoft Служба Azure Kubernetes (AKS). Чтобы изучить эти проблемы, в этой статье объясняется, как записать дампы TCP из узла Windows в кластере AKS, а затем скачать запись на локальный компьютер.
Предварительные требования
- Azure CLI версии 2.0.59 или более поздней. Azure Cloud Shell можно открыть в веб-браузере, чтобы ввести команды Azure CLI. Или установите или обновите Azure CLI на локальном компьютере. Чтобы найти версию, установленную на компьютере, выполните команду
az --version
. - Кластер AKS. Если у вас нет кластера AKS, создайте его с помощью Azure CLI или с помощью портал Azure.
Шаг 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.
Создайте 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
kubectl apply -f hostprocess.yaml
Выполните команду, чтобы развернуть контейнер Windows HostProcess в указанном узле Windows.Выполните команду
kubectl exec -it [HPC-POD-NAME] -- powershell
.Выполните все команды 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, чтобы скопировать дамп локально.
На локальном компьютере откройте вторую консоль и получите список модулей 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, как показано в третьей строке.
Скопируйте файлы дампа TCP локально, выполнив следующие команды. Замените имя
hpc
pod на .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.