k8s-DNS服務搭建和配置指南
1.作為服務發現機制的基本功能,在集群內需要能夠通過服務名對服務進行訪問,這就需要一個集群范圍內的
DNS服務來完成從服務名到ClusterIP地址的解析
2.Kubernetes集群的DNS服務便由CoreDNS提供。CoreDNS是CNCF基金會孵化的一個項目,是用Go語言
實現的高性能、插件式、易擴展的DNS服務端
3.CoreDNS支持自定義DNS記錄及配置upstream DNS Server,可以統一管理Kubernetes基于服務的內部
DNS和數據中心的物理DNS

4.修改每個node上kubelet的dns啟動參數
修改每個Node上kubelet的啟動參數,在其中加上以下兩個參數。
◎ --cluster-dns=169.169.0.100:為DNS服務的ClusterIP地址。
◎ --cluster-domain=cluster.local:為在DNS服務中設置的域名。
5.部署coredns服務
部署coreDns服務時,需要創建3個資源對象,1個configmap,1個deployment和1個service,
5.1:在啟用了RBAC的集群中,還可以設置ServiceAccount、ClusterRole、ClusterRoleBinding對CoreDNS容器進行權限設置
configmap主要設置coredns的主配置文件,可以定義各種域名的解析方式和使用的插件,實例
apiVersion: vl
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
labels:
addonmanager,kubernetes.io/mode: EnsureExists
data:
Corefile:
cluster,local{
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local 169.169.0.0/16{
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
{
cache 30
loadbalance
forward . /etc/resolv,conf
}
5.2:Deployment“coredns”主要設置CoreDNS容器應用的內容,其中,replicas副本的數量通常應該根據集群的規模和服務數量確定,如果單個
CoreDNS進程不足以支撐整個集群的DNS查詢,則可以通過水平擴展提高查詢能力。由于DNS服務是Kubernetes集群的關鍵核心服務,
所以建議為其Deployment設置自動擴縮容控制器
5.3:Service“kube-dns”是DNS服務的配置,這個服務需要設置固定的ClusterIP地址,
也需要將所有Node上的kubelet啟動參數--cluster-dns都設置為這個ClusterIP地址
6.服務名的DNS解析
接下來使用一個帶有nslookup工具的Pod來驗證DNS服務能否正常工作:
busybox.yaml
apiversion: v1
kind: pod
metadate:
name: busybox
namespace: default
spec:
containers:
-name: busybox
image: gcr.io/google_containers/busybox
command:
- sleep
- "3600"
運行kubectl create -f busybox.yaml 完成創建
在該容器運行成功時,通過kubectl exec -it <container_id> -- nslookup 進行測試
# kubectl exec busybox -- nslookup redis-master

可以看到,通過DNS服務器169.169.0.100成功解析了redis-master服務器的ip地址169.169.8.10
如果某個Service屬于不同的命名空間,那么在進行Service查找時,需要補充Namespace的名稱,如下
# kubectl exec busybox -- nslookup kube-dns.kube-system


浙公網安備 33010602011771號