dns resolve trop long pour des services internes k8s

Posté par brigitte-camus le 06/10/2025
RÉSOLU

brigitte-camus

Membre depuis le 19/03/2020

Yo la team on a un gros souci de perf sur les résolutions DNS internes dans notre cluster k8s. ça rame à mort genre 500ms pour des services qui sont juste à côté. Des fois ça timeout carrément. J'ai des logs de coredns qui montrent rien de spécial mais je suis ptete passé à côté d'un truc. on a genre 500 pods et pas mal de requêtes inter-services.


# exemple de dig depuis un pod
kubectl exec -it mon-pod-quelconque -- dig mon-service.mon-namespace.svc.cluster.local

; <<>> DiG 9.16.1-Ubuntu <<>> mon-service.mon-namespace.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mon-service.mon-namespace.svc.cluster.local. IN A

;; ANSWER SECTION:
mon-service.mon-namespace.svc.cluster.local. 5 IN A 10.42.0.123

;; Query time: 487 msec
;; SERVER: 10.43.0.10#53(10.43.0.10)
;; WHEN: Mon Jan 02 15:04:05 UTC 2023
;; MSG SIZE  rcvd: 89

Commentaires

cecile91

Membre depuis le 19/04/2019

Salut ! 500ms c énorme pour du DNS interne. T'as checké les métriques de tes pods CoreDNS? genre CPU, mémoire, ou le nombre de requêtes traitées par seconde. Des fois c juste le CoreDNS qui est à la ramasse ou qui OOMKills. Regarde les logs avec `kubectl logs -n kube-system -l k8s-app=kube-dns`

frederic-rocher

Membre depuis le 29/03/2019

Est-ce que t'as des custom `resolv.conf` sur tes pods? Ou des NetworkPolicies qui pourraient impacter le trafic DNS? Souvent les gens ajoutent des serveurs DNS externes et ça fout le bordel avec la résolution interne

eleonore05

Membre depuis le 03/03/2019

Regarde aussi les `ndots` dans `/etc/resolv.conf` des pods. Si c'est trop haut (genre 5), chaque requête DNS va essayer plein de suffixes avant d'arriver au bon service, ça peut créer des latences. K8s met souvent `ndots:5` par défaut. T'as essayé de réduire ça pour voir?

brigitte-camus

Membre depuis le 19/03/2020

pas de custom `resolv.conf` j'ai vérifié. les networkpolicies sont là mais elles autorisent le trafic dns sur le port 53 vers le service coredns. pour les `ndots` c'est bien à 5. je vais regarder les métriques de coredns j'avais pas pensé à ça je check avec `top` dans les pods

cecile91

Membre depuis le 19/04/2019

Oui le `ndots:5` c'est un piège classique. Tu peux tester avec `options ndots:1` dans le `dnsConfig` de ton pod pour voir si ça change quelque chose. Ça réduit le nombre de recherches de suffixes pour les noms non qualifiés

frederic-rocher

Membre depuis le 29/03/2019

Si CoreDNS est surchargé, la solution simple c'est de scale up les réplicas. Ou d'augmenter la taille du cache si tu en utilises un. Ou vérifier si un client fait pas des requêtes débiles en boucle. Le prometheus de CoreDNS donne de bonnes infos

eleonore05

Membre depuis le 03/03/2019

Y'a aussi l'option du NodeLocal DNSCache. Ça met un cache DNS sur chaque node ce qui réduit la charge sur les pods CoreDNS centraux et améliore la latence. C'est un DaemonSet. Si tu peux le déployer, ça aide énormément.

brigitte-camus

Membre depuis le 19/03/2020

Bon c'était le `ndots:5` !!! En passant un pod avec `ndots:1` les requêtes sont quasi instantanées. Je vais voir comment changer ça globalement pour mes deploys. Et ptete mettre NodeLocal DNSCache en plus. Merci à tous c'est top

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire