一、DNS服务概述

service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。
k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候,k8s会采用环境变量的形式,但一旦有多个service,环境变量会变复杂,为解决该问题,我们使用DNS服务。
k8sDNS服务的发展经历了三个阶段:SkyDNS、KubeDNS和CoreDNS,其架构由复杂向简单演变。
这里配置的是KubeDNS。
KubeDNS由3个容器组成:kubedns、dnsmasq和sidecar:
kubedns:该容器监控Kubernetes中的service资源变化,根据service的名称和IP地址生成DNS记录,并将DNS记录保存在内存中;
dnsmasq:该容器从kubedns中获取DNS记录,提供DNS缓存,为客户端容器应用提供DNS查询服务;
sidecar:提供对kubedns和dnsmasq服务的健康检查功能。

二、DNS服务配置

由于国内的网络问题,需要自己找一下dns相应的镜像并把它们放入私有仓库中,否则deployment下载不了:

docker pull mirrorgooglecontainers/dnsmasq-metrics-amd64:1.0
docker pull mirrorgooglecontainers/exechealthz-amd64:1.2
docker pull mirrorgooglecontainers/kube-dnsmasq-amd64:1.4
docker pull mirrorgooglecontainers/kubedns-amd64:1.9

打tag并把它们放入私有仓库中

1、用yaml创建dns服务的rc:kubedns-rc.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: kube-dnsnamespace: kube-systemlabels:k8s-app: kube-dnskubernetes.io/cluster-service: "true"
spec:strategy:rollingUpdate:maxSurge: 10%maxUnavailable: 0selector:matchLabels:k8s-app: kube-dnstemplate:metadata:labels:k8s-app: kube-dnsannotations:scheduler.alpha.kubernetes.io/critical-pod: ''scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'spec:containers:- name: kubednsimage: registry.cn-hangzhou.aliyuncs.com/google-containers/kubedns-amd64:1.9args:- --domain=cluster.local.- --dns-port=10053- --config-map=kube-dns- --v=2- --kube-master-url=http://192.168.56.4:8080 # 这个地址为之前配置的KUBE_MASTER的地址env:- name: PROMETHEUS_PORTvalue: "10055"ports:- containerPort: 10053name: dns-localprotocol: UDP- containerPort: 10053name: dns-tcp-localprotocol: TCP- containerPort: 10055name: metricsprotocol: TCP- name: dnsmasqimage: 192.168.3.88/kube-dnsmasq-amd64:1.4 #换成自己私有仓库中预先下好的镜像地址args:- --cache-size=1000- --no-resolv- --server=127.0.0.1#10053ports:- containerPort: 53name: dnsprotocol: UDP- containerPort: 53name: dns-tcpprotocol: TCP

2、用yaml创建dns服务的service:kubedns-svc.yaml

apiVersion: v1
kind: Service
metadata:name: kube-dnsnamespace: kube-systemlabels:k8s-app: kube-dnskubernetes.io/cluster-service: "true"kubernetes.io/name: "KubeDNS"
spec:selector:k8s-app: kube-dnsclusterIP: 10.254.230.254 #这个地址可以随便设,但必须在10.254网段下ports:- name: dnsport: 53protocol: UDP- name: dns-tcpport: 53protocol: TCP

3、在master以及所有节点中修改配置:

vim /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"

cluster_dns地址与kubedns-svc.yaml中的clusterIP保持一致
cluster_domain与kubedns-rc.yaml 中的domain保持一致
4、配置完后需要重启部分服务:
master节点:

systemctl stop etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
systemctl start etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler

node节点:

systemctl stop kubelet docker kube-proxy flanneld
systemctl start flanneld docker kubelet kube-proxy

5、创建rc:

kubectl create -f  kubedns-rc.yaml

6、创建service:

kubectl create -f  kubedns-svc.yaml

由于这些deployment放在了kube-system的namespace,而我们默认访问的是default,所以查看这些资源时要加上–namespace=kube-system参数。

kubectl get all --namespace=kube-system

7、查看DNS服务创建情况

$ kubectl get svc,ep,pod --all-namespaces
NAMESPACE     NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
default       svc/kubernetes   10.254.0.1      <none>        443/TCP         3d
kube-system   svc/kube-dns     10.254.230.254    <none>        53/UDP,53/TCP   1hNAMESPACE     NAME                         ENDPOINTS                     AGE
default       ep/kubernetes                192.168.1.114:6443            3d
kube-system   ep/kube-dns                  172.16.77.3:53,172.16.77.3:53   1hNAMESPACE     NAME                           READY     STATUS    RESTARTS   AGE
kube-system   po/kube-dns-2768888805-978hl   2/2       Running   0          1h

可以看到svc都成功运行。
8、接下来创建一个容器来验证DNS服务是否配置成功:

