DNS 服务不是独立的系统服务,而是一种 addon ,作为插件来安装的,不是 kubernetes 集群必须的(但是非常推荐安装)。可以把它看做运行在集群上的应用,只不过这个应用比较特殊而已。

DNS 有两种配置方式,在 1.3 之前使用 etcd + kube2sky + skydns 的方式,在 1.3 之后可以使用 kubedns + dnsmasq 的方式。

第一步在所有node节点增加如下配置

vi /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.0.10 --cluster_domain=cluster.local"
systemctl restart kubelet kube-proxy

安装前准备

下载k8s-dns需要的yaml文档

github下载路径:kubernetes/cluster/addons/dns/

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

准备dns服务需要三个images

docker save gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.4 >dns.tar
docker save gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.4 >dnsmasq.tar
docker save gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.4 >sidecar.tar
docker load < dns.tar
docker load < dnsmasq.tar
docker load < sidecar.tar
docker tag gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.4  harbor.biglittleant.cn/udoctor/k8s-dns-kube-dns-amd64:1.14.4
docker push harbor.biglittleant.cn/udoctor/k8s-dns-kube-dns-amd64:1.14.4 docker tag gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.4 harbor.biglittleant.cn/udoctor/k8s-dns-dnsmasq-nanny-amd64:1.14.4
docker push harbor.biglittleant.cn/udoctor/k8s-dns-dnsmasq-nanny-amd64:1.14.4 docker tag gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.4 harbor.biglittleant.cn/udoctor/k8s-dns-sidecar-amd64:1.14.4
docker push harbor.biglittleant.cn/udoctor/k8s-dns-sidecar-amd64:1.14.4

修改配置文件

  1. 将images镜像修改为上面的私有仓库镜像。
  2. kubedns-controller.yaml中的$DNS_DOMAIN替换成cluster.local
  3. kubedns-controller.yaml中的$DNS_SERVER_IP替换成10.254.0.10。这个IP 要跟你集群配置的IP一个网段。
  4. 在kubedns这个镜像下的args中增加:- --kube-master-url=http://192.168.56.12:8080
  5. 因为kubernetes的版本是1.5.2 所以禁用volumes的参数。
#      tolerations:
# - key: "CriticalAddonsOnly"
# operator: "Exists"
# volumes:
# - name: kube-dns-config
# configMap:
# name: kube-dns
# optional: true
#        volumeMounts:
# - name: kube-dns-config
# mountPath: /kube-dns-config
#        volumeMounts:
# - name: kube-dns-config
# mountPath: /etc/k8s/dns/dnsmasq-nanny

CLUSTER-IP 这个IP 就是你集群配置的IP。

kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 3d

创建k8s-dns集群

kubectl create -f sa/kubedns-sa.yaml
kubectl create -f sa/kubedns-cm.yaml
kubectl create -f sa/kubedns-controller.yaml
kubectl create -f sa/kubedns-svc.yaml

查看集群节点是否配置成功

kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
kube-dns-3132964191-xh7fh 3/3 Running 0 4h

验证kubernetes dns是否可用

我们创建一个busybox.yaml 文件,并启动,查看解析是否正常。

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

查看已有的services服务,并测试是否可以解析

 kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 3d
kubectl exec -it busybox sh
kubectl exec -it busybox sh
/ # nslookup kubernetes
Server: 10.254.0.10
Address 1: 10.254.0.10 kube-dns.kube-system.svc.cluster.local Name: kubernetes
Address 1: 10.254.0.1 kubernetes.default.svc.cluster.local

不管那种部署很是,kubernetes 对外提供的 DNS 服务是一致的。每个 service 都会有对应的 DNS 记录,kubernetes 保存 DNS 记录的格式如下:

<service_name>..svc.

每个部分的字段意思:

service_name: 服务名称,就是定义 service 的时候取的名字

namespace:service 所在 namespace 的名字

domain:提供的域名后缀,比如默认的 cluster.local

参考文档

DNS Pods and Services

kubernetes 简介:kube-dns 和服务发现

部署kubernetes dns服务

部署kubernetes dns服务

kubernetes的使用四–安装kube-dns

k8s集群之kubernetes-dashboard和kube-dns组件部署安装

服务发现机制与Cluster DNS的安装(无CA认证版)

serviceaccount/token: no such file or directory

报错汇总

报错一 :提示Volume 错误

error: error validating "sa/kubedns-controller.yaml": error validating data: [found invalid field tolerations for v1.PodSpec, found invalid field optional for v1.ConfigMapVolumeSource]; if you choose to ignore these errors, turn validation off with --validate=false

报错原因

v1.ConfigMapVolumeSource 这个参数在kubernetes 1.6以上的版本才有,yum安装默认是1.5.2 所以需要禁用这个功能。

vim kubedns-controller.yaml 这个文件一共编辑三处

