Acquisire un dump TCP da un nodo Linux in un cluster del servizio Azure Kubernetes

I problemi di rete possono verificarsi quando si usa un cluster del servizio Azure Kubernetes di Microsoft servizio Azure Kubernetes. Per analizzare questi problemi, questo articolo illustra come acquisire un dump TCP da un nodo Linux in un cluster del servizio Azure Kubernetes e quindi scaricare l'acquisizione nel computer locale.

Prerequisiti

Note

È possibile automatizzare l'acquisizione TCP tramite un grafico Helm, che può essere eseguito in background come DaemonSet. Per altre informazioni, vedere questo strumento GitHub personalizzato per l'acquisizione di dump TCP o usare i passaggi descritti nelle sezioni seguenti.

Passaggio 1: Trovare i nodi da risolvere

Come si determina da quale nodo eseguire il pull del dump TCP? Per prima cosa si ottiene l'elenco dei nodi nel cluster del servizio Azure Kubernetes usando il client da riga di comando Kubernetes, kubectl. Seguire le istruzioni per connettersi al cluster ed eseguire il kubectl get nodes --output wide comando usando il portale di Azure o l'interfaccia della riga di comando di Azure. Viene visualizzato un elenco di nodi simile all'output seguente:

$ 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

Passaggio 2: Connettersi a un nodo Linux

Il passaggio successivo consiste nel stabilire una connessione al nodo del cluster del servizio Azure Kubernetes da cui si vuole acquisire la traccia di rete. Per altre informazioni, vedere Creare una connessione shell interattiva a un nodo Linux.

Passaggio 3: Assicurarsi che tcpdump sia installato

Dopo aver stabilito una connessione al nodo Linux del servizio Azure Kubernetes, verificare che lo strumento tcpdump sia stato installato in precedenza in un nodo eseguendo tcpdump --version. Se tcpdump non è stato installato, viene visualizzato il testo di errore seguente:

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

Installare quindi tcpdump nel pod eseguendo l'utilità di gestione dei pacchetti di Advanced Package Tool, apt-get:

apt-get update && apt-get install tcpdump

Se tcpdump è installato, viene visualizzato un testo simile al seguente:

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

Passaggio 4: Creare un'acquisizione di pacchetti

Per acquisire il dump, eseguire il comando tcpdump come indicato di seguito:

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

Note

L'esecuzione di tcpdump senza usare parametri di filtro può aumentare significativamente le dimensioni del file PCAP (Packet Capture), soprattutto per le esecuzioni lunghe. È quindi consigliabile aggiungere filtri, ad esempio origine, destinazione e porta. Ad esempio:

  • 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

Durante l'esecuzione della traccia, replicare il problema più volte. Questa azione assicura che il problema venga acquisito all'interno del dump TCP. Si noti il timestamp durante la replica del problema. Per arrestare l'acquisizione di pacchetti al termine, premere 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

Passaggio 5: Trasferire l'acquisizione in locale

Dopo aver completato l'acquisizione di pacchetti, identificare il pod helper in modo da poter copiare il dump in locale. Aprire una seconda console e quindi ottenere un elenco di pod eseguendo kubectl get pods, come illustrato di seguito.

$ 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

Il pod helper ha un prefisso , node-debugger-akscome illustrato nella terza riga. Sostituire il nome del pod e quindi eseguire il comando kubectl seguente. Questi comandi recuperano l'acquisizione di pacchetti per il nodo Linux.

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

Note

Se il chroot /host comando è stato usato quando si immette il pod di debug, aggiungere /host prima /capture.cap per il file di origine.

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.