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

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

Pré-requisitos

Observação

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

Etapa 1: Localizar os nós para solucionar problemas

Como você determina de qual nó extrair o despejo TCP? Primeiro, você obtém a lista de nós no cluster do AKS usando o cliente de linha de comando do Kubernetes, kubectl. Siga as instruções para se conectar ao cluster e executar o comando usando o portal do Azure ou a kubectl get nodes --output wide 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ó do 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 interativo com um nó do Linux.

Etapa 3: verifique se o tcpdump está instalado

Depois de estabelecer uma conexão com o nó Linux do AKS, 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 em seu pod executando o utilitário de manipulação de pacotes da Advanced Package Tool, 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 dump, 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

Observação

Executar tcpdump sem usar parâmetros de filtragem pode aumentar significativamente o tamanho do arquivo de captura de pacotes (PCAP), especialmente para execuções longas. Portanto, recomendamos que você adicione filtros, como origem, destino e porta. Por exemplo:

  • 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

Enquanto o rastreamento estiver em execução, replique seu problema várias vezes. Essa ação garante que o problema seja capturado no despejo TCP. Observe o carimbo de data/hora enquanto 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 de pacotes, identifique o pod auxiliar para que você possa copiar o despejo localmente. Abra um segundo console e 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 pacotes para o nó do Linux.

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

Observação

Se o chroot /host comando foi usado ao inserir o pod de depuração, adicione /host antes /capture.cap para o arquivo de origem.

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.