Capturar um despejo TCP de um nó Linux em um cluster do AKS

Problemas de rede podem ocorrer quando você estiver usando um cluster do AKS (Microsoft Serviço de Kubernetes do Azure). Para ajudar a investigar esses problemas, este artigo explica como capturar um despejo TCP de um nó Linux em um cluster do AKS e, em seguida, baixar a captura no computador local.

Pré-requisitos

Observação

Você pode automatizar a captura de TCP por meio de um gráfico helm, que pode ser executado em segundo plano como um DaemonSet. Para obter mais informações, confira esta ferramenta personalizada do GitHub para capturar despejos TCP ou usar as etapas nas seções a seguir.

Etapa 1: localizar os nós para solucionar problemas

Como você determina de qual nó retirar o despejo TCP? Primeiro, você obtém a lista de nós no cluster do AKS usando o cliente de linha de comando kubernetes, kubectl. Siga as instruções para se conectar ao cluster e executar o kubectl get nodes --output wide comando usando o portal do Azure ou a CLI do Azure. Uma lista de nós semelhante à seguinte saída é exibida:

$ 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

Etapa 2: Conectar-se a um nó linux

A próxima etapa é estabelecer uma conexão com o nó de cluster do AKS do qual você deseja capturar o rastreamento de rede. Para obter mais informações, consulte Criar uma conexão de shell interativa com um nó Linux.

Etapa 3: verifique se o tcpdump está instalado

Depois de estabelecer uma conexão com o nó do AKS Linux, verifique se a ferramenta tcpdump foi instalada anteriormente em um nó executando tcpdump --version. Se o tcpdump não tiver sido instalado, o seguinte texto de erro será exibido:

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

Em seguida, instale o tcpdump no pod executando o utilitário de tratamento de pacotes da Ferramenta de Pacote Avançado, apt-get:

apt-get update && apt-get install tcpdump

Se o tcpdump estiver instalado, algo semelhante ao seguinte texto será exibido:

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

Etapa 4: criar uma captura de pacote

Para capturar o despejo, execute o comando tcpdump da seguinte maneira:

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

Enquanto o rastreamento estiver em execução, replique o problema muitas vezes. Essa ação garante que o problema tenha sido capturado no despejo TCP. Observe o carimbo de hora enquanto você replica o problema. Para interromper a captura de pacotes quando terminar, pressione 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

Etapa 5: transferir a captura localmente

Depois de concluir a captura do pacote, identifique o pod auxiliar para que você possa copiar o despejo localmente. Abra um segundo console e, em seguida, obtenha uma lista de pods executando kubectl get pods, conforme mostrado abaixo.

$ 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

O pod auxiliar tem um prefixo de node-debugger-aks, conforme mostrado na terceira linha. Substitua o nome do pod e execute o seguinte comando kubectl. Esses comandos recuperam a captura de pacote para seu nó Linux.

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

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.