troubleshooting8 min de lecture

Diagnostiquer et résoudre les problèmes réseau dans un cluster Kubernetes

SFEIR Institute

Points clés

  • 34 jours ouvrés par an consacrés aux problèmes Kubernetes selon Cloud Native Now
  • 'Méthodologie en 4 étapes: pod-to-pod, DNS, Services, Network Policies'
  • 'Outils essentiels: kubectl, nslookup, tcpdump'

Chaque ingénieur infrastructure Kubernetes certification CKA consacre une part significative de son temps au dépannage réseau. Selon Cloud Native Now, les équipes IT passent 34 jours ouvrés par an à résoudre des problèmes Kubernetes. Le debugging réseau Kubernetes représente une compétence différenciante pour tout professionnel.

TL;DR : Le dépannage DNS Services Kubernetes suit une méthodologie structurée : vérifier la connectivité pod-to-pod, valider la résolution DNS, tester les Services, puis inspecter les Network Policies. Les outils kubectl, nslookup et tcpdump sont vos alliés.

Les professionnels qui veulent aller plus loin suivent la formation LFS458 Administration Kubernetes.

Pourquoi l'ingénieur infrastructure Kubernetes certification CKA doit maîtriser le diagnostic réseau ?

Le réseau Kubernetes repose sur plusieurs couches d'abstraction. Un dysfonctionnement peut survenir au niveau du CNI, des Services, du DNS ou des Network Policies.

Selon le CNCF Annual Survey 2025, 82% des utilisateurs de conteneurs exécutent Kubernetes en production. Cette adoption massive multiplie les incidents réseau potentiels.

CoucheComposantsProblèmes fréquents
L2/L3CNI (Calico, Cilium)Pods sans IP, routes manquantes
L4Services, kube-proxyClusterIP inaccessible, iptables corrompues
L7Ingress, DNSCertificats TLS, résolution DNS
PoliciesNetworkPolicyTrafic bloqué involontairement
À retenir : 80% des problèmes réseau Kubernetes proviennent de mauvaises configurations, pas de bugs logiciels. Vérifiez d'abord les manifestes avant de suspecter l'infrastructure.

Comment résoudre les problèmes réseau pods Kubernetes au niveau connectivité ?

Test de connectivité de base

# Créer un pod de diagnostic
kubectl run netshoot --rm -it --image=nicolaka/netshoot -- /bin/bash

# Depuis le pod, tester la connectivité vers un autre pod
ping <pod-ip>
curl <pod-ip>:<port>

# Tester la connectivité vers un Service
curl <service-name>.<namespace>.svc.cluster.local:<port>

Vérifier l'état du CNI

Le CNI attribue les IPs aux pods. Un CNI défaillant provoque des pods en état ContainerCreating.

# Vérifier les pods CNI
kubectl get pods -n kube-system -l k8s-app=calico-node
kubectl get pods -n kube-system -l k8s-app=cilium

# Inspecter les logs CNI
kubectl logs -n kube-system -l k8s-app=calico-node --tail=100

# Vérifier les routes sur un nœud
ip route show

Pour une configuration complète du réseau, consultez Configurer le réseau d'un cluster Kubernetes : CNI, Services, Ingress.

Diagnostic avec tcpdump

# Capturer le trafic sur l'interface du pod
kubectl debug -it <pod-name> --image=nicolaka/netshoot -- tcpdump -i eth0 -nn port 80

# Analyser le trafic ICMP
kubectl debug -it <pod-name> --image=nicolaka/netshoot -- tcpdump -i eth0 icmp
À retenir : Un pod sans IP après 30 secondes indique un problème CNI. Vérifiez les logs du DaemonSet CNI en priorité.

Comment maîtriser le dépannage DNS Services Kubernetes ?

Le DNS est critique. Chaque résolution de Service passe par CoreDNS. Un DNS défaillant paralyse le cluster.

Vérifier CoreDNS

# État des pods CoreDNS
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl get deployment coredns -n kube-system

# Logs CoreDNS
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=50

# Métriques CoreDNS
kubectl get --raw /api/v1/namespaces/kube-system/pods/coredns-xxx/proxy/metrics

Tests de résolution DNS

# Depuis un pod de test
kubectl run dnstest --rm -it --image=busybox:1.36 -- nslookup kubernetes.default

# Résolution complète
kubectl run dnstest --rm -it --image=nicolaka/netshoot -- dig kubernetes.default.svc.cluster.local

# Vérifier le fichier resolv.conf du pod
kubectl exec <pod-name> -- cat /etc/resolv.conf

La configuration DNS attendue :

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

Problèmes DNS courants

SymptômeCause probableSolution
NXDOMAINService inexistantVérifier kubectl get svc
SERVFAILCoreDNS surchargéScaler le Deployment
TimeoutNetwork Policy bloque UDP 53Autoriser le trafic DNS
Résolution lentendots:5 trop élevéRéduire ou utiliser FQDN
# Optimiser les requêtes DNS dans le pod
apiVersion: v1
kind: Pod
metadata:
  name: optimized-dns
spec:
  dnsConfig:
    options:
    - name: ndots
      value: "2"
    - name: single-request-reopen
  containers:
  - name: app
    image: myapp:v1

Pour les fondamentaux, consultez Kubernetes les fondamentaux et pour débutants.

Comment déboguer les Services Kubernetes qui ne fonctionnent pas ?

Un Service expose des pods via une IP stable. Les dysfonctionnements proviennent généralement des sélecteurs ou des endpoints.

Vérifier les Endpoints

# Lister les endpoints du Service
kubectl get endpoints <service-name>
kubectl describe endpoints <service-name>

# Un Service sans endpoints indique :
# - Aucun pod avec les labels correspondants
# - Pods non-Ready
# - Pods sur des ports différents

Valider les sélecteurs

# Comparer les labels du Service et des pods
kubectl get svc <service-name> -o jsonpath='{.spec.selector}'
kubectl get pods -l <selector> --show-labels

# Exemple de mismatch
# Service selector: app=frontend
# Pod labels: app=front-end  # MISMATCH !

Diagnostiquer kube-proxy

kube-proxy gère les règles iptables/IPVS pour router le trafic vers les pods.

# Vérifier le mode kube-proxy
kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode

# Inspecter les règles iptables (mode iptables)
iptables -t nat -L KUBE-SERVICES -n | grep <service-name>

# Inspecter IPVS (mode ipvs)
ipvsadm -Ln | grep <cluster-ip>

# Logs kube-proxy
kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=50
À retenir : Un Service de type ClusterIP n'est accessible que depuis l'intérieur du cluster. Utilisez kubectl port-forward pour tester depuis votre poste.

Pour les commandes essentielles, consultez Aide-mémoire kubectl : commandes essentielles pour l'administration.

Comment identifier les blocages causés par les Network Policies ?

Les Network Policies implémentent un modèle de sécurité "deny by default" une fois activées. Un trafic légitime peut être bloqué par une policy trop restrictive.

Audit des Network Policies

# Lister toutes les Network Policies
kubectl get networkpolicies -A

# Inspecter une policy spécifique
kubectl describe networkpolicy <policy-name> -n <namespace>

# Identifier les pods impactés
kubectl get pods -n <namespace> -l <policy-selector>

Exemple de policy bloquante

# Cette policy bloque TOUT le trafic entrant vers les pods app=backend
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  # Pas de règle ingress = tout bloqué

Débloquer le trafic nécessaire

# Autoriser le trafic depuis les pods frontend
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080

Les CNI modernes comme Cilium offrent une observabilité avancée sur le trafic bloqué grâce à eBPF.

Pour approfondir la sécurité, consultez Sécuriser un cluster Kubernetes : les bonnes pratiques.

Quels outils utiliser pour le debugging réseau Kubernetes diagnostic avancé ?

Outils intégrés

# kubectl debug pour injecter un conteneur de debug
kubectl debug -it <pod-name> --image=nicolaka/netshoot --target=<container-name>

# kubectl exec pour les pods existants
kubectl exec -it <pod-name> -- /bin/sh

# kubectl port-forward pour tester les Services
kubectl port-forward svc/<service-name> 8080:80

