Fånga in en TCP-dump från en Linux-nod i ett AKS-kluster
Nätverksproblem kan uppstå när du använder ett AKS-kluster (Microsoft Azure Kubernetes Service). För att undersöka dessa problem förklarar den här artikeln hur du samlar in en TCP-dump från en Linux-nod i ett AKS-kluster och sedan laddar ned avbildningen till den lokala datorn.
Förutsättningar
- Kubernetes kubectl-verktyget . Om du vill installera kubectl med hjälp av Azure CLI kör du kommandot az aks install-cli .
- Ett AKS-kluster. Om du inte har något AKS-kluster skapar du ett med Hjälp av Azure CLI eller via Azure Portal.
- Kommandoradsverktyget tcpdump installerat på Linux-noden.
Kommentar
Du kan automatisera TCP-avbildningen via ett Helm-diagram, som kan köras i bakgrunden som en DaemonSet. Mer information finns i det här anpassade GitHub-verktyget för att samla in TCP-dumpar, eller använd stegen i följande avsnitt.
Steg 1: Hitta de noder som ska felsökas
Hur avgör du vilken nod som TCP-dumpen ska hämtas från? Du får först en lista över noder i AKS-klustret med kubernetes-kommandoradsklienten kubectl. Följ anvisningarna för att ansluta till klustret och köra kubectl get nodes --output wide
kommandot med hjälp av Azure Portal eller Azure CLI. En nodlista som liknar följande utdata visas:
$ 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
Steg 2: Ansluta till en Linux-nod
Nästa steg är att upprätta en anslutning till den AKS-klusternod som du vill samla in nätverksspårningen från. Mer information finns i Skapa en interaktiv gränssnittsanslutning till en Linux-nod.
Steg 3: Kontrollera att tcpdump är installerat
När du har upprättat en anslutning till AKS Linux-noden kontrollerar du att tcpdump-verktyget tidigare har installerats på en nod genom att köra tcpdump --version
. Om tcpdump inte har installerats visas följande feltext:
# tcpdump --version
bash: tcpdump: command not found
Installera sedan tcpdump på podden genom att köra verktyget för pakethantering i Advanced Package Tool, apt-get:
apt-get update && apt-get install tcpdump
Om tcpdump har installerats visas något som liknar följande text:
# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1 11 Sep 2018
Steg 4: Skapa en paketinsamling
Om du vill samla in dumpen kör du kommandot tcpdump på följande sätt:
# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6
Kommentar
Att köra tcpdump utan att använda filtreringsparametrar kan avsevärt öka storleken på PCAP-filen (Packet Capture), särskilt för långa körningar. Därför rekommenderar vi att du lägger till filter, till exempel källa, mål och port. Till exempel:
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
När spårningen körs replikerar du problemet många gånger. Den här åtgärden kontrollerar att problemet fångas upp i TCP-dumpen. Observera tidsstämpeln när du replikerar problemet. Om du vill stoppa paketinsamlingen när du är klar trycker du på 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
Steg 5: Överföra avbildningen lokalt
När du har slutfört paketinsamlingen identifierar du hjälppodden så att du kan kopiera dumpen lokalt. Öppna en andra konsol och hämta sedan en lista över poddar genom att köra kubectl get pods
, enligt nedan.
$ 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
Hjälppodden har prefixet node-debugger-aks
, som visas på den tredje raden. Ersätt poddnamnet och kör sedan följande kubectl-kommando. Dessa kommandon hämtar paketinsamlingen för din Linux-nod.
kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap
Kommentar
chroot /host
Om kommandot användes när du angav felsökningspodden lägger du till /host
innan /capture.cap
för källfilen.
Ansvarsfriskrivning för information från tredje part
De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.