Partager via


Capturer un vidage TCP à partir d’un nœud Linux dans un cluster AKS

Des problèmes de mise en réseau peuvent se produire lorsque vous utilisez un cluster Microsoft Azure Kubernetes Service (AKS). Pour vous aider à examiner ces problèmes, cet article explique comment capturer un vidage TCP à partir d’un nœud Linux dans un cluster AKS, puis télécharger la capture sur votre ordinateur local.

Prerequisites

Note

Vous pouvez automatiser la capture TCP via un graphique Helm, qui peut s’exécuter en arrière-plan en tant que DaemonSet. Pour plus d’informations, consultez cet outil GitHub personnalisé pour capturer des vidages TCP ou suivez les étapes décrites dans les sections suivantes.

Étape 1 : Rechercher les nœuds à résoudre

Comment déterminer le nœud à partir duquel extraire le vidage TCP ? Vous obtenez d’abord la liste des nœuds dans le cluster AKS à l’aide du client de ligne de commande Kubernetes, kubectl. Suivez les instructions pour vous connecter au cluster et exécuter la kubectl get nodes --output wide commande à l’aide de la Portail Azure ou d’Azure CLI. Une liste de nœuds similaire à la sortie suivante s’affiche :

$ 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

Étape 2 : Se connecter à un nœud Linux

L’étape suivante consiste à établir une connexion au nœud de cluster AKS à partir duquel vous souhaitez capturer la trace réseau. Pour plus d’informations, consultez Créer une connexion interactive de l’interpréteur de commandes à un nœud Linux.

Étape 3 : Vérifier que tcpdump est installé

Une fois que vous avez établi une connexion au nœud Linux AKS, vérifiez que l’outil tcpdump a été précédemment installé sur un nœud en exécutant tcpdump --version. Si tcpdump n’a pas été installé, le texte d’erreur suivant s’affiche :

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

Installez ensuite tcpdump sur votre pod en exécutant l’utilitaire de gestion de package avancé de l’outil package, apt-get :

apt-get update && apt-get install tcpdump

Si tcpdump est installé, quelque chose similaire au texte suivant s’affiche :

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

Étape 4 : Créer une capture de paquets

Pour capturer le vidage, exécutez la commande tcpdump comme suit :

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

Note

L’exécution de tcpdump sans utiliser de paramètres de filtrage peut augmenter considérablement la taille du fichier PCAP (Packet Capture), en particulier pour les longues exécutions. Par conséquent, nous vous recommandons d’ajouter des filtres, tels que la source, la destination et le port. Par exemple :

  • 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

Pendant que la trace est en cours d’exécution, répliquez votre problème plusieurs fois. Cette action vérifie que le problème est capturé dans le vidage TCP. Notez l’horodatage pendant la réplication du problème. Pour arrêter la capture de paquets lorsque vous avez terminé, appuyez sur 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

Étape 5 : Transférer la capture localement

Une fois la capture de paquets terminée, identifiez le pod d’assistance pour pouvoir copier le vidage localement. Ouvrez une deuxième console, puis obtenez une liste de pods en exécutant kubectl get pods, comme indiqué ci-dessous.

$ 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

Le pod d’assistance a un préfixe , node-debugger-akscomme indiqué dans la troisième ligne. Remplacez le nom du pod, puis exécutez la commande kubectl suivante. Ces commandes récupèrent la capture de paquets pour votre nœud Linux.

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

Note

Si la commande a été utilisée lors de l’entrée chroot /host du pod de débogage, ajoutez-la /host avant /capture.cap pour le fichier source.

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.