Dela via


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

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.