云原生时代的CoreDNS学习指南pdf下载pdf下载

云原生时代的CoreDNS学习指南百度网盘pdf下载

作者:
简介:本篇主要提供云原生时代的CoreDNS学习指南pdf下载
出版社:机械工业出版社自营官方旗舰店
出版时间:2021-11
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

适读人群 :CoreDNS技术爱好者
在本书问世之前,学习CoreDNS需要阅读代码或梳理网站上简陋的文档。现在你不用苦恼了!通过学习本书,Docker或Linux容器的开发人员和操作人员将快速掌握如何将这个标准DNS服务器与Kubernetes结合使用。
谷歌的高级软件工程师John Belamaric和Infoblox的首席DNS架构师Cricket Liu将向你展示如何使用真实世界的示例来配置CoreDNS以实现目标。你将学习DNS的基础知识,包括它如何在容器环境中充当位置代理,以及它如何关联Kubernetes。
阅读本书,你将:
• 深入学习DNS理论知识,包括DNS命名空间、域名、域和区域。
• 了解如何配置CoreDNS服务器。
• 学会通过CoreDNS管理和服务基础区域数据及高级区域数据。
• 学会使用etcd和Kubernetes配置CoreDNS服务发现。
• 了解CoreDNS的常见用例:与Kubernetes的集成。
• 学会在查询和响应流经插件链时对其进行操作。
• 学会监控DNS服务的可用性和性能并进行故障排查。
• 学会构建CoreDNS的自定义版本并编写自定义插件。

内容简介

本书介绍了CoreDNS与其他DNS服务器的区别、DNS基础理论、CoreDNS基本配置、CoreDNS管理区域数据的选项、基于DNS的服务发现的工作原理,以及如何在etcd和Kubernetes中配置CoreDNS服务发现。此外,还讲解了如何重写查询和响应,如何监控和排查CoreDNS故障以及如何构建CoreDNS的定制版本并编写新的插件。

目录

前言 1
第1章 CoreDNS简介 7
11 CoreDNS、容器和微服务 8
12 CoreDNS的限制 9
13 CoreDNS、Kubernetes和CNCF 10
第2章 DNS知识回顾 11
21 域名系统 11
22 域名和命名空间 12
23 域、委派和区域 13
24 资源记录 15
25 DNS服务器和权威DNS服务器 16
26 解析器 17
27 解析和递归 18
28 缓存 20
29 资源记录详解 21
291 NAME 21
292 TTL 22
293 CLASS 22
210 资源记录类型 23
2101 A记录 23
2102 AAAA记录 23
2103 CNAME记录 24
2104 MX记录 24
2105 NS记录 25
2106 SRV记录 26
2107 PTR记录 28
2108 SOA记录 29
211 区域数据文件示例 31
第3章 配置CoreDNS 35
31 下载CoreDNS 35
32 CoreDNS命令行选项 37
33 Corefile语法 38
331 环境变量 40
332 可重用代码段 40
333 导入 41
334 服务器块 41
335 查询处理 42
34 插件 43
341 根插件 44
342 文件插件 45
343 辅助插件 46
344 转发插件 47
345 缓存插件 49
346 错误插件 50
347 日志插件 51
35 常见配置选项 55
351 fallthrough 55
352 tls 55
353 transfer to 56
36 DNS服务器配置示例 56
361 缓存DNS服务器 56
362 主DNS服务器 57
363 辅助DNS服务器 57
第4章 管理区域数据 59
41 文件插件 59
42 自动插件 61
43 主机插件 63
44 route53插件 65
第5章 服务发现 69
51 服务发现简介 69
52 解决服务发现问题 70
53 使用CoreDNS和etcd实现服务发现 72
531 etcd插件 73
532 其他服务发现选项 78
54 服务发现和容器编排 78
第6章 CoreDNS与Kubernetes 81
61 Kubernetes基础知识 81
62 Kubernetes网络 83
621 cluster IP服务 84
622 headless服务 85
63 Kubernetes DNS规范 86
64 CoreDNS集成 94
65 CoreDNS默认配置 95
66 存根域和联邦 99
67 集群DNS部署资源 100
671 基于角色的访问控制 100
672 服务 102
673 部署 103
68 自动扩缩 107
69 优化配置 108
610 kubernetes插件 110
611 CoreDNS扩展 112
6111 pod选项 113
6112 通配符查询 113
6113 Autopath和ndots:5问题 114
6114 区域传输支持 117
6115 对外公开服务 118
6116 修改可用记录 119
第7章 操作查询和响应 121
71 模板插件 121
72 重写插件 123
721 重写EDNS0选项 126
722 多条重写规则 128
73 元数据插件 129
74使用DNS安全扩展签名响应 130
741 管理DNSSEC签名的主区域 130
742 使用dnssec插件进行动态DNSSEC签名 134
75 案例研究:Infoblox的BloxOne威胁防御 136
751 识别用户 136
752 应用策略 138
第8章 监控和故障排查 139
81 prometheus插件 139
82 日志插件 141
83 dnstap插件 146
84 错误插件 148
85 跟踪插件 150
86 调试插件 152
第9章 自定义构建 153
91 使用外部插件编译CoreDNS 153
911 使用Docker构建 154
912 在工作站上构建 155
913 修改plugincfg文件 156
914 更换主程序 159
92 编写自定义插件 165
921 示例:只保留一条记录 168
922 与指标、跟踪和元数据集成 172

