Сбор дампа TCP с узла Linux в кластере AKS
Проблемы с сетью могут возникать при использовании кластера Microsoft Служба Azure Kubernetes (AKS). Чтобы изучить эти проблемы, в этой статье объясняется, как записать дампы TCP из узла Linux в кластере AKS, а затем скачать запись на локальный компьютер.
Предварительные требования
- Средство Kubernetes kubectl . Чтобы установить kubectl с помощью Azure CLI, выполните команду az aks install-cli.
- Кластер AKS. Если у вас нет кластера AKS, создайте его с помощью Azure CLI или с помощью портал Azure.
- Средство командной строки tcpdump , установленное на узле Linux.
Примечание.
Вы можете автоматизировать запись 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.