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. C#绑定数据

    1.<asp:DropDownList <asp:DropDownList ID="ddlclientType" runat="server" Wi ...

  2. CEF加载FLASH插件时弹出CMD命令行窗口的问题

    这个是flash插件的一个bug,CEF(chromium系列浏览器)关闭sandbox第一次加载flash插件就会跳出这样的一个提示,在Google官方也看到了chromium的issue: 解决方 ...

  3. css3 transition(转换)笔记

    之前transition也用过,大都是ctrl+c,然后ctrl+v,没有了解太详细,这次对transition的应用源自侧边抽屉展开收起的动画效果需要. W3C标准中对css3的transition ...

  4. JAVA核心编程教学

    常用类 Ø 1.1 String和StringBuffer String类封装了对字符串的常见操作,使用频率非常高,所以应该熟练掌握, String类的方法比较多,无需死记硬背,而是大概了解,用的时候 ...

  5. 把C程序的int main(void)改成static int main(void)会怎样呢?

    如题,把C程序中的主函数int main(void)改成static int main(void)会怎么样呢? 比如把 #include <stdio.h> int main(void) ...

  6. MySQL免安装版下载与配置

    1.     下载Mysql 官方:http://www.mysql.com→downloads→选社区版本MySQL Community Edition(GPL)→点击Community(GPL)D ...

  7. C# 设计模式·行为型模式

    这里列举行为型模式·到此23种就列完了···这里是看着菜鸟教程来实现··,他里边列了25种,其中过滤器模式和空对象模式应该不属于所谓的23种模式责任链模式:为请求创建一个接收者对象的链,对请求的发送者 ...

  8. 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  9. centos 快速安装wordpress

    1.两种方式得到Wordpress 首先你可以去wordpress官方网站看下最新的wordpress的下载地址多少.比如wordpress 3.9.1的下载地址是: http://cn.wordpr ...

  10. css盒模型(Box Model)

    所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和 ...