[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