troubleshooting8 min de lecture

Diagnostic et résolution des problèmes réseau sur Kubernetes

SFEIR Institute

Points clés

  • 60% du temps IT consacré au dépannage réseau selon Spectro Cloud 2025
  • '6 familles: DNS, Services, Pod-to-Pod, CNI, Ingress, NetworkPolicies'
  • Commencer par kubectl get events et vérifier le DNS en priorité

Les équipes IT consacrent en moyenne 60% de leur temps de gestion de clusters au dépannage, dont une part significative concerne les problèmes réseau. Ce guide fournit une méthodologie structurée pour identifier et résoudre les dysfonctionnements réseau les plus fréquents sur Kubernetes.

TL;DR : Les problèmes réseau Kubernetes se catégorisent en 6 familles : DNS, Services, Pod-to-Pod, CNI, Ingress et NetworkPolicies. Chaque catégorie possède des commandes de diagnostic spécifiques. Commencez toujours par kubectl get events et vérifiez le DNS avant d'investiguer plus loin.

Pour maîtriser le diagnostic réseau en profondeur, suivez la formation LFS458 Administration Kubernetes.

Index des symptômes réseau

SymptômeCommande de diagnostic rapideSection
could not resolve hostkubectl exec -it -- nslookup kubernetesDNS
connection refused sur un Servicekubectl get endpoints Services
Pods ne communiquent pas entre euxkubectl exec -it -- ping Pod-to-Pod
NetworkPlugin cni failedkubectl describe node CNI
502/504 depuis l'extérieurkubectl get ingress -o wideIngress
Connexions bloquées sans erreurkubectl get networkpolicies -ANetworkPolicies

Comment diagnostiquer les problèmes DNS sur Kubernetes ?

Le DNS est la première cause de problèmes réseau sur Kubernetes. Un pod qui ne peut pas résoudre les noms de services internes devient immédiatement inutilisable.

Symptômes typiques

Error: getaddrinfo ENOTFOUND my-service
Error: could not resolve host 'my-database.default.svc.cluster.local'

Étape 1 : Vérifier le pod CoreDNS

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

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

Étape 2 : Tester la résolution depuis un pod

# Créer un pod de debug
kubectl run dns-test --image=busybox:1.36 --rm -it --restart=Never -- nslookup kubernetes.default

# Résultat attendu
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

Causes et solutions

CauseDiagnosticSolution
CoreDNS crashékubectl get pods -n kube-system montre CrashLoopBackOffVérifiez les ressources mémoire du pod CoreDNS
ConfigMap corrompukubectl get configmap coredns -n kube-system -o yamlRestaurez la configuration par défaut
Service kube-dns absentkubectl get svc -n kube-system kube-dnsRecréez le Service avec kubectl apply
Pod utilise mauvais DNS/etc/resolv.conf du pod incorrectVérifiez le dnsPolicy dans le PodSpec
À retenir : Testez toujours le DNS avec nslookup kubernetes.default avant d'investiguer d'autres couches réseau. Cette commande valide la chaîne complète : Pod → Service → CoreDNS.

Pour approfondir le debug réseau CNI DNS Kubernetes, consultez notre guide sur le dépannage des pods en CrashLoopBackOff.

Comment résoudre les problèmes de connectivité Service ?

Un Service Kubernetes agit comme load balancer interne. Quand il dysfonctionne, aucun pod ne peut atteindre les backends.

Symptômes typiques

curl: (7) Failed to connect to my-service port 80: Connection refused

Diagnostic complet

# 1. Vérifier que le Service existe et expose les bons ports
kubectl get svc my-service -o wide

# 2. Vérifier les Endpoints (pods associés)
kubectl get endpoints my-service

# 3. Si Endpoints vides, vérifier le selector
kubectl describe svc my-service | grep Selector
kubectl get pods --selector=app=my-app

Causes fréquentes

Endpoints vides : Le selector du Service ne matche aucun pod. Corrigez les labels des pods ou le selector du Service.

# Service
spec:
  selector:
    app: my-app  # Doit matcher les labels des pods
    
# Pod
metadata:
  labels:
    app: my-app  # Vérifiez la correspondance exacte

