参考文献:
https://www.jianshu.com/p/e519f46425c4
https://www.jianshu.com/p/26051ec4c461
通过部署Coredns,kubernetes集群中pod已经可以域名解析了,但是集群物理机的DNS与kubernetes管理并不统一,下面我们可以使用dnsmasq进行统一管理:
dns的拓扑管理示意图:
dnsmasq部署于物理服务器上,
而CoreDNS的上游DNS服务器默认会选择物理机网卡上设置的DNS,
只要将dnsmasq作为物理机网卡设置的DNS,
那么就可以直接设置为CoreDNS的上游DNS服务器了
一、部署Dnsmasq服务
需要关闭selinux以及配置防火墙放行53端口号
查看当前环境的selinux,firewall的状态:
如果没有关闭的话,可以参考下面的方式:
1.1 具体安装dnsmasq服务
yum install -y dnsmasq
systemctl enable dnsmasq
systemctl start dnsmasq
systemctl status dnsmasq
主要参考步骤如下所示:
1.2 dnsmasq的配置
dnsmasq的配置文件/etc/dnsmasq.conf
修改/etc/resolv.conf指向部署的dnsmasq服务器
更新master节点上的resolv.conf
更新slave1节点上的resolv.conf
更新slave2节点上的resolv.conf
创建/etc/resolv.dnsmasq.conf文件
touch /etc/resolv.dnsmasq.conf
echo 'nameserver 114.114.114.114' > /etc/resolv.dnsmasq.conf
echo 'nameserver 202.96.128.86' >> /etc/resolv.dnsmasq.conf
提示:resolv.dnsmasq.conf中设置的是真正的Nameserver,可以用电信、联通等公共的DNS。
创建dnsmasq.hosts文件
cp /etc/hosts /etc/dnsmasq.hosts
1.3 dnsmasq重启启动
systemctl restart dnsmasq
通过查看53端口,查看Dnsmasq是否正常启动:
1.4 测试dnsmasq
1.4.1 先测试物理机的域名是否可以访问
添加域名解析,然后使用物理机ping测试:
1.4.2 其他机器如何访问此域名呢?
将slave1节点上的resolve.conf域名配置文件里,将域名指向dnsmasq服务所在的服务器,如下所示:
1.4.3 在kubernetes容器中进行ping测试:
原因是因为dnsmasq是在CoreDNS部署之后才部署的,CoreDNS在启动的时候已经设置好了上游DNS服务器了,
那么只要重启一下CoreDNS就可以解决这个问题,让CoreDNS重新设置上游服务器。
重启CoreDNS之后,重新在容器内ping测test-server的域名以及外网www.baidu.com的域名,测试是否正常解析内网地址以及外网地址。
从上面的结果来看,dnsmasq已经成为了CoreDNS的上游DNS服务器了,
这样只要管理好dnsmasq的域名配置,就可以统一管理各台物理机以及kubernetes所有服务的DNS解析了。
二、【补充】dnsmasq的配置文件/etc/dnsmasq.conf
参数 | 参数说明 |
---|---|
resolv-file | 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认从/etc/resolv.conf获取。 |
strict-order | 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。 |
listen-address | 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。 |
address | 启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10 访问long.com时的所有域名都会被解析成192.168.115.10 |
bogus-nxdomain | 对于任何被解析到此 IP 的域名,将响应 NXDOMAIN 使其解析失效,可以多次指定通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点 |
server | 指定使用哪个DNS服务器进行解析,对于不同的网站可以使用不同的域名对应解析。例如:server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。 |
conf-dir | 包括的配置文件文件夹路径 |
2.1 DNSmasq的解析过程
dnsmasq先去解析本机的/etc/hosts文件, 再去解析/etc/dnsmasq.conf文件和conf-dir所指定的的文件夹(一般为/etc/dnsmasq.d/)下的*.conf文件中所配置的address,然后再去其指定的上游DNS服务器去解析。
PS:通常/etc/dnsmasq.conf中只制定配置文件夹的路径conf-dir,不配置具体的address、server等,而是在conf-dir所指定的文件夹下配置具体的address和server
2.2 dnsmasq.conf的配置举例
address=/master.localdomain/192.168.99.2
address=/router.localdomain/192.168.99.3
address=/node1.localdomain/192.168.99.4
address=/node2.localdomain/192.168.99.5
address=/.liufeng.openshift.com/192.168.99.7
server=192.168.99.6
这样的话,k8s集群内部的域名是由coredns来解析的
,物理机和k8s的域名是由dnsmasq服务来统一管理。