dnsmasq
鸡汤: 只要是石头,到哪里都不会发光的,所以我们必须成为金子。
1. 域名解析¶
之前生产环境设备较少,是通过维护master(192.168.1.1)设备的hosts文件实现的。每次新增设备后,需要在master的hosts文件中新增ip和主机名,再将master的hosts文件批量拷贝到生产所有已部署设备和新增设备。设备少时维护比较简单,随时设备越来越多,维护起来变得很繁琐,批量拷贝也非常消耗精力。
为了减轻维护成本,和提高维护效率,在生产环境搭建一台dns服务器非常有必要。
进过筛选,dnsmasq这个轻量级的dns服务器,具有开源,搭建简单,维护成本低的优点,符合生产环境需求。
IP地址 | 主机名 | 角色 | 系统 |
---|---|---|---|
192.168.186.139 | k8s-master01 | dnsmasq server | centos7 |
192.168.186.139 | k8s-master02 | dnsmasq client | centos7 |
192.168.186.139 | k8s-node01 | dnsmasq client | centos7 |
我们在内网通过域名访问的时候,解析指到dnsmasq server即可。
2. 部署¶
2.1 介绍¶
- 官网文档
http://www.thekelleys.org.uk/dnsmasq/doc.html
- 下载地址
http://www.thekelleys.org.uk/dnsmasq/
2.2 解析流程¶
服务器最好专门做dns服务。不要和其他业务设备共用,避免重启设备。dnsmasq先去解析hosts文件, 再去解析/etc/dnsmasq.d/
下的*.conf
文件,并且这些文件的优先级要高于dnsmasq.conf,我们自定义的resolv.dnsmasq.conf
中的DNS也被称为上游DNS,这是最后去查询解析的;
如果不想用hosts文件做解析,我们可以在/etc/dnsmasq.conf
中加入no-hosts
这条语句,这样的话就直接查询上游DNS了,如果我们不想做上游查询,就是不想做正常的解析,我们可以加入no-reslov这条语句。
2.3 安装¶
- centos7
yum install -y dnsmasq
- ubuntu
apt-get install -y dnsmasq
- 源码编译安装
#dnsmasq需要gcc支持 rpm –qa|grep gcc tar zxvf dnsmasq-2.70.tar.gz cd dnsmasq-2.70 make && make install
2.4 配置¶
配置文件
# [root@k8s-master01 ~]# egrep -v '#|^$' /etc/dnsmasq.conf #它的作用其实就是说明该目录下的所有.conf文件都是要做解析的 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig #不加载本地的/etc/hosts文件 no-hosts #本地缓存时间,通常不要求缓存本地,这样更改hosts文件后即使生效 local-ttl=3600 #最大缓存条数 cache-size=1000000 dns-forward-max=1000000 #如果想要这台服务器做解析,就要填上自己的地址,并且填上127.0.0.1的地址 listen-address=127.0.0.1,192.168.186.139 #这个文件是可以自定义的,我就跟随大流,直接复制了一份resolv.conf改了名称就用了 resolv-file=/etc/resolv.dnsmasq.conf #这个文件是可以自定义的,我就跟随大流,直接复制了一份resolv.conf改了名称就用了 all-servers log-queries log-facility=/var/log/dnsmasq/dnsmasq.log #异步log,缓解阻塞,提高性能。默认为5,最大为100 log-async=100 conf-dir=/etc/dnsmasq.d
#配置上级dns地址,用户访问外网使用,生产环境不能访问外网,该步骤可以不做 [root@k8s-master01 ~]# cp /etc/resolv.conf /etc/resolv.dnsmasq.conf [root@k8s-master01 ~]# vim /etc/resolv.dnsmasq.conf [root@k8s-master01 ~]# vim /etc/resolv.dnsmasq.conf # Generated by NetworkManager nameserver 114.114.114.114 nameserver 223.5.5.5
[root@k8s-master01 ~]# cat /etc/dnsmasq.d/hosts.conf address=/host-a/192.168.186.139 address=/host-b/192.168.186.140 address=/host-c/192.168.186.141
[root@k8s-master01 ~]# dnsmasq --test dnsmasq: syntax check OK.
[root@k8s-master01 ~]# mkdir /var/log/dnsmasq/ [root@k8s-master01 ~]# /bin/systemctl restart dnsmasq.service [root@k8s-master01 ~]# /bin/systemctl status dnsmasq.service ● dnsmasq.service - DNS caching server. Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-06-13 18:11:53 CST; 6s ago Main PID: 4857 (dnsmasq) Tasks: 1 Memory: 1.4M CGroup: /system.slice/dnsmasq.service └─4857 /usr/sbin/dnsmasq -k Jun 13 18:11:53 k8s-master01 systemd[1]: Started DNS caching server.. [root@k8s-master01 ~]# netstat -tunlp |grep 53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 5526/dnsmasq tcp6 0 0 :::53 :::* LISTEN 5526/dnsmasq udp 0 0 0.0.0.0:53 0.0.0.0:* 5526/dnsmasq udp6 0 0 :::53 :::* 5526/dnsmasq
centos6 启动方式 service dnsmasq start
3. 客户端测试¶
[root@k8s-node01 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.186.139 nameserver 114.114.114.114 nameserver 223.5.5.5 [root@k8s-node01 ~]# ping host-a -c1 PING host-a (192.168.186.139) 56(84) bytes of data. 64 bytes from 192.168.186.139 (192.168.186.139): icmp_seq=1 ttl=64 time=0.589 ms --- host-a ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.589/0.589/0.589/0.000 ms [root@k8s-node01 ~]# ping host-b -c1 PING host-b (192.168.186.140) 56(84) bytes of data. 64 bytes from 192.168.186.140 (192.168.186.140): icmp_seq=1 ttl=64 time=0.271 ms --- host-b ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.271/0.271/0.271/0.000 ms [root@k8s-node01 ~]# ping host-b -c2 PING host-b (192.168.186.140) 56(84) bytes of data. 64 bytes from 192.168.186.140 (192.168.186.140): icmp_seq=1 ttl=64 time=0.312 ms 64 bytes from 192.168.186.140 (192.168.186.140): icmp_seq=2 ttl=64 time=0.355 ms --- host-b ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.312/0.333/0.355/0.028 ms
通过ping可以看到host-c的ip地址
4. 维护¶
在/etc/dnsmasq.d/目录按设备类别新建conf文件,便于维护。 kafka.conf
存放kafka相关设备
cat /etc/dnsmasq.d/kafka.conf address=/k8s-master01/192.168.1.5 address=/k8s-master02/192.168.1.6 address=/k8s-node01/192.168.1.7 address=/k8s-node02/192.168.1.8
elastic.conf 存放elastic相关设备 ……和kafka配置类似 hadoop.conf 存放hadoop相关设备 ……和kafka配置类似 tomcat.conf 存放tomcat相关设备 ……和kafka配置类似