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
- Het kubectl-hulpprogramma Kubectl van Kubernetes. Als u kubectl wilt installeren met behulp van Azure CLI, voert u de opdracht az aks install-cli uit.
- Een AKS-cluster. Als u geen AKS-cluster hebt, maakt u er een met behulp van Azure CLI of via Azure Portal.
- Het opdrachtregelprogramma tcpdump dat is geïnstalleerd op het Linux-knooppunt.
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.