Delen via


Een TCP-dump vastleggen vanaf een Linux-knooppunt in een AKS-cluster

Netwerkproblemen kunnen optreden wanneer u een AKS-cluster (Microsoft Azure Kubernetes Service) gebruikt. Om deze problemen te onderzoeken, wordt in dit artikel uitgelegd hoe u een TCP-dump kunt vastleggen van een Linux-knooppunt in een AKS-cluster en vervolgens de opname naar uw lokale computer downloadt.

Voorwaarden

Notitie

U kunt TCP-opname automatiseren via een Helm-grafiek, die op de achtergrond kan worden uitgevoerd als een DaemonSet. Zie dit aangepaste GitHub-hulpprogramma voor het vastleggen van TCP-dumps of gebruik de stappen in de volgende secties voor meer informatie.

Stap 1: de knooppunten zoeken om problemen op te lossen

Hoe bepaalt u van welk knooppunt de TCP-dump moet worden opgehaald? U haalt eerst de lijst met knooppunten in het AKS-cluster op met behulp van de Kubernetes-opdrachtregelclient, kubectl. Volg de instructies om verbinding te maken met het cluster en voer de kubectl get nodes --output wide opdracht uit met behulp van Azure Portal of Azure CLI. Er wordt een knooppuntlijst weergegeven die vergelijkbaar is met de volgende uitvoer:

$ 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

Stap 2: Verbinding maken met een Linux-knooppunt

De volgende stap bestaat uit het tot stand brengen van een verbinding met het AKS-clusterknooppunt waaruit u de netwerktracering wilt vastleggen. Zie Een interactieve shellverbinding maken met een Linux-knooppunt voor meer informatie.

Stap 3: controleer of tcpdump is geïnstalleerd

Nadat u een verbinding met het AKS Linux-knooppunt hebt gemaakt, controleert u of het tcpdump-hulpprogramma eerder op een knooppunt is geïnstalleerd door deze uit te voeren tcpdump --version. Als tcpdump niet is geïnstalleerd, wordt de volgende fouttekst weergegeven:

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

Installeer vervolgens tcpdump op uw pod door het hulpprogramma voor pakketafhandeling van geavanceerde pakketten uit te voeren, apt-get:

apt-get update && apt-get install tcpdump

Als tcpdump is geïnstalleerd, wordt er iets vergelijkbaars met de volgende tekst weergegeven:

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

Stap 4: Een pakketopname maken

Voer de tcpdump-opdracht als volgt uit om de dump vast te leggen:

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

Notitie

Het uitvoeren van tcpdump zonder filterparameters kan de grootte van het PCAP-bestand (Packet Capture) aanzienlijk vergroten, met name voor lange uitvoeringen. Daarom raden we u aan filters toe te voegen, zoals bron, doel en poort. Bijvoorbeeld:

  • 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

Terwijl de tracering wordt uitgevoerd, repliceert u het probleem vaak. Deze actie zorgt ervoor dat het probleem wordt vastgelegd in de TCP-dump. Noteer het tijdstempel tijdens het repliceren van het probleem. Als u de pakketopname wilt stoppen wanneer u klaar bent, drukt u op 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

Stap 5: De opname lokaal overdragen

Nadat u de pakketopname hebt voltooid, identificeert u de helper-pod, zodat u de dump lokaal kunt kopiëren. Open een tweede console en haal vervolgens een lijst met pods op door uit te voeren kubectl get pods, zoals hieronder wordt weergegeven.

$ 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

De helper-pod heeft een voorvoegsel van node-debugger-aks, zoals wordt weergegeven in de derde rij. Vervang de podnaam en voer vervolgens de volgende kubectl-opdracht uit. Met deze opdrachten wordt de pakketopname voor uw Linux-knooppunt opgehaald.

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

Notitie

Als de chroot /host opdracht is gebruikt bij het invoeren van de foutopsporingspod, voegt /host u dit toe voor het /capture.cap bronbestand.

Disclaimerinformatie van derden

De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.