.. _coredns_dns_refresher: ================== CoreDNS DNS刷新 ================== DNS概念复习 ============= .. note:: 如果你想更为详细地学习DNS知识,可以参考经典的 「DNS and BIND」 一书。作为互联网的基础架构软件, :ref:`bind` 是历经整个互联网发展历史的重要软件。我在很久很久以前,在一家电子邮件公司工作时,就是通过这本书来学习DNS知识的。今天,这本书依然不会过时。 DNS是一个将名字映射为其他数据,例如IP地址、邮件路由信息或其他数据的命名系统。并且DNS并不仅仅是命名系统,它也是Internet标准命名系统,也是世界上最大的分布式数据库。 DNS是一个客户服务器系统,DNS客户端从这个分布式数据库的服务器查询数据。由于数据库是分布式的,DNS服务器通常需要查询不止一个DNS服务器来找到需要的数据。DNS客户端通常被称为 ``resolvers`` ,而DNS服务器则有时候被称为 ``name servers`` 。 域名(Domain Names)和名字空间(Namespace) ----------------------------------------- 在DNS的分布式数据库中索引的数据称为 ``域名`` (domain names): - 域名由 ``.`` 连接起的ASCII字符构成,从顶至下的树状结构 - 每个节点是一个label,每个label最多 **63** 个ASCII字符 - 根节点是一个特殊label: ``null`` label,也就是0长度(只有根是null label) 一个节点的域名是一系列从这个节点反向到根节点名字空间的字符串组合: .. figure:: ../../../_static/kubernetes/administer/coredns/dns_node.png 域名 www.baz.example. : 表示该节点反向到根节点的完整路径 **需要注意: 现代复杂的计算机集群系统,一个域名已经不再代表一台服务器,而可能是无数服务器** (通过负载均衡对外提供服务) 域名,托管和Zones -------------------- 在现实网络中,域名通常由不同组织管理,例如 Google 管理了 google.com , UC Berkeley 管理了 berkeley.edu 。这意味着这些组织可以在自己托管的域名下构建更多的子域名(服务器)而无需上一级域名系统干预。 这种架构是通过域名托管(Domain delegation)实现的: 上一级域名系统将子域名托管给下级域名服务器之后,就不再管理该子域名下的域名分配和解析服务。当DNS客户端查询要求某个域名服务器给出这个托管子域名下的某个域名解析时,DNS服务器会根据这个托管关系递归从一级级DNS服务器找出真正负责这个子域名的DNS服务器,并向该托管域名的实际权威DNS服务器查询。这是一个非常巧妙的分布式数据库系统,也是构建Internet上最大的分布式数据库的基础。 在这里,每个被托管的DNS子域称为一个 ``zone`` ,DNS数据就是记录在每个 ``zone`` 中的 ``resource records`` (资源记录) 。 常见的DNS资源类型有: