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
- Lo strumento kubectl kubernetes. Per installare kubectl usando l'interfaccia della riga di comando di Azure, eseguire il comando az aks install-cli .
- Un cluster servizio Azure Kubernetes. Se non si ha un cluster del servizio Azure Kubernetes, crearne uno usando l'interfaccia della riga di comando di Azure o tramite il portale di Azure.
- Lo strumento da riga di comando tcpdump installato nel nodo Linux.
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-aks
come 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.