Port mismatch : Le targetPort du Service ne correspond pas au port exposé par le conteneur.

# Vérifier le port écouté dans le conteneur
kubectl exec -it my-pod -- netstat -tlnp

Selon Spectro Cloud, les erreurs de configuration représentent la majorité des incidents réseau. Un ingénieur infrastructure Kubernetes expérimenté vérifie systématiquement les Endpoints avant d'investiguer plus loin.

À retenir : Endpoints vides = problème de selector. Exécutez kubectl get endpoints comme premier réflexe.

Comment diagnostiquer les échecs de communication Pod-to-Pod ?

La communication inter-pods repose sur le plugin CNI et la configuration réseau du cluster. Des échecs à ce niveau indiquent souvent un problème d'infrastructure.

Tests de connectivité

# Obtenir l'IP d'un pod cible
kubectl get pod target-pod -o jsonpath='{.status.podIP}'

# Tester depuis un autre pod
kubectl exec -it source-pod -- ping -c 3 <target-pod-ip>
kubectl exec -it source-pod -- curl -v http://<target-pod-ip>:8080

Diagnostics réseau avancés

# Vérifier les routes dans un pod
kubectl exec -it my-pod -- ip route

# Vérifier les interfaces réseau
kubectl exec -it my-pod -- ip addr

# Tracer le chemin réseau
kubectl exec -it my-pod -- traceroute <target-ip>

Matrice de diagnostic

Test échoueTest réussitCause probable
Ping IPPing localhostProblème CNI ou nœud
Curl portPing IPApplication pas démarrée ou mauvais port
Pods différents nœudsPods même nœudProblème overlay réseau
Tous les podsAucunNetworkPolicy restrictive

L'ingénieur opérations Cloud Kubernetes doit maîtriser ces diagnostics pour réduire le temps de résolution. Les équipes IT perdent en moyenne 34 jours de travail par an sur les incidents Kubernetes.

Comment résoudre les erreurs de plugin CNI ?

Le CNI (Container Network Interface) gère l'attribution des adresses IP aux pods et le routage réseau. Des erreurs CNI bloquent le démarrage des pods.

Symptômes

Warning  FailedCreatePodSandBox  NetworkPlugin cni failed to set up pod network

Diagnostic

# État du CNI sur les nœuds
kubectl describe node <node-name> | grep -A5 "Conditions:"

# Logs des pods CNI (exemple Calico)
kubectl logs -n kube-system -l k8s-app=calico-node --tail=100

# Vérifier la configuration CNI
ls -la /etc/cni/net.d/
cat /etc/cni/net.d/10-calico.conflist

Solutions par CNI

CNIProblème courantSolution
Calicocalico-node en CrashLoopVérifiez la connectivité etcd/datastore
FlannelPods sans IPRedémarrez flanneld sur le nœud affecté
Ciliumcilium-agent dégradéValidez la version kernel (≥4.9.17 requis)
WeaveFragmentation réseauRéinitialisez avec weave reset
# Forcer le redémarrage des pods CNI
kubectl rollout restart daemonset -n kube-system calico-node

Les CNI modernes comme Cilium exploitent eBPF pour des performances et une observabilité accrues.

À retenir : Les problèmes CNI affectent tous les pods d'un nœud. Si plusieurs pods échouent simultanément sur le même nœud, suspectez le CNI.

Comment dépanner les problèmes Ingress et accès externe ?

L'Ingress contrôle l'accès HTTP/HTTPS depuis l'extérieur du cluster. Les erreurs 502/504 ou les timeouts indiquent des problèmes de configuration ou de backend.

Diagnostic Ingress

# État de l'Ingress
kubectl get ingress my-ingress -o wide

# Vérifier l'Ingress Controller
kubectl get pods -n ingress-nginx
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail=100

# Vérifier l'adresse externe
kubectl get svc -n ingress-nginx ingress-nginx-controller

Checklist de dépannage

  1. Vérifiez que le Service backend existe et a des Endpoints
  2. Validez le nom du Service dans l'Ingress correspond exactement
  3. Confirmez que le port spécifié est correct
  4. Testez l'accès direct au Service (bypass Ingress)
