Pourquoi les recherches DNS de certains pods sont-elles si lentes?

Résolvez les problèmes de lenteur des requêtes DNS qui entraînent des retards de connexion dans votre cluster.

Certains conteneurs basés sur Alpine Linux, tels que NGINX, ont des problèmes avec la gestion des requêtes DNS qui peuvent les amener à ne pas traiter des réponses DNS valides. Un petit pourcentage de consultations DNS à partir de ces pods peut prendre plus de 5 secondes au lieu des 80 ms habituelles. Si le délai d'attente défini pour votre application est inférieur à 5 secondes, les recherches DNS peuvent être interrompues.

Pour tester si votre pod rencontre ce problème, connectez-vous et vérifiez que curl est installé. Vous pouvez installer curl à l'aide de la commande apk add curl. Ensuite, dans le pod, exécutez la commande suivante.

for i in $(seq 1 50); do curl -k -w "time_namelookup: %{time_namelookup}\n" -so /dev/null "https://www.ibm.com/"; done

Ce problème peut être dû à la manière dont les réponses DNS sont gérées dans ces pods. Par exemple, lorsqu'une réponse IPv6 (enregistrement AAAA) et une réponse IPv4 (enregistrement A) sont renvoyées presque en même temps, l'une des deux réponses peut ne pas être traitée, ce qui fait que le client DNS n'enregistre pas la réponse. Après un délai de 5 secondes, le client DNS envoie une nouvelle demande.

Vous pouvez résoudre ce problème de l'une des manières suivantes.

  • (Préféré) Utilisez une image de base pour votre conteneur qui ne présente pas ce problème, telle que Alpine 3.18. Vous pouvez également remplacer Alpine par ubi-minimal.
  • Ajoutez options single-request-reopen ou options single-request au fichier /etc/resolv.conf du pod client. Par exemple, utilisez la commande postStart suivante pour ajouter ces options à votre pod. Ces options indiquent au client DNS de n'envoyer qu'une seule requête (A ou AAAA) à la fois, et d'éviter le problème des deux réponses qui reviennent presque en même temps.
  lifecycle:
  postStart:
    exec:
      command:
      - /bin/sh
      - -c
      - "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"