Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

¿Por qué un nuevo servidor DNS?

Al ver este libro, la primera pregunta que se te puede ocurrir es: "¿Por qué necesita el mundo otro servidor DNS?". Al fin y al cabo, hay muchas implementaciones de servidores DNS entre las que elegir. Para empezar, está BIND, de Berkeley Internet Name Domain, el abuelo de los servidores DNS. BIND ha existido en alguna encarnación desde los años 80 y es compatible con casi todos los estándares DNS escritos. Está el Servidor DNS de Microsoft,1 que se utiliza mucho en entornos de Directorio Activo. NSD de NLnet Labs y Knot son excelentes servidores DNS autoritativos, y Unbound, también de NLnet Labs, es un servidor DNS recursivo rápido y sencillo. ¿Qué ofrece CoreDNS que no ofrezcan los demás?

Para empezar, CoreDNS está escrito en Go, y Go es un lenguaje de programación a prueba de memoria. ¿Por qué es importante? Bueno, si alguna vez has gestionado una infraestructura DNS basada en BIND y has tenido que actualizar 100 servidores DNS lo antes posible debido a un desbordamiento del búfer, ya lo sabes. Una buena parte de las vulnerabilidades de los servidores DNS de todo tipo (al menos los escritos en C y C++) tienen su origen en desbordamientos o desbordamientos de búfer y punteros colgantes. Escrito en Go, un lenguaje seguro para la memoria, CoreDNS no está sujeto a estas vulnerabilidades.

Los programas escritos en Go también pueden soportar concurrencia, o ejecución paralela. Esto puede ser útil para obtener más rendimiento de los sistemas multiprocesador o multitarea. Es notorio que el rendimiento de BIND no se adapta bien a los sistemas multiprocesador, mientras que el rendimiento de CoreDNS se adapta bien cuantos más procesadores tenga para trabajar.

Mejorar el rendimiento puede ser importante porque Go tiende a ejecutarse algo más lentamente que C o C++,2 en parte debido a la sobrecarga impuesta por sus numerosas funciones. En la mayoría de los casos, sin embargo, esto no es un problema: Lo importante es que CoreDNS funcione lo suficientemente bien como para soportar la carga de trabajo que le ofrezcas, y en la inmensa mayoría de los casos lo hace, con Go o sin Go.

Sin embargo, probablemente la capacidad más significativa que ofrece CoreDNS es su capacidad para comunicarse con la infraestructura de contenedores y los sistemas de orquestación, como etcd y Kubernetes.

¿Quién necesita CoreDNS?

La respuesta corta: básicamente cualquiera que ejecute Kubernetes, y la mayoría de la gente que ejecuta aplicaciones en contenedores.

La función que CoreDNS cumple en un entorno de contenedores es la de directorio de servicios, de la que hablamos en detalle en este libro. Un directorio de servicios ayuda a los contenedores a determinar la dirección o direcciones IP donde se están ejecutando los contenedores que ofrecen un determinado servicio. Por ejemplo, un contenedor puede buscar un nombre de dominio que represente el servicio de base de datos de una aplicación concreta para recuperar unos datos. La función de directorio de servicios es fundamental porque, en el mundo de los contenedores y los microservicios, las aplicaciones suelen descomponerse en muchos servicios pequeños (¡de ahí lo de "microservicios"!), y cada servicio puede ser ofrecido por varios contenedores, cada uno de los cuales se ejecuta en una dirección IP distinta.

Pero la utilidad de CoreDNS no se limita a los entornos en contenedores. Los plug-ins de CoreDNS soportan funcionalidades DNS avanzadas que incluso los grandes como BIND no soportan. Por ejemplo, puedes reescribir consultas y respuestas sobre la marcha. Puedes cargar automáticamente datos de zona desde GitHub o Amazon Route 53. Y como el propio CoreDNS es pequeño y suele ejecutarse en un contenedor, es adecuado para su uso en escenarios en los que un gran servidor DNS como BIND no lo sería.