# Test direct du backend (bypass Ingress)
kubectl port-forward svc/my-service 8080:80
curl localhost:8080

Pour une approche structurée du dépannage, référez-vous à notre checklist d'observabilité Kubernetes en production.

Erreurs TLS

# Vérifier le secret TLS
kubectl get secret my-tls-secret -o yaml

# Valider le certificat
kubectl get secret my-tls-secret -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout

Comment identifier les NetworkPolicies bloquantes ?

Les NetworkPolicies contrôlent le trafic entre pods. Une policy trop restrictive bloque silencieusement les connexions sans message d'erreur explicite.

Symptômes

Connexions qui timeout sans erreur claire. Les pods semblent fonctionner mais ne peuvent pas communiquer.

Diagnostic

# Lister toutes les NetworkPolicies
kubectl get networkpolicies -A

# Analyser une policy spécifique
kubectl describe networkpolicy my-policy -n my-namespace

# Vérifier quels pods sont affectés
kubectl get pods -n my-namespace --show-labels

Test de connectivité avec policy

# Identifier les policies appliquées à un pod
kubectl get networkpolicies -n my-namespace -o json | jq '.items[] | select(.spec.podSelector.matchLabels | to_entries[] | .key == "app" and .value == "my-app")'

Règle de dépannage

Désactivez temporairement les NetworkPolicies pour confirmer qu'elles sont la cause :

# Sauvegarder puis supprimer
kubectl get networkpolicy my-policy -o yaml > policy-backup.yaml
kubectl delete networkpolicy my-policy

# Tester la connectivité
# Puis restaurer
kubectl apply -f policy-backup.yaml
À retenir : Si une connexion échoue sans message d'erreur, vérifiez les NetworkPolicies. C'est la cause la plus fréquente de blocages silencieux.

La formation LFS460 Principes Fondamentaux de la Sécurité Kubernetes couvre en détail la configuration sécurisée des NetworkPolicies, compétence essentielle pour l'administrateur système préparant la certification CKS.

Comment prévenir les problèmes réseau récurrents ?

Monitoring proactif

Selon Grafana Labs, 75% des utilisateurs Kubernetes adoptent Prometheus et Grafana pour le monitoring. Configurez des alertes sur les métriques réseau critiques.

# Exemple d'alerte Prometheus pour CoreDNS
- alert: CoreDNSDown
  expr: up{job="coredns"} == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "CoreDNS est down"

Checklist de prévention

ActionFréquenceOutil
Vérifier santé CoreDNSContinuPrometheus
Valider les EndpointsAvant chaque déploiementCI/CD
Tester connectivité inter-nœudsHebdomadaireScript automatisé
Auditer NetworkPoliciesMensuelkubectl + documentation
Mettre à jour le CNITrimestrielSuivre les releases

Consultez notre guide complet sur le Monitoring et dépannage Kubernetes pour implémenter une stratégie d'observabilité complète.

Documentation réseau

Documentez systématiquement :

  • Architecture réseau du cluster (CIDR pods, services, nœuds)
  • NetworkPolicies appliquées et leur justification
  • Configuration DNS personnalisée
  • Règles firewall externes

Pour une vue d'ensemble des échecs de déploiement liés au réseau, consultez notre guide de dépannage des déploiements Kubernetes.

À retenir : La prévention coûte moins cher que le dépannage. Les équipes qui documentent leur architecture réseau résolvent les incidents 3x plus vite.

Développez vos compétences en diagnostic réseau Kubernetes

Le diagnostic réseau Kubernetes exige une compréhension approfondie de chaque couche : DNS, Services, CNI, Ingress et NetworkPolicies. Avec 82% des utilisateurs de conteneurs exécutant Kubernetes en production, ces compétences sont devenues indispensables.

Comme le souligne Chris Aniszczyk, CTO de la CNCF : "Kubernetes is no longer experimental but foundational."

SFEIR propose des formations officielles Linux Foundation pour maîtriser l'administration et le dépannage Kubernetes :

Contactez nos conseillers pour construire votre parcours de montée en compétences réseau Kubernetes.