K8s服务发现组件-CoreDNS简介

服务器
主要介绍CoreDNS的存在理由,以及它与其他DNS服务器的不同之处,包括其局限性。本章还介绍了CoreDNS的一些历史,例如它与Cloud Native Computing Foundation的关系。

[[386941]]

 CoreDNS,这是一种新的DNS服务器,旨在与Linux和Docker容器等配合使用,尤其是在由流行的容器编排系统Kubernetes管理的环境中尤其适用。

主要介绍CoreDNS的存在理由,以及它与其他DNS服务器的不同之处,包括其局限性。本章还介绍了CoreDNS的一些历史,例如它与Cloud Native Computing Foundation的关系。


什么是CoreDNS ?

CoreDNS是DNS服务器软件,通常用于在容器化环境(尤其是Kubernetes管理的环境)中支持服务发现功能。Miek Gieben在中编写了CoreDNS的原始版本2016年。他之前曾编写过一个名为SkyDNS的DNS服务器和一个流行的使用Go语言的Go功能DNS库,称为Go DNS。与其后继产品CoreDNS一样,SkyDNS的主要目的是支持服务发现。但是Miek钦佩名为Caddy的Gobased Web服务器的体系结构,因此他分叉Caddy创建了CoreDNS。因此,CoreDNS继承了Caddy的主要优点:其简单的配置语法,强大的基于插件的体系结构以及Go的基础。

与BIND的配置文件的语法相比,CoreDNS的Corefile(称为)非常简单。基本的基于CoreDNS的DNS服务器的Corefile通常只有几行,而且相对而言,易于阅读。

CoreDNS使用插件来提供DNS功能。因此,有一个用于缓存的插件和一个用于转发的插件,一个用于配置从文件读取区域数据的主DNS服务器的插件,以及一个插件用于配置辅助DNS服务器。不仅可以直接配置每个插件(请参阅上一段落),而且,如果不需要插件,则无需配置它,也不会执行其代码。这使CoreDNS更快,更安全。

插件也相当容易开发。这很重要,原因有两个。首先,如果您想扩展CoreDNS的功能,则可以编写自己的插件;我们将在第9章中介绍。其次,由于编写新插件不是火箭科学,因此已经开发了许多插件,并且一直在编写更多插件。您可能会发现其中一种可以提供所需的功能。

Go语言是“内存安全”的语言,这意味着它可以防止“内存访问错误”,例如缓冲区溢出和指针悬空。对于像CoreDNS这样的DNS服务器而言,这尤其重要,可以想象互联网上的任何人都可以访问。恶意行为者可能利用缓冲区溢出来使DNS服务器崩溃,甚至获得对底层操作系统(OS)的控制。实际上,在其几十年的历史中,BIND中的漏洞是由内存访问错误引起的。使用CoreDNS,您无需担心这些。不过,CoreDNS可能提供的最显着优势是其与容器基础架构和编排系统(例如etcd)进行通信的能力和Kubernetes。我们将在本书的后面部分对此进行更详细的讨论,但让我们快速浏览一下功能在这里。

CoreDNS, 容器和微服务

如果您是本书所吸引的一小部分人,那么您可能听说过容器。如果您还没有的话,可以将容器视为轻巧,高效的虚拟机(VM)。VM可以共享单个硬件平台(由虚拟机管理程序提供),而容器提供的运行环境可以在相同的OS内核下运行,但提供的隔离级别与VM相似。容器比VM小得多,可以更快地启动和停止。

容器通常用于基于微服务架构的软件中。借助微服务,应用程序(通常是一个复杂的应用程序)被分解为许多微服务。每个微服务都负责提供少量但有用且明确定义的功能。例如,一个微服务可能处理用户的身份验证,而另一个则管理那些用户的授权。总共一个应用程序可能包含数十个或数百个微服务,它们通过网络相互通信。

实际上,每个微服务可能由一个或多个容器提供。例如,身份验证服务可能实现为容器。启动和停止容器的过程如此快捷,容易,以至于应用程序或更高级别的容器协调器可能会随着对身份验证的需求的增加而动态地启动和停止其他身份验证容器。

