Kubernetes(k8s)DNS(CoreDNS)介绍

您所在的位置:网站首页 nslookup是干嘛的 Kubernetes(k8s)DNS(CoreDNS)介绍

Kubernetes(k8s)DNS(CoreDNS)介绍

#Kubernetes(k8s)DNS(CoreDNS)介绍| 来源: 网络整理| 查看: 265

一、DNS服务概述

service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。 k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候,k8s会采用环境变量的形式,但一旦有多个service,环境变量会变复杂,为解决该问题,我们使用DNS服务。

DNS服务在kubernetes中经历了三个阶段(SkyDNS-》KubeDNS-》CoreDNS):

【第一阶段】在kubernetes 1.2版本时,dns服务使用的是由SkyDNS提供的,由4个容器组成:kube2sky、skydns、etcd和healthz。etcd存储dns记录;kube2sky监控service变化,生成dns记录;skydns读取服务,提供查询服务;healthz提供健康检查。 【第二阶段】在kubernetes 1.4版本开始使用KubeDNS,有3个容器组成:kubedns、dnsmasq和sidecar。kubedns监控service变化,并记录到内存(存到内存提高性能)中;dnsmasq获取dns记录,提供dns缓存,提供dns查询服务;sidecar提供健康检查。 【第三阶段】从kubernetes >=1.11版本开始,dns服务有CoreDNS提供,coredns支持自定义dns记录及配置upstream dns server,可以统一管理内部dns和物理dns。coredns只有一个coredns容器。下面是coredns的架构。

二、CoreDNS配置解析

下面是coredns的配置模板

apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: namespace-test data: Corefile: | .:53 { errors health ready kubernetes cluster.local 10.200.0.0/16 { pods insecure upstream 114.114.114.114 fallthrough in-addr.arpa ip6.arpa namespaces namespace-test } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } 复制代码

CoreDNS的主要功能是通过插件系统实现的。它实现了一种链式插件的结构,将dns的逻辑抽象成了一个个插件。常见的插件如下:

loadbalance:提供基于dns的负载均衡功能 loop:检测在dns解析过程中出现的简单循环问题 cache:提供前端缓存功能 health:对Endpoint进行健康检查 kubernetes:从kubernetes中读取zone数据 etcd:从etcd读取zone数据,可以用于自定义域名记录 file:从文件中读取zone数据 hosts:使用/etc/hosts文件或者其他文件读取zone数据,可以用于自定义域名记录 auto:从磁盘中自动加载区域文件 reload:定时自动重新加载Corefile配置文件的内容 forward:转发域名查询到上游dns服务器 proxy:转发特定的域名查询到多个其他dns服务器,同时提供到多个dns服务器的负载均衡功能 prometheus:为prometheus系统提供采集性能指标数据的URL pprof:在URL路径/debug/pprof下提供运行是的西能数据 log:对dns查询进行日志记录 errors:对错误信息镜像日志记录

三、Pod的dns策略 1)Pod dns策略 Default: 继承Pod所在宿主机的DNS设置 ClusterFirst:优先使用kubernetes环境的dns服务,将无法解析的域名转发到从宿主机继承的dns服务器 ClusterFirstWithHostNet:和ClusterFirst相同,对于以hostNetwork模式运行的Pod应明确知道使用该策略 None: 忽略kubernetes环境的dns配置,通过spec.dnsConfig自定义DNS配置 自定义Dns配置可以通过spec.dnsConfig字段进行设置,可以设置如下信息 nameservers:一组dns服务器的列表,最多可设置3个 searchs:一组用于域名搜索的dns域名后缀,最多6个 options:配置其他可选参数,例如ndots、timeout等 例如: spec: dnsPolicy: "None" dnsConfig: nameservers: - 1.2.3.4 searchs: - xx.ns1.svc.cluster.local - xx.daemon.com options: - name: ndots values: "2" 复制代码

pod被创建后,容器内的/etc/resolv.conf会根据这个信息进行配置。

2)测试解析结果

之前安装k8s集群的时候就已经安装过CoreDNS,所以这里就不重复讲解安装了,不清楚的,看这里

创建nslookup服务

$ cat >busybox.yaml


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3