问题描述
最近准备将一个项目迁移到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进行切换。