kubernetes 中DNS的安裝部署測試
阿新 • • 發佈:2018-06-19
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(主機名).)
- nslookup -query=srv _http._tcp.curl.kube-system
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的安裝部署測試