但是,在这样的环境中,跟踪特定服务的运行位置可能会很困难。说一个支持数据库服务的容器需要与授权服务进行通信,以确定是否应允许给定用户进行特定搜索。如果正在动态启动和停止实现授权服务的容器以适应负载,我们如何获得所有正在运行的授权容器的列表?

答案通常是DNS,即域名系统。由于容器之间的通信几乎总是基于IP,Internet协议,并且由于开发人员实际上几十年来一直使用DNS查找资源的IP地址,因此使用DNS识别提供给定服务的容器是很自然的。

CoreDNS真正发挥了这种作用。CoreDNS不仅是灵活,安全的DNS服务器,而且还直接与包括Kubernetes在内的许多容器编排系统集成。这意味着容器化应用程序的管理员可以轻松地设置DNS服务器来调解和促进容器之间的通信。

CoreDNS局限性

不过,CoreDNS目前确实存在一些重大限制,并且它并不适用于所有可能的DNS服务器。其中最主要的是CoreDNS(至少在撰写本文时为最新版本)不支持完全递归。换句话说,CoreDNS无法处理查询,方法是从DNS名称空间的根目录开始,查询根DNS服务器并遵循引用,直到从权威DNS服务器之一获得答案为止。相反,它依赖于其他DNS服务器(通常称为转发器)。在第2章中,我们将更多地讨论递归和转发器。

如果您仍然对CoreDNS是否是满足您特定需求的正确选择持怀疑态度,请参阅表1-1。可能有帮助; 它总结了CoreDNS功能和BIND功能之间的主要区别。


如果您不确定其中一些术语的含义,请放心,我们将在本书的后面部分进行介绍。不过,在开始之前,我们先简单介绍一下CoreDNS,Kubernetes和称为Cloud Native Computing Foundation的东西之间的正式关系。

CoreDNS Kubernetes CNCF

Kubernetes是与CoreDNS很好地集成的容器编排系统,最初是由Google编写的,然后在2015年转换为一个开源项目。为了管理新开源的Kubernetes,Google与The Linux Foundation合作创建Cloud Native Computing Foundation(简称CNCF)。

CNCF已成为许多对构建基于云的应用程序很重要的技术的家,包括支持收集指标和警报的Prometheus,以及服务代理Envoy。CNCF管理的项目经历了各种“成熟期” 级别”(来自“沙盒”),用于早期项目;进行“孵化”,以使项目获得认可;到 “已毕业”,适用于适合广泛采用的成熟项目。

CoreDNS于2017年提交给CNCF,并于2019年1月变为“已毕业”状态。证明CoreDNS对Kubernetes环境的重要性,CoreDNS成为Kubernetes附带的默认DNS服务器,Kubernetes版本为1.13,该版本于2018年12月发布。现在几乎所有新的Kubernetes实施都安装了CoreDNS,而Kubernetes是容器世界中的佼佼者(而且容器本身似乎正在席卷整个世界),我们预计CoreDNS的安装基础将激增。

足以赞美CoreDNS的赞誉。我们已经讨论了CoreDNS的优点和缺点,以及它对Kubernetes的命运。

 

责任编辑:姜华 来源: DevOps云学堂
相关推荐

2023-08-03 08:36:30

Service服务架构

2022-04-22 13:32:01

K8s容器引擎架构

2023-07-04 07:30:03

容器Pod组件

2022-02-11 23:11:09

Kubernetes集群容器化

2023-11-06 07:16:22

WasmK8s模块

2023-09-06 08:12:04

k8s云原生

2023-09-08 08:09:12

k8sservice服务

2023-05-25 21:38:30

2023-08-04 08:19:02

2020-05-12 10:20:39

K8s kubernetes中间件

2022-09-05 08:26:29

Kubernetes标签

2022-04-13 11:33:27

容器云原生服务

2023-04-12 11:28:36

Kubernetes服务器

2023-11-07 08:23:05

2022-08-15 09:49:28

K8s云原生

2022-01-11 07:59:15

K8S KubernetesAirflow

2021-04-12 20:42:50

K8S端口内存

2023-03-05 21:50:46

K8s集群容量

2021-12-03 06:29:56

K8sDubboSpring

2024-01-26 14:35:03

鉴权K8sNode
点赞
收藏

51CTO技术栈公众号