如何统一管理物理机以及kubernetes所有网络的DNS解析呢?

参考文献:
https://www.jianshu.com/p/e519f46425c4
https://www.jianshu.com/p/26051ec4c461

通过部署Coredns,kubernetes集群中pod已经可以域名解析了,但是集群物理机的DNS与kubernetes管理并不统一,下面我们可以使用dnsmasq进行统一管理:
dns的拓扑管理示意图:

image

dnsmasq部署于物理服务器上,
而CoreDNS的上游DNS服务器默认会选择物理机网卡上设置的DNS,
只要将dnsmasq作为物理机网卡设置的DNS,
那么就可以直接设置为CoreDNS的上游DNS服务器了

一、部署Dnsmasq服务

需要关闭selinux以及配置防火墙放行53端口号
查看当前环境的selinux,firewall的状态:

image

如果没有关闭的话,可以参考下面的方式:
image

1.1 具体安装dnsmasq服务

yum install -y dnsmasq
systemctl enable dnsmasq
systemctl start dnsmasq 
systemctl status dnsmasq 

主要参考步骤如下所示:

image

1.2 dnsmasq的配置

dnsmasq的配置文件/etc/dnsmasq.conf

image

修改/etc/resolv.conf指向部署的dnsmasq服务器
更新master节点上的resolv.conf

image

更新slave1节点上的resolv.conf
image

更新slave2节点上的resolv.conf

image

创建/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。

image

创建dnsmasq.hosts文件
cp /etc/hosts /etc/dnsmasq.hosts

1.3 dnsmasq重启启动

systemctl restart dnsmasq

image

通过查看53端口,查看Dnsmasq是否正常启动:
image

1.4 测试dnsmasq

1.4.1 先测试物理机的域名是否可以访问

添加域名解析,然后使用物理机ping测试:

image

1.4.2 其他机器如何访问此域名呢?

将slave1节点上的resolve.conf域名配置文件里,将域名指向dnsmasq服务所在的服务器,如下所示:


image

1.4.3 在kubernetes容器中进行ping测试:

image

原因是因为dnsmasq是在CoreDNS部署之后才部署的,CoreDNS在启动的时候已经设置好了上游DNS服务器了,
那么只要重启一下CoreDNS就可以解决这个问题,让CoreDNS重新设置上游服务器。
image

重启CoreDNS之后,重新在容器内ping测test-server的域名以及外网www.baidu.com的域名,测试是否正常解析内网地址以及外网地址。
image

image

从上面的结果来看,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服务来统一管理。

你可能感兴趣的:(如何统一管理物理机以及kubernetes所有网络的DNS解析呢?)