CoreDNS
Vimos por que precisamos de um servidor DNS e como ele pode ajudar a gerenciar a resolução de nomes em ambientes grandes com muitos hosts e como você pode configurar seus hosts para apontarem para um servidor DNS. Agora veremos como configurar um host como servidor DNS.
Existem muitas soluções de servidores DNS por aí, mas vamos nos concentrar no CoreDNS que é utilizado no Kubernetes.
Os binários CoreDNS podem ser baixados da página do Github ou como uma imagem Docker. Vamos pelo caminho tradicional. Baixe o binário usando curl ou wget e extraia-o. Você obterá o executável 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 o CoreDNS somente executar o binário deveria funcionar, mas se algum outro servidor DNS estiver utilizando a porta 53 terá este erro.
./coredns
Listen: listen tcp :53: bind: permission denied
# Mude a porta que funcionará
./coredns -dns.port=1053
.:1053
CoreDNS-1.11.2
linux/amd64, go1.20.14, 8868454
Agora não especificamos o IP para mapeamentos de nome de host. Para isso você precisa fornecer algumas configurações. Existem várias maneiras de fazer isso, veremos uma. Primeiro, colocamos todas as entradas no arquivo /etc/hosts do servidor DNS.
Depois configuramos o CoreDNS para usar esse arquivo. O CoreDNS carrega sua configuração de um arquivo chamado Corefile. Aqui está uma configuração simples que instrui o CoreDNS a buscar o IP para mapeamentos de nome de host do arquivo /etc/hosts. Quando o servidor DNS é executado, ele agora escolhe os IPs e nomes do arquivo /etc/hosts no servidor.
O CoreDNS também oferece suporte a outras formas de configurar entradas DNS por meio de plugins. Veremos o plugin que ele usa para Kubernetes em uma seção posterior.