#      tolerations:
# - key: "CriticalAddonsOnly"
# operator: "Exists"
# volumes:
# - name: kube-dns-config
# configMap:
# name: kube-dns
# optional: true
#        volumeMounts:
# - name: kube-dns-config
# mountPath: /kube-dns-config
#        volumeMounts:
# - name: kube-dns-config
# mountPath: /etc/k8s/dns/dnsmasq-nanny

报错二

CrashLoopBackOff  Failed to create a kubernetes client: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory

报错的原因是因为k8s-dns 需要启用安全机制

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

在master-apiserver 配置文件中增加上面这行。但是相当于服务器开启了CA验证机制。需要的话,可以参考文章集群基于CA签名的安全设置

方法二:手动指定master-api的位置,在kubedns这个镜像下的args中增加:- --kube-master-url=http://10.10.0.183:8080。重新创建。

vim kubedns-controller.yaml
containers:
- name: kubedns
image: harbor.cloudh.net.cn/udoctor/k8s-dns-kube-dns-amd64:1.14.4
args:
- --domain=cluster.local.
- --dns-port=10053
- --config-dir=/kube-dns-config
- --v=2
- --kube-master-url=http://10.10.0.183:8080

Kubernetes-dns 服务搭建的更多相关文章

  1. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  2. Kubernetes DNS服务配置案例

    首先创建DNS服务的RC配置文件skydns-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: kube-dns-v ...

  3. DNS服务——搭建企业内网DNS服务器的作用

    前言 DNS服务——服务端 和 客户端 配置 介绍了如何在DNS安装DNS服务,更改一下配置文件就可以依据根提示解析全球域名.既然使用互联网上的DNS服务器就可以解析全球域名,为何还要自掏腰包搭建DN ...

  4. 3、dns服务搭建

    3.1.dns服务简介: 1.DNS(Domain Name System)域名系统. 目前提供网络服务的应用使用唯一的32位的IP地址来标识,但是由于数字比较复杂.难以记忆,因此产生了域名系统(DN ...

  5. DNS服务搭建(正反向解析)

    版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文地址链接:https://www.cnblogs.com/wannengachao/p/11954625.html 1.安 ...

  6. dns服务搭建

    DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的. 域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器 ...

  7. DNS服务——域名解析委派

    域名解析委派 域名解析委派和DNS域名解析递归查询很像,举个例子解释域名解析委派 ①假设在.net域名下有台计算机想要访问www.cac.com. ②.net这台DNS服务器不知道www.cac.co ...

  8. DNS服务——正向查找区 和 逆向查找区

    前言 正向查找区,就是我们最熟知的DNS.即根据域名解析成IP 逆向查找区,即根据IP解析成域名. 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于 ...

  9. 在k8s中搭建可解析hostname的DNS服务

    2016-01-25更新 上篇文章总结k8s中搭建hbase时,遇到Pod中hostname的DNS解析问题,本篇将通过修改kube2sky源码来解决这个问题. 1 前言 kube2sky在Githu ...

随机推荐

  1. java并发编程的艺术(一)---锁的基本属性

    本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...

  2. mysql根据经纬度求两地距离

    #1.两点距离(1.4142135623730951) ,),point(,)); select st_distance(point (120.10591, 30.30163),point(120.1 ...

  3. nylg 开方数

    开方数 时间限制:500 ms  |  内存限制:65535 KB 难度:3   描述 现在给你两个数 n 和 p ,让你求出 p 的开 n 次方.   输入 每组数据包含两个数n和p.当n和p都为0 ...

  4. MyBatis入门(一)—— 入门案例

    一.MyBatis简介 MyBatis是面向sql的持久层框架,他封装了jdbc访问数据库的过程,我们开发,只需专注于sql语句本身的拼装,其它赋值的过程全部可以交给MyBatis去完成. 与Hibe ...

  5. html5备忘录——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...

  6. problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 算法分析

    1. 计算前n个整数的和 def sumOfN(n): theSum = 0 for i in range(1,n+1): theSum += i return theSum print(sumOfN ...

  7. 浅谈脚本化css(一)

    读写css属性 每一个dom元素都有一个属性style,dom.style里面存放的这个元素的行间样式,我们可以通过这个属性来读写元素的行间样式. 注意: 1.我们碰到float这样的关键字属性的时候 ...

  8. grafana 安装- 曲线图展示每秒新增数据量

    下载: https://dl.grafana.com/oss/release/grafana-5.4.2.windows-amd64.zip 解压就能用 添加数据源 添加查询条件 sql 模式编写查询 ...

  9. mysqli 更新&插入操作及事务

    $mysqli = new mysqli('localhost', 'root', '1234', 'shop'); $query1 = " update sw_goods set good ...

  10. Intel超低功耗CPU的一些信息

    2015年底: Intel Braswell是专门针对超低功耗移动和桌面平台的一个家族,现有赛扬N3000/N3050/N3150.奔腾N3700四款型号,其中N300的热设计功耗只有区区4W,其他三 ...