CoreDNS
Vimos por qué necesitamos un servidor DNS y cómo puede ayudar a gestionar la resolución de nombres en ambientes grandes con muchos hosts y cómo puedes configurar tus hosts para que apunten a un servidor DNS. Ahora veremos cómo configurar un host como servidor DNS.
Existen muchas soluciones de servidores DNS por ahí, pero vamos a concentrarnos en CoreDNS que es utilizado en Kubernetes.
Los binarios CoreDNS pueden ser descargados de la página de Github o como una imagen Docker. Vamos por el camino tradicional. Descarga el binario usando curl o wget y extráelo. Obtendrás el ejecutable coredns.
wget https://github.com/coredns/coredns/releases/download/v1.11.2/coredns_1.11.2_linux_amd64.tgz
tar -xzvf coredns_1.11.2_linux_amd64.tgz
chmod +x coredns
Para iniciar CoreDNS solo ejecutar el binario debería funcionar, pero si algún otro servidor DNS está utilizando el puerto 53 tendrás este error.
./coredns
Listen: listen tcp :53: bind: permission denied
# Cambia el puerto y funcionará
./coredns -dns.port=1053
.:1053
CoreDNS-1.11.2
linux/amd64, go1.20.14, 8868454
Ahora no especificamos la IP para mapeos de nombre de host. Para eso necesitas proporcionar algunas configuraciones. Existen varias maneras de hacer esto, veremos una. Primero, colocamos todas las entradas en el archivo /etc/hosts del servidor DNS.
Después configuramos CoreDNS para usar ese archivo. CoreDNS carga su configuración de un archivo llamado Corefile. Aquí hay una configuración simple que instruye a CoreDNS a buscar la IP para mapeos de nombre de host del archivo /etc/hosts. Cuando el servidor DNS se ejecuta, ahora elige las IPs y nombres del archivo /etc/hosts en el servidor.
CoreDNS también ofrece soporte a otras formas de configurar entradas DNS a través de plugins. Veremos el plugin que usa para Kubernetes en una sección posterior.