Perché le ricerche DNS da alcuni pod sono così lente?
Risolvi i problemi relativi alle ricerche DNS lente che causano ritardi di connessione nel tuo cluster.
Alcuni contenitori basati su Alpine Linux, come NGINX, hanno problemi con la gestione delle query DNS che possono causare l'impossibilità di elaborare risposte DNS valide. Una piccola percentuale di ricerche DNS da questi pod può richiedere più di 5 secondi, invece dei tipici meno di 80 ms. Se il timeout impostato per l'applicazione è inferiore a 5 secondi, le ricerche DNS possono andare in timeout.
Per verificare se il tuo pod ha questo problema, accedi e verifica che curl sia installato. Puoi installare curl con il comando apk add curl. Quindi, all'interno del pod, esegui questo comando.
for i in $(seq 1 50); do curl -k -w "time_namelookup: %{time_namelookup}\n" -so /dev/null "https://www.ibm.com/"; done
Questo problema potrebbe essere causato dal modo in cui le risposte DNS vengono gestite in questi pod. Ad esempio, quando una risposta IPv6 (record AAAA) e una IPv4 (record A) vengono restituite quasi contemporaneamente, una delle due risposte potrebbe non essere elaborata, causando la mancata registrazione della risposta da parte del client DNS. Dopo un ritardo di 5 secondi, il client DNS invia una nuova richiesta.
È possibile risolvere questo problema in uno dei seguenti modi.
- (Preferito) Utilizza un'immagine di base per il tuo contenitore che non ha questo problema, come Alpine 3.18. Puoi anche sostituire Alpine con ubi - minimal.
- Aggiungere
options single-request-reopenooptions single-requestal file/etc/resolv.confdel pod client. Ad esempio, utilizza il seguente comandopostStartper aggiungere queste opzioni al tuo pod. Queste opzioni indicano al client DNS di inviare una sola richiesta (A o AAAA) alla volta, evitando il problema di due risposte quasi contemporanee.
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"