1. 程式人生 > >kubernetes 中DNS的安裝部署測試

kubernetes 中DNS的安裝部署測試

rgs sid proto args GC con target iat 通信

[toc]

安裝DNS後,pod就可以通過dns來解析service,從而實現通信

kubernetes 版本:

kubectl version   

我當前的版本是1.9.0

1、kubectl dns 的安裝

1.1 在官網下載配置文件

https://github.com/kubernetes/kubernetes

具體路徑是cluster/addons/dns/kube-dns  

可能版本不一樣,路徑略有不同

該路徑下有三個相似的配置文件:  

kube-dns.yaml.base  
kube-dns.yaml.in  
kube-dns.yaml.sed  

在此,我們使用kube-dns.yaml.sed配置文件作為模板;

1.2 需要修改其中的兩個屬性

  • $DNS_SERVER_IP 指定的是k8s dns的ip, 默認是apiserver ip
  • $DNS_DOMAIN,替換為cluster.local(與kube-apiserver定義的一致)

1.3 具體修改命令,可以使用sed命令

將kube-dns.yaml.sed配置文件,拷貝到k8s集群所在的某個服務器中

  • 對配置文件重命名
    • move kube-dns.yaml.sed kube-dns.yaml
  • 批量修改屬性
    • sed -i ‘s/$DNS_SERVER_IP/10.10.10.2/g‘ kube-dns.yaml
    • sed -i ‘s/$DNS_DOMAIN/cluster.local/g‘ kube-dns.yaml

1.4 啟動dns服務

kubectl create -f kube-dns.yaml  

2 測試dns服務

2.1 創建一個pod和service

配置文件curl.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: curl
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: curl
    spec:
      containers:
      - name: curl
        image: appropriate/curl
        command: ["sleep"]
        args: ["5000"]

---

apiVersion: v1
kind: Service
metadata:
  name: curl
  namespace: kube-system
  labels:
    app: curl
spec:
  type: ClusterIP
  selector:
    app: curl
  ports:
  - port: 80
    targetPort: 80
    name: http
    protocol: TCP

2.2 創建一個dns測試工具pod

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tools-dns
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: tools-dns
    spec:
      containers:
      - name: tools-dns
        image: tutum/dnsutils:latest
        command: ["sleep"]
        args: ["5000"]

2.3 查看剛才創建測試pod, tools-dns

kubectl get pod 

2.4 進入容器後,使用下面的命令來進行查詢

kubectl exec -it tools-dns-5665d49688-8jrnw /bin/bash
  • 查看A記錄(就是地址記錄IPv4)

    • nslookup -query=a _http._tcp.curl.kube-system
  • 查看srv記錄(一個域名系統(DNS)資源記錄,用於標識承載特定服務的計算機)
    • nslookup -query=srv _http._tcp.curl.kube-system
      (說明:service = 10(優先級) 100(比重) 80(端口) curl.kube-system.svc.cluster.local(主機名).)

2.5 測試中發現的問題:

1、 如果發現鏡像有問題的話,需要更新鏡像, 
如“k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.10” 改成“ index.tenxcloud.com/jimmy/k8s-dns-dnsmasq-nanny-amd64:1.14.1”
將"k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.10" 改成"index.tenxcloud.com/jimmy/k8s-dns-sidecar-amd64:1.14.1"  
將" k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.10" 替換為"index.tenxcloud.com/jimmy/k8s-dns-kube-dns-amd64:1.14.1

2、如果發現"Liveness probe failed: Get http://172.17.97.2:10054/healthcheck/kubedns: dial tcp 172.17.97.2:10054: getsockopt: connection refused"問題,需要將"SRV"改成"A"

參考文獻:
https://blog.csdn.net/kozazyh/article/details/79443852

kubernetes 中DNS的安裝部署測試