test_dns_pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:name: busybox3role: mastername: busybox3
spec:containers:- name: busybox3image: docker.io/busybox:1.28.4imagePullPolicy: IfNotPresentcommand:- sleep- "3600"

(*busybox的镜像一定要为1.28.4以下,否则后续nslookup会不成功)

kubectl create -f test_dns_pod.yaml

进入该容器:

kubectl exec -it busybox3 sh

执行nslookup+任意服务名或服务cluster-ip即可显示出该服务的相关信息。

至此DNS服务已配置成功,以后可以直接用service的名称来访问该service。
*如果某个service属于不同的命名空间,那么在进行service查找时,需要补充Namespace的名称(补充在服务名之后,用.连接),组合成完整的域名,否则会查找失败。
例如查找kube-dns:

nslookup kube-dns.kube-system

k8s DNS服务配置相关推荐

  1. Linux DNS 服务配置 (非常详细)

    Linux DNS 服务配置 (非常详细) 转载于:https://blog.51cto.com/lidi97/843516

  2. windows访问虚拟机DNS服务器,windows虚拟机中DNS服务配置

    在linux虚拟机中进行DNS服务配置并进行正向解析反向解析我博客中已经写过,下面 我来介绍一下在windows虚拟机中DNS服务的配置使用. 1.打开一台windows虚拟机中服务器管理器--角色- ...

  3. Linux DNS服务配置与管理详解

    域名系统 DNS 本章内容 -名字解析介绍 -DNS服务工作原理 -实现主服务器 -实现反向解析区域 -实现从服务器 -实现子域 -实现转发 -实现智能DNS -DNS排错 -实现Internet 的 ...

  4. Linux学习笔记RHEL 7(九)--RHEL7.0 DNS服务配置

    一.DNS域名解析服务 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系. 从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况. 缓存 ...

  5. linux dns服务配置,在Linux上配置DNS服务

    一.DNS服务简介 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所 ...

  6. RHEL7.0 DNS服务配置

    系统版本: [root@localhostnamed]# uname -a Linuxmainserver.fengslab.com 3.10.0-123.el7.x86_64 #1 SMP Mon ...

  7. Kubernetes之配置与自定义DNS服务

    本文解释如何为kubernetes集群配置及自定义DNS服务.从kubernetes1.11版本开始,coreDNS插件被包含在GA发行版中,并且被kubeadm默认安装.详情:Configuring ...

  8. CentOS 7 配置DNS服务

    主DNS 配置主DNS服务器 IP为 192.168.1.1 ; 掩码为 24位 ; DNS指向本机 建立 infanx.com 域的正反向解析 主机记录 记录类型 记录值 ns1 A 192.168 ...

  9. Linux配置DNS服务实验

    简介 DNS服务器,也称为域名解析服务器.DNS 服务器将域名解析出来,找到域名对应的ip地址的服务,可以高速缓存从其他 DNS 服务器收到的 DNS 记录,通过主机名最终得到该主机名对应的IP地址的 ...

最新文章

  1. Database项目中关于Procedure sp_refreshsqlmodule_internal的错误
  2. C# 可以利用反射给只读属性赋值吗?
  3. ubuntu安装mysql报错_在Ubuntu上安装mysql数据库和遇到的问题
  4. 20年研发管理经验谈(十六)
  5. 《乌合之众》读书笔记(part5)--名望的特性就是阻止我们看到事物的原本面目,彻底麻痹我们的判断力
  6. python时间复杂度和空间复杂度是指_时间复杂度和空间复杂度
  7. 计算机的限制而被取消win7,win7系统本次操作由于这台计算机限制而被取消的解决方法...
  8. 一个根据相似度的去重方法
  9. python工资一般多少-Python工资一般是多少 看完吓你一跳
  10. 阿里舆情︱舆情热词分析架构简述(Demo学习)
  11. python三大器_Python 入门之 Python三大器 之 迭代器
  12. 【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势
  13. 项目配置管理CM(Configuration Management)
  14. 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件wordpaster
  15. J6412四网口迷你主机折腾虚拟机教程
  16. 复杂场景下的权限系统该怎么玩?ABAC权限模型帮你搞定它!
  17. 常用的医学组织切片细胞图像数据集
  18. CH4.校园订餐app
  19. [好累的游戏]传球游戏
  20. HTML网页设计期末课程大作业~体育篮球5页面带登录

热门文章

  1. Linux关闭防火墙和端口号问题
  2. 【矩阵论】04——线性空间——子空间
  3. java多线程设计模式详解
  4. py使用polar绘制霍兰德职业测试雷达图
  5. 补码一位乘法——布斯(Booth)算法
  6. 一加7t人脸识别_一加7T新机设计图发布 这款手机的外观设计如何
  7. useImperativeHandle
  8. 辗转相除法详解(C语言实现)
  9. E. Permutation Game
  10. 20210725个人周复盘