¿Por qué las búsquedas DNS de determinados pods son tan lentas?
Soluciona los problemas de lentitud en las consultas DNS que provocan retrasos en la conexión de tu clúster.
Ciertos contenedores basados en Alpine Linux, como NGINX, tienen problemas con el manejo de consultas DNS que pueden causar que no procesen respuestas DNS válidas. Un pequeño porcentaje de las búsquedas DNS de estos pods pueden tardar más de 5 segundos en lugar de los típicos menos de 80 ms. Si el tiempo de espera establecido para su aplicación es inferior a 5 segundos, las búsquedas DNS pueden agotarse.
Para probar si el pod tiene este problema, inicie sesión en él y verifique que curl está instalado. Puede instalar curl con el mandato apk add curl. A continuación, dentro del pod, ejecuta el siguiente comando.
for i in $(seq 1 50); do curl -k -w "time_namelookup: %{time_namelookup}\n" -so /dev/null "https://www.ibm.com/"; done
Este problema puede deberse a la forma en que se manejan las respuestas DNS en estos pods. Por ejemplo, cuando una respuesta IPv6 (registro AAAA) y una IPv4 (registro A) se devuelven casi al mismo tiempo, una de las dos respuestas podría no procesarse, provocando que el cliente DNS no registre la respuesta. Después de un retardo de 5 segundos, el cliente DNS envía una nueva solicitud.
Puede resolver este problema de una de las siguientes maneras.
- (Preferido) Utilice una imagen base para el contenedor que no tenga este problema, como Alpine 3.18. También puede sustituir Alpine por ubi-minimal.
- Añada
options single-request-reopenooptions single-requestal archivo/etc/resolv.confdel pod cliente. Por ejemplo, utilice el siguiente mandatopostStartpara añadir estas opciones al pod. Estas opciones indican al cliente DNS que envíe sólo una petición (A o AAAA) cada vez, y evitan el problema de que se reciban dos respuestas casi al mismo tiempo.
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"