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

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

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

Примечание.

Вы можете автоматизировать запись TCP через диаграмму Helm, которая может выполняться в фоновом режиме в качестве daemonSet. Дополнительные сведения см. в этом пользовательском средстве GitHub для записи дампов TCP или в следующих разделах.

Шаг 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
aks-agentpool-34796016-vmss000000   Ready    agent   45h   v1.20.9   10.240.1.81    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002   Ready    agent   45h   v1.20.9   10.240.2.47    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure

Шаг 2. Подключение к узлу Linux

Следующим шагом является установка подключения к узлу кластера AKS, из которого требуется записать трассировку сети. Дополнительные сведения см. в разделе Создание подключения интерактивной оболочки к узлу Linux.

Шаг 3. Убедитесь, что tcpdump установлен

После установки подключения к узлу LINUX AKS убедитесь, что средство tcpdump было установлено на узле, выполнив команду tcpdump --version. Если tcpdump не установлен, появится следующий текст ошибки:

# tcpdump --version
bash: tcpdump: command not found

Затем установите tcpdump на pod, выполнив программу обработки пакетов расширенного средства пакетов, apt-get:

apt-get update && apt-get install tcpdump

Если установлен tcpdump, появляется что-то подобное следующему тексту:

# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018

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

Чтобы записать дамп, выполните команду tcpdump следующим образом:

# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6

Примечание.

Выполнение tcpdump без использования параметров фильтрации может значительно увеличить размер PCAP-файла, особенно для длительных запусков. Поэтому рекомендуется добавлять фильтры, такие как источник, назначение и порт. Например:

  • tcpdump dst 192.168.1.100
  • tcpdump dst host.mydomain.com
  • tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet

Во время выполнения трассировки реплицируйте проблему много раз. Это действие гарантирует, что проблема фиксируется в дамле TCP. Обратите внимание на метку времени при репликации проблемы. Чтобы остановить запись пакетов после завершения, нажмите клавиши CTRL+C:

# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel

Шаг 5. Передача записи локально

После завершения записи пакетов определите вспомогательный модуль pod, чтобы скопировать дамп локально. Откройте вторую консоль и получите список модулей pod, выполнив команду kubectl get pods, как показано ниже.

$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   0          3m29s
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   0          3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2   1/1     Running   0          60s

Вспомогательный модуль pod имеет префикс node-debugger-aks, как показано в третьей строке. Замените имя pod, а затем выполните следующую команду kubectl. Эти команды извлекают запись пакетов для узла Linux.

kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap

Примечание.

chroot /host Если команда использовалась при вводе модуля pod отладки, добавьте /host перед /capture.cap исходным файлом.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.