快速搭建一个基于hosts文件的dns服务器

1,507 阅读1分钟

问题描述

最近准备将一个项目迁移到k8s上去,项目规模大概20台虚拟机左右,每台机器都有一个hostname以及对应的局域网ip,如master1、master2,node1等等,需要内部使用一个dns,直接使用ip会比较麻烦,机器一多就容易忘掉。

运维同学使用的方案是:每台机器都维护一个hosts文件,把所有的hostname和ip都写在hosts文件里,这样维护起来非常的麻烦。如果新加一个节点,就意味着每台节点都得复制一份这个hosts文件。

如何解决

使用coredns搭建一个dns服务器,启用hosts插件,只在一个docker-compose.yml文件里维护hostname列表,其他内网机器使用该机器的dns。

配置文件如下:

docker-compose.yml

version: '3'
services:
  coredns:
    image: 'coredns/coredns:latest'
    ports:
    - 53:53/udp
    extra_hosts:
    - 'master1:192.168.10.21'
    volumes:
    - ./Corefile:/etc/Corefile
    command:
    - "-conf"
    - "/etc/Corefile"

Corefile(该文件需要跟docker-compose.yml在一个目录)

. {
    hosts
    log
    errors
}

扩展

高可用性的扩展:使用etcd进行数据保存,在2台机器启动coredns的实例,使用keeplived进行切换。