安装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/v1beta1kind: Deploymentmetadata: ?name: curl ?namespace: kube-systemspec: ?replicas: 1 ?template: ???metadata: ?????labels: ???????app: curl ???spec: ?????containers: ?????- name: curl ???????image: appropriate/curl ???????command: ["sleep"] ???????args: ["5000"]---apiVersion: v1kind: Servicemetadata: ?name: curl ?namespace: kube-system ?labels: ???app: curlspec: ?type: ClusterIP ?selector: ???app: curl ?ports: ?- port: 80 ???targetPort: 80 ???name: http ???protocol: TCP
2.2 创建一个dns测试工具pod
apiVersion: extensions/v1beta1kind: Deploymentmetadata: ?name: tools-dns ?namespace: defaultspec: ?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.12、如果发现"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的安装部署测试
原文地址:http://blog.51cto.com/xingej/2130490