天天看點

Kubernetes1.7—DNS安裝

雖然通過了Service解決了Pod重建後IP動态變化(服務發現)、負載均衡問題,但使用Service還是要需要知道CLUSTER-IP,而通過NDS可以解決該問題;在Kubernetes叢集中可通過DNS進行Service服務名與IP進行映射,進而需要知道Service名稱就可以通路該服務,這裡将通過kube-dns來實作該功能;

  在https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns中下載下傳

kubedns-cm.yaml  
 kubedns-controller.yaml.sed  
 kubedns-sa.yaml  
 kubedns-svc.yaml.sed  
           

  四個檔案,其中.sed結尾的兩個檔案為模闆檔案需要重命名為:kubedns-controller.yaml、kubedns-svc.yaml,并對兩個檔案做以下修改:

  Kubedns-controller.yaml檔案中所有\(DNS_DOMAIN修改為:**cluster.local**

  Kubedns-svc.yaml檔案中所有\)DNS_SERVER_IP修改為:10.254.0.2

  注意$DNS_SERVER_IP的IP必須在kube-apiserver的配置項--service-cluster-ip-range=10.254.0.0/16範圍内;

  Kube-dns的域名格式為:<serviceName>.<namespace>.svc.<cluster_domain>

依賴

  由于kube-dns依賴于k8s-dns-kube-dns-amd64、k8s-dns-dnsmasq-nanny-amd64、k8s-dns-sidecar-amd64三個鏡像,而此鏡像都是google官方鏡像必須從google站點下載下傳,此時可通過第三方鏡像倉庫代理下載下傳再pull到本地然後通過docker tag打上官方的标簽(或修改kubedns-controller.yaml、kubedns-svc.yaml檔案中鏡像的位址為第三方位址),關于第三方鏡像倉庫代理下載下傳可以看這篇檔案:代理下載下傳;

安裝

  經過現在上訴的操作後接下來可以安裝kube-dns,執行下面幾行指令;

Kubectl create -f kubedns-cm.yaml
 Kubectl create -f kubedns-sa.yaml
 Kubectl create -f kubedns-svc.yaml
 Kubectl create -f kubedns-controller.yaml
           

  建立完成後再dashboard中已可以看到kube-dns相關服務是否正常:

Kubernetes1.7—DNS安裝

  由于node節點需要使用dns進行服務解析,是以還需要修改kubelet服務配置項,在kubelet配置檔案中添加上dns配置:--cluster-dns=10.254.0.2、--cluster-domain=cluster.local兩項配置正式上面yaml檔案模闆中所添加的值;此時DNS服務已安裝完成;

驗證DNS

  通過pod驗證DNS,下面通過pod啟動一個busybox容器驗證dns是否正常;

  pod的yaml檔案内容如下:

apiVersion: v1
 kind: Pod
 metadata:
   name: busybox
   namespace: default
 spec:
   containers:
   - image: busybox
     command:
       - sleep
       - "3600"
     imagePullPolicy: IfNotPresent
     name: busybox
   restartPolicy: Always
           

執行下面指令建立pod:

Kubectl create -f busybox.yaml
           

  執行kubectl exec busybox nslookup kubernetes指令,如顯示如下圖資訊則說明dns已正常運作;

Kubernetes1.7—DNS安裝

  該指令為在容器busybox中執行nsloolup kubernetes查詢kubernetes的dns資訊;

  還可以執行kubectl exec busybox -- nslookup kubernetes.default.svc.cluster.local

kubernetes.default.svc.cluster.local為在kubedns-controller.yaml檔案中配置的資訊;

文章首發位址:Solinx

http://www.solinx.co/archives/1061