1、概述
首先部署好kubernetes集群並采用Coredns進行解析,這樣集群內部的服務都能通過內部域名進行訪問。但是集群內部的coredns與物理機的dns解析不完全統一,coredns不能解析物理機的hostname。所以需要一個統一的dns來管理兩者。主要是建立一個coredns的上游dns服務,將物理機環境的解析添加進去。使用dnsmasq做上游的dns,統一管理coredns和物理機集群的hostname解析。dnsmasq部署於物理服務器上,而CoreDNS的上游DNS服務器默認會選擇物理機網卡上設置的DNS,只要將dnsmasq作為物理機網卡設置的DNS,那么就可以直接設置為CoreDNS的上游DNS服務器了.
2、部署
#centos yum -y install dnsmasq
修改配置文件,配置文件默認是/etc/dnsmasq.conf,主要是修改如下:
resolv-file=/etc/resolv.dnsmasq.conf strict-order listen-address=127.0.0.1,10.2.73.110 addn-hosts=/etc/dnsmasq.hosts
參數解釋:
resolv-file 定義dnsmasq從哪里獲取上游DNS服務器的地址, 默認是從/etc/resolv.conf獲取。在此我們定義的是從/etc/resolv.dnsmasq.conf文件中獲得。
strict-order 表示嚴格按照resolv-file文件中的順序從上到下進行DNS解析,直到第一個解析成功為止。
listen-address 定義dnsmasq監聽的地址,默認是監控本機的所有網卡上
addn-hosts 添加主機記錄,就和/etc/hosts文件一樣,添加物理機hostname和ip映射
文件:
# cat /etc/resolv.dnsmasq.conf nameserver 10.42.25.1 nameserver 10.42.25.2 nameserver 114.114.114.114
根據自己的服務器填寫。
# cat /etc/dnsmasq.hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.2.73.110 ku
3、啟動服務
system start dnsmasq
system enable dnsmasq
system status dnsmasq
將物理機的/etc/resolv.conf里面nameserver地址換成dnsmasq的服務地址,默認監聽53端口。
nameserver 10.2.73.110
由於集群里面的Coredns已經提前部署好了,所以默認使用的是之前的/etc/resolv.conf里面的nameserver,所以不能解析node name,所以需要重新部署一下Coredns:
kubectl delete pod coredns-576cbf47c7-6t85b -n kube-system kubectl delete pod coredns-576cbf47c7-wlsrd -n kube-system
等待幾秒鍾服務會自動部署好。
4、測試dns
1)在物理機上面,訪問外網測試
2)在pod里面