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/

其他参考资料 https://www.cnblogs.com/sunsky303/p/9238669.html

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
创建域名解析记录。格式为address=/主机名称/ip地址
[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配置类似