Kubernetes DNS服务简介
介绍
域名系统(DNS)是一种用于将各种类型的信息(例如IP地址)与易于记忆的名称相关联的系统。 默认情况下,大多数Kubernetes群集会自动配置内部DNS服务,以便为服务发现提供轻量级机制。 内置的服务发现使应用程序更容易在Kubernetes集群上相互查找和通信,即使在节点之间创建,删除和移动Pod和服务时也是如此。
如果你想在开始之前就更全面地了解DNS,请阅读“ DNS术语,组件和概念简介 ”。 对于您可能不熟悉的任何Kubernetes主题,可以阅读“ Kubernetes简介 。”
Kubernetes DNS服务提供什么?
在Kubernetes版本1.11之前,Kubernetes DNS服务基于kube-dns。 1.11版引入了CoreDNS来解决kube-dns的一些安全性和稳定性问题。无论处理实际DNS记录的软件如何,两种实现都以类似的方式工作:
- 创建名为kube-dns的服务和一个或多个Pod。
- kube-dns服务监听来自Kubernetes API的服务service和端点endpoint事件,并根据需要更新其DNS记录。 创建,更新或删除Kubernetes服务及其关联的pod时会触发这些事件。
- kubelet将每个新Pod的/etc/resolv.conf名称服务器选项设置为kube-dns服务的集群IP,并使用适当的搜索选项以允许使用更短的主机名:
resolve.confnameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5
- 然后,在容器中运行的应用程序可以将主机名(例如example-service.namespace)解析为正确的群集IP地址。
Kubernetes DNS记录示例
Kubernetes服务的完整DNS A记录类似于以下示例:service.namespace.svc.cluster.local一个Pod会有这种格式的记录,反映了Pod的实际IP地址:
10.32.0.125.namespace.pod.cluster.local此外,为Kubernetes服务的命名端口创建SRV记录:
_port-name._protocol.service.namespace.svc.cluster.local所有这些的结果是内置的,基于DNS的服务发现机制,你的应用程序或微服务可以在其中定位一个简单一致的主机名,并可以访问群集上的其他服务或Pod。
搜索域和解析较短的主机名
由于resolv.conf
文件中列出了搜索域后缀,所以您通常不需要使用完整主机名来访问其他服务。 如果要在同一命名空间中寻址其它服务,则只需使用服务名称即可: other-service如果服务位于不同的命名空间中,请将其添加:
other-service.other-namespace如果您要定位Pod,则至少需要像以下所示使用:
pod-ip.other-namespace.pod
正如我们在默认的resolv.conf文件中看到的那样,只有.svc后缀会自动完成,因此请确保指定.pod之前的所有内容。
现在我们已经了解了Kubernetes DNS服务的实际用途,让我们来看看两个不同实现的一些细节。
Kubernetes DNS实现细节
如上一节所述,Kubernetes 1.11版引入了处理kube-dns服务的新版本CoreDNS。 这样做的动机是提高服务的性能和安全性。 我们先来看看原始的kube-dns实现。kube-dns
Kubernetes 1.11之前的kube-dns服务由在kube-system命名空间中的kube-dns pod中运行的三个容器组成。 这三个容器是:- kube-dns:运行SkyDNS的容器,用于执行DNS查询解析
- dnsmasq:流行的轻量级DNS解析器和缓存,用于缓存SkyDNS的响应
- sidecar:一个sidecar容器,用于处理指标报告并响应服务的运行状况检查
Dnsmasq中的安全漏洞以及SkyDNS的扩展性能问题导致了被CoreDNS所替换。
CoreDNS
从Kubernetes 1.11开始,新的Kubernetes DNS服务,CoreDNS已升级为GA。 这意味着它已准备好用于生产,并且将成为许多安装工具和托管Kubernetes提供商的默认集群DNS服务。CoreDNS,用Go编写且单一进程,它涵盖了以前系统的所有功能: 单个容器解析并缓存DNS查询,响应运行状况检查并提供指标。
除了解决与性能和安全相关的问题之外,CoreDNS还修复了一些其他小错误并添加了一些新功能:
- 修复了使用stubDomains和外部服务之间不兼容的一些问题
- CoreDNS可以通过随机化返回某些记录的顺序来增强基于DNS的round-robin负载平衡
- autopath功能可以在解析外部主机名时提高DNS响应时间,方法是更好地遍历resolv.conf中列出的每个搜索域后缀
- 如果使用kube-dns的话,10.32.0.125.namespace.pod.cluster.local将始终解析为10.32.0.125,即使pod实际上不存在。 CoreDNS具有“已验证的pod”模式,只有当存在具有正确IP且位于右侧命名空间的pod时,才会成功解析。
有关CoreDNS及其与kube-dns的不同之处的更多信息,可以阅读 Kubernetes CoreDNS GA公告 。
其他配置选项
kubernetes运营商通常希望自定义其Pod和容器如何解析某些自定义域,或者需要调整上游名称服务器或搜索resolv.conf中配置的域后缀。 您可以使用Pod规范的dnsConfig选项执行此操作:example_pod.yaml
yaml apiVersion: v1 kind: Pod metadata: namespace: example name: custom-dns spec: containers: - name: example image: nginx dnsPolicy: "None" dnsConfig: nameservers: - 203.0.113.44 searches: - custom.dns.local
更新此配置将重写Pod的resolv.conf以启用更改。 配置直接映射到标准的resolv.conf选项,因此上面的配置将新增
nameserver 203.0.113.44
和 search custom.dns.local
这几行。 结论
在本文中,我们介绍了Kubernetes DNS为开发人员提供了哪些服务的基础知识,展示了Service和Pod的一些DNS记录示例,讨论了不同的Kubernetes版本上的不同实现,并突出显示了一些可用于自定义Pod解析DNS查询的其他配置选项。
本文转自DockOne-Kubernetes DNS服务简介
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes首个严重安全漏洞发现者,谈发现过程及原理机制
北美时间11月26日,Kubernetes爆出严重安全漏洞,该漏洞由Rancher Labs联合创始人及首席架构师Darren Shepherd发现。该漏洞CVE-2018-1002105(又名Kubernetes特权升级漏洞, https://github.com/kubernetes/ ... 71411 )被确认为严重性9.8分(满分10分),恶意用户可以使用Kubernetes API服务器连接到后端服务器以发送任意请求,并通过API服务器的TLS凭证进行身份验证。这一安全漏洞的严重性更在于它可以远程执行,攻击并不复杂,不需要用户交互或特殊权限。 漏洞被发现并验证后,Kubernetes快速响应并已经发布了修补版本v1.10.11、v1.11.5、v1.12.3和v1.13.0-rc.1。仍在使用Kubernetes v1.0.x至Kubernetes v1.9.x版本的用户,被建议即刻停止并升级到修补版本。 本文由该漏洞的发现者、Rancher Labs联合创始人及首席架构师Darren Shepherd所写。他描述了自己发现这一漏洞的完整经过,剖析了问题的机制与原理,并分享...
- 下一篇
生产环境 VS 开发环境,关于Kubernetes的四大认识误区
最近我们澄清了一些大家在进行Kubernetes实验的时候所见到的常见的误解。其中最大的一个误解就是:在生产环境中运行Kubernetes和开发测试环境并无两样。 答案:是不一样的。 Avi Network公司的联合创始人兼首席技术官Ranga Rajagopalan认为:“对于Kubernetes,容器和微服务来说,实验环境和生产环境有巨大的不同。简单的运行和安全、可靠的运行是不一样的”。 Ranga Rajagopalan的意见中有一个重要的论点:上述问题不仅仅只是存在于Kubernetes,同样也存在于容器和微服务。部署容器相对简单;而在生产环境运维和缩放容器(包括容器化的微服务)是问题复杂的原因。 容器和容器的编排工具通常都是成套出现的。New Stack公司之前进行了一项调查,调查发现当组织为了解决运维所面对的挑战,去寻找更强大的技术的时候,容器反过来推动了Kubernetes的普及。虽然也有其他的工具,Kubernetes还是快速成为了编排工具和选择的代名词。像Rajagopalan说的那样,在沙箱里运行Kubernetes和在生产环境中运行Kubernetes有巨大的不同...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境