前言/序言

为什么需要一个新的DNS服务器
看到本书,你可能会想到的第一个问题是“为什么我们还需要一个新的DNS服务器呢?”毕竟,目前有很多种DNS服务器可供选择。你最先可能想到的就是DNS服务器的鼻祖—BIND(Berkeley Internet Name Domain),它诞生于20世纪80年代,支持几乎所有的DNS标准。除了BIND之外,还有微软的DNS Server,它被广泛地应用于Active Directory环境。NLnet Labs译注1的NSD和Knot也是优秀的权威DNS服务器,同样来自NLnet Labs的Unbound也是一个快速、精简的递归DNS服务器。那么,CoreDNS有哪些优势呢?
CoreDNS是用Go语言编写的,而Go是一种内存安全译注2的编程语言。你可能会好奇为什么这很重要?如果你曾经运行过基于BIND的DNS基础设施,就可能遇到过因为缓冲区溢出而不得不尽快升级100个DNS服务器的情况。所有类型的DNS服务器(至少是那些用C和C++编写的)中有相当比例的漏洞来自缓冲区溢出或指针超支和指针悬空,而使用内存安全的Go语言编写的CoreDNS就不会受这些问题的困扰。
用Go编写的程序也可以很好地支持并发或并行处理,这有助于提高多处理器系统或多任务系统的性能。众所周知,BIND的性能在多处理器系统上不能很好地提升,而CoreDNS的性能在多处理器场景下能够得到明显的提升。
性能提升确实非常重要,因为Go的运行速度往往比C或C++稍微慢一些注1,部分原因是它的诸多特性所带来的开销。然而,在大多数情况下,这并不是问题:重要的是CoreDNS能够很好地处理分配给它的工作负载。
不过,CoreDNS提供的最重要的功能可能是它能够与etcd和Kubernetes等容器基础设施和编排系统进行通信。
谁需要CoreDNS
一个简单的答案是:几乎所有使用Kubernetes的人,以及大多数运行容器化应用程序的人。
CoreDNS在容器化环境中实现了服务目录的功能,我们将在本书后面进行详细讨论。服务目录可以帮助容器确定运行特定服务的容器的IP地址,例如,为了查询一些数据,某个容器可能会查找某个特定应用程序的数据库服务的域名。服务目录的功能至关重要,因为在容器和微服务的世界里,应用程序通常被分解成许多小的服务(所以才称之为微服务),每个服务可能由多个容器提供支持,并且每个运行的容器都有不同的IP地址。
然而,CoreDNS的作用并不局限于容器化环境。CoreDNS的插件模式可以支持一些像BIND这样的巨头都不支持的高级DNS功能。例如,你可以动态地重写查询和响应,可以从GitHub或Amazon Route 53译注3服务中自动加载区域(zone)数据。此外,因为CoreDNS本身比较轻量级而且通常运行在一个容器中,所以它适用于BIND等大型DNS服务器无法使用的场景。
目标读者
本书适合的读者对象如下:
需要基于DNS的服务发现的容器化环境的管理员,特别是当这些环境是由Kubernetes管理时。
正在寻找一个可以在容器中运行的轻量的、灵活的DNS服务器的DNS管理员。
正在寻找满足以下需求的DNS服务器的DNS管理员:
–与Amazon Route 53集成
–支持灵活的查询和响应重写
–支持基于TLS(Transport Layer Security)和gRPC(general-purpose Remote Procedure Call)的DNS
希望通过编写自定义CoreDNS插件来实现特定DNS功能的开发者。
本书涵盖的内容
通过本书,你将了解:
CoreDNS与其他DNS服务器的区别。
DNS基础理论,包括DNS命名空间(namespace)、域名(domain name)、区域(zone)、资源记录(resource record)、递归(recursion)、缓存(caching)、转发(forwarding)等。
CoreDNS基本配置,包括配置通用DNS服务器,如主DNS服务器、辅助DNS服务器和缓存DNS服务器。
CoreDNS管理区域数据的选项,包括一些高级选项,如从Git和Route 53加载数据。
基于DNS的服务发现的工作原理,以及如何在etcd和Kubernetes中配置CoreDNS服务发现。
如何重写查询和响应。
如何监控CoreDNS和排查其故障。
如何构建CoreDNS的自定义版本并编写新的插件。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处的形式包含书名、作者、出版社和ISBN,例如:
Learning CoreDNS,作者John Belamric 和 Cricket Liu,由O’Reilly出版,书号978-1-49