A quién va dirigido este libro

Este libro está dirigido a los siguientes públicos:

  • Administradores de entornos en contenedores que necesitan la detección de servicios basada en DNS, en particular cuando esos entornos están gestionados por Kubernetes.
  • Administradores de DNS que buscan un servidor DNS pequeño y flexible que pueda ejecutarse en un contenedor.
  • Administradores de DNS que buscan un servidor DNS que
    • Se integre con Route 53
    • Soporta la reescritura flexible de consultas y respuestas
    • Soporta DNS sobre Seguridad de la Capa de Transporte (TLS) y Llamada a Procedimiento Remoto de propósito general (gRPC)
  • Desarrolladores que quieran implementar funciones DNS personalizadas escribiendo sus propios plug-ins CoreDNS.

Lo que aprenderás

Los lectores de este libro aprenderán

  • Qué distingue a CoreDNS de otros servidores DNS
  • Teoría básica del DNS, incluyendo el espacio de nombres DNS, nombres de dominio, zonas, registros de recursos, recursividad, almacenamiento en caché y reenvío.
  • Configuración básica de CoreDNS, incluyendo la configuración de servidores DNS comunes como primarios y secundarios y servidores DNS de caché
  • Las opciones de CoreDNS para gestionar los datos de zona, incluyendo opciones avanzadas como la carga desde Git y Route 53
  • Cómo funciona el descubrimiento de servicios basado en DNS y cómo configurar el descubrimiento de servicios CoreDNS con etcd y Kubernetes
  • Cómo reescribir consultas y respuestas
  • Cómo monitorizar y solucionar problemas de CoreDNS
  • Cómo crear versiones personalizadas de CoreDNS y escribir nuevos plug-ins

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Aprendiendo CoreDNS por John Belamaric y Cricket Liu (O'Reilly). Copyright 2019 John Belamaric y Cricket Liu, 978-1-492-04796-4".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante casi 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos, conferencias y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional: https://oreil.ly/learning-coreDNS.

Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a

Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://www.youtube.com/oreillymedia

Agradecimientos

Los autores desean dar las gracias a sus hábiles revisores Miek Gieben, François Tur y Michael Grosser por detectar errores tanto sutiles como atroces. También les gustaría dar las gracias a todos los demás miembros de la comunidad CoreDNS por crear un producto tan increíble.

John quiere dar las gracias a su increíble esposa, Robin, por su apoyo, ánimo y ayuda. No podría haberlo hecho sin ella. También le gustaría agradecer el apoyo de su hijo, Owen, y de su hija, Audrey, que han soportado todas las tonterías que conlleva que su padre escriba un libro. Da las gracias a Tim Hockin, Bowei Du y al resto del equipo de Kubernetes SIG-Network por ayudar a guiar a CoreDNS hacia Kubernetes, y a sus antiguos colegas de Infoblox, en particular a Chris O'Haver y Sandeep Rajan, que trabajaron duro para hacer de CoreDNS la elección correcta para Kubernetes. Por último, le gustaría dar las gracias a su antiguo colega Alan Conley, sin cuyo apoyo, CoreDNS no sería lo que es hoy.

A Grillo le gustaría dar las gracias a sus amigos y colegas de Infoblox, en particular a su jefe, Alan Conley. Sin el acoso habitual de Alan, este libro nunca habría despegado. Y envía su cariño y agradecimiento a Kristin, por su apoyo incondicional; a sus hijos, Walt (de soltera Walter B) y Greta (de soltera Baby G), fuentes de diversión y asombro y de no pocas risitas; y, por último, a Charlie y Jessie, que hicieron compañía canina fraternal durante gran parte de este proyecto pero, lamentablemente, no llegaron a ver el final.

1 Que gana el premio al nombre más prosaico, sin lugar a dudas.

2 Significa que el mismo algoritmo implementado de la misma manera en Go, C y C++ probablemente se ejecutará ligeramente más rápido en C y C++.

Get Aprender CoreDNS now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.