Outils spécialisés

OutilUsageCommande
netshootImage tout-en-un (curl, dig, tcpdump, nmap)kubectl run netshoot --rm -it --image=nicolaka/netshoot
ksniffCapture Wireshark depuis un podkubectl sniff
kubesharkAnalyse trafic API temps réelkubeshark tap
cilium connectivity testValidation connectivité Ciliumcilium connectivity test
# Exemple avec kubeshark
kubeshark tap -n default
# Ouvre une interface web pour analyser le trafic HTTP/gRPC

# Test de connectivité Cilium
kubectl exec -n kube-system cilium-xxx -- cilium connectivity test
À retenir : L'image nicolaka/netshoot contient plus de 30 outils réseau. Gardez-la dans votre arsenal de troubleshooting.

Comment l'ingénieur infrastructure Kubernetes certification CKA aborde le troubleshooting en examen ?

L'examen CKA consacre 30% du score au troubleshooting, dont une part significative concerne le réseau. Selon la Linux Foundation, l'examen dure 2 heures avec un score de passage de 66%.

Méthodologie de diagnostic rapide

  1. Identifier le symptôme exact (timeout, connexion refusée, DNS failure)
  2. Isoler la couche problématique (pod, Service, DNS, policy)
  3. Vérifier les logs et événements pertinents
  4. Tester la connectivité à chaque niveau
  5. Corriger et valider
# Workflow de diagnostic type
# 1. État des pods
kubectl get pods -o wide

# 2. Événements récents
kubectl get events --sort-by=.metadata.creationTimestamp

# 3. Logs applicatifs
kubectl logs <pod-name> --tail=50

# 4. Test connectivité
kubectl run test --rm -it --image=busybox -- wget -qO- <service>:<port>

Pour des problèmes courants, consultez Résoudre les 10 problèmes les plus courants sur un cluster Kubernetes.

Comme le rappelle TealHQ : « Don't let your knowledge remain theoretical - set up a real Kubernetes environment to solidify your skills. »

Comment documenter et prévenir les incidents réseau récurrents ?

Runbook de diagnostic

Créez un document structuré pour chaque type d'incident :

## Incident : Pods cannot resolve DNS

### Symptômes
- Applications timeout sur appels HTTP
- Logs: "could not resolve host"

### Diagnostic
1. kubectl get pods -n kube-system -l k8s-app=kube-dns
2. kubectl logs -n kube-system coredns-xxx
3. kubectl run test --rm -it --image=busybox -- nslookup kubernetes

### Solutions
- Scaler CoreDNS: kubectl scale deployment coredns -n kube-system --replicas=3
- Vérifier Network Policy sur UDP/53
- Redémarrer pods CoreDNS si nécessaire

Monitoring proactif

# PrometheusRule pour alerter sur les erreurs DNS
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: coredns-alerts
spec:
  groups:
  - name: coredns
    rules:
    - alert: CoreDNSErrorsHigh
      expr: rate(coredns_dns_responses_total{rcode="SERVFAIL"}[5m]) > 0.1
      for: 5m
      labels:
        severity: warning

Pour les comparatifs d'environnements, consultez Kubernetes managé (EKS, AKS, GKE) vs auto-hébergé : comparatif.

À retenir : Chaque incident résolu doit enrichir votre base de connaissances. Le temps investi dans la documentation se rentabilise à chaque occurrence future.

Développez vos compétences troubleshooting avec SFEIR Institute

Le diagnostic réseau Kubernetes distingue les administrateurs juniors des experts. Avec 71 % des entreprises Fortune 100 exécutant Kubernetes en production, ces compétences sont hautement valorisées.

Les formations SFEIR Institute couvrent le troubleshooting avancé :

Selon la Linux Foundation, les certifications CKA et CKS sont valides 2 ans. Validez vos compétences avec une formation encadrée par des praticiens. Pour approfondir, consultez notre installer cluster Kubernetes kubeadm. Pour approfondir, consultez notre formation Kubernetes administrateur système.

Contactez nos équipes pour construire votre parcours vers la certification.