云原生時(shí)代的CoreDNS學(xué)習(xí)指南
定 價(jià):79 元
- 作者: [美] John Belamaric,Cricket Liu 著,史天,張媛 譯
- 出版時(shí)間:2021/11/1
- ISBN:9787111694434
- 出 版 社:機(jī)械工業(yè)出版社
本書介紹了CoreDNS與其他DNS服務(wù)器的區(qū)別、DNS基礎(chǔ)理論、CoreDNS基本配置、CoreDNS管理區(qū)域數(shù)據(jù)的選項(xiàng)、基于DNS的服務(wù)發(fā)現(xiàn)的工作原理,以及如何在etcd和Kubernetes中配置CoreDNS服務(wù)發(fā)現(xiàn)。此外,還講解了如何重寫查詢和響應(yīng),如何監(jiān)控和排查CoreDNS故障以及如何構(gòu)建CoreDNS的定制版本并編寫新的插件。
適讀人群 :CoreDNS技術(shù)愛好者
在本書問世之前,學(xué)習(xí)CoreDNS需要閱讀代碼或梳理網(wǎng)站上簡(jiǎn)陋的文檔,F(xiàn)在你不用苦惱了!通過學(xué)習(xí)本書,Docker或Linux容器的開發(fā)人員和操作人員將快速掌握如何將這個(gè)標(biāo)準(zhǔn)DNS服務(wù)器與Kubernetes結(jié)合使用。
谷歌的高級(jí)軟件工程師John Belamaric和Infoblox的首席DNS架構(gòu)師Cricket Liu將向你展示如何使用真實(shí)世界的示例來(lái)配置CoreDNS以實(shí)現(xiàn)目標(biāo)。你將學(xué)習(xí)DNS的基礎(chǔ)知識(shí),包括它如何在容器環(huán)境中充當(dāng)位置代理,以及它如何關(guān)聯(lián)Kubernetes。
閱讀本書,你將:
?? 深入學(xué)習(xí)DNS理論知識(shí),包括DNS命名空間、域名、域和區(qū)域。
?? 了解如何配置CoreDNS服務(wù)器。
?? 學(xué)會(huì)通過CoreDNS管理和服務(wù)基礎(chǔ)區(qū)域數(shù)據(jù)及高級(jí)區(qū)域數(shù)據(jù)。
?? 學(xué)會(huì)使用etcd和Kubernetes配置CoreDNS服務(wù)發(fā)現(xiàn)。
?? 了解CoreDNS的常見用例:與Kubernetes的集成。
?? 學(xué)會(huì)在查詢和響應(yīng)流經(jīng)插件鏈時(shí)對(duì)其進(jìn)行操作。
?? 學(xué)會(huì)監(jiān)控DNS服務(wù)的可用性和性能并進(jìn)行故障排查。
?? 學(xué)會(huì)構(gòu)建CoreDNS的自定義版本并編寫自定義插件。
為什么需要一個(gè)新的DNS服務(wù)器
看到本書,你可能會(huì)想到的第一個(gè)問題是“為什么我們還需要一個(gè)新的DNS服務(wù)器呢?”畢竟,目前有很多種DNS服務(wù)器可供選擇。你最先可能想到的就是DNS服務(wù)器的鼻祖—BIND(Berkeley Internet Name Domain),它誕生于20世紀(jì)80年代,支持幾乎所有的DNS標(biāo)準(zhǔn)。除了BIND之外,還有微軟的DNS Server,它被廣泛地應(yīng)用于Active Directory環(huán)境。NLnet Labs譯注1的NSD和Knot也是優(yōu)秀的權(quán)威DNS服務(wù)器,同樣來(lái)自NLnet Labs的Unbound也是一個(gè)快速、精簡(jiǎn)的遞歸DNS服務(wù)器。那么,CoreDNS有哪些優(yōu)勢(shì)呢?
CoreDNS是用Go語(yǔ)言編寫的,而Go是一種內(nèi)存安全譯注2的編程語(yǔ)言。你可能會(huì)好奇為什么這很重要?如果你曾經(jīng)運(yùn)行過基于BIND的DNS基礎(chǔ)設(shè)施,就可能遇到過因?yàn)榫彌_區(qū)溢出而不得不盡快升級(jí)100個(gè)DNS服務(wù)器的情況。所有類型的DNS服務(wù)器(至少是那些用C和C++編寫的)中有相當(dāng)比例的漏洞來(lái)自緩沖區(qū)溢出或指針超支和指針懸空,而使用內(nèi)存安全的Go語(yǔ)言編寫的CoreDNS就不會(huì)受這些問題的困擾。
用Go編寫的程序也可以很好地支持并發(fā)或并行處理,這有助于提高多處理器系統(tǒng)或多任務(wù)系統(tǒng)的性能。眾所周知,BIND的性能在多處理器系統(tǒng)上不能很好地提升,而CoreDNS的性能在多處理器場(chǎng)景下能夠得到明顯的提升。
性能提升確實(shí)非常重要,因?yàn)镚o的運(yùn)行速度往往比C或C++稍微慢一些注1,部分原因是它的諸多特性所帶來(lái)的開銷。然而,在大多數(shù)情況下,這并不是問題:重要的是CoreDNS能夠很好地處理分配給它的工作負(fù)載。
不過,CoreDNS提供的最重要的功能可能是它能夠與etcd和Kubernetes等容器基礎(chǔ)設(shè)施和編排系統(tǒng)進(jìn)行通信。
誰(shuí)需要CoreDNS
一個(gè)簡(jiǎn)單的答案是:幾乎所有使用Kubernetes的人,以及大多數(shù)運(yùn)行容器化應(yīng)用程序的人。
CoreDNS在容器化環(huán)境中實(shí)現(xiàn)了服務(wù)目錄的功能,我們將在本書后面進(jìn)行詳細(xì)討論。服務(wù)目錄可以幫助容器確定運(yùn)行特定服務(wù)的容器的IP地址,例如,為了查詢一些數(shù)據(jù),某個(gè)容器可能會(huì)查找某個(gè)特定應(yīng)用程序的數(shù)據(jù)庫(kù)服務(wù)的域名。服務(wù)目錄的功能至關(guān)重要,因?yàn)樵谌萜骱臀⒎⻊?wù)的世界里,應(yīng)用程序通常被分解成許多小的服務(wù)(所以才稱之為微服務(wù)),每個(gè)服務(wù)可能由多個(gè)容器提供支持,并且每個(gè)運(yùn)行的容器都有不同的IP地址。
然而,CoreDNS的作用并不局限于容器化環(huán)境。CoreDNS的插件模式可以支持一些像BIND這樣的巨頭都不支持的高級(jí)DNS功能。例如,你可以動(dòng)態(tài)地重寫查詢和響應(yīng),可以從GitHub或Amazon Route 53譯注3服務(wù)中自動(dòng)加載區(qū)域(zone)數(shù)據(jù)。此外,因?yàn)镃oreDNS本身比較輕量級(jí)而且通常運(yùn)行在一個(gè)容器中,所以它適用于BIND等大型DNS服務(wù)器無(wú)法使用的場(chǎng)景。
目標(biāo)讀者
本書適合的讀者對(duì)象如下:
需要基于DNS的服務(wù)發(fā)現(xiàn)的容器化環(huán)境的管理員,特別是當(dāng)這些環(huán)境是由Kubernetes管理時(shí)。
正在尋找一個(gè)可以在容器中運(yùn)行的輕量的、靈活的DNS服務(wù)器的DNS管理員。
正在尋找滿足以下需求的DNS服務(wù)器的DNS管理員:
–與Amazon Route 53集成
–支持靈活的查詢和響應(yīng)重寫
–支持基于TLS(Transport Layer Security)和gRPC(general-purpose Remote Procedure Call)的DNS
希望通過編寫自定義CoreDNS插件來(lái)實(shí)現(xiàn)特定DNS功能的開發(fā)者。
本書涵蓋的內(nèi)容
通過本書,你將了解:
CoreDNS與其他DNS服務(wù)器的區(qū)別。
DNS基礎(chǔ)理論,包括DNS命名空間(namespace)、域名(domain name)、區(qū)域(zone)、資源記錄(resource record)、遞歸(recursion)、緩存(caching)、轉(zhuǎn)發(fā)(forwarding)等。
CoreDNS基本配置,包括配置通用DNS服務(wù)器,如主DNS服務(wù)器、輔助DNS服務(wù)器和緩存DNS服務(wù)器。
CoreDNS管理區(qū)域數(shù)據(jù)的選項(xiàng),包括一些高級(jí)選項(xiàng),如從Git和Route 53加載數(shù)據(jù)。
基于DNS的服務(wù)發(fā)現(xiàn)的工作原理,以及如何在etcd和Kubernetes中配置CoreDNS服務(wù)發(fā)現(xiàn)。
如何重寫查詢和響應(yīng)。
如何監(jiān)控CoreDNS和排查其故障。
如何構(gòu)建CoreDNS的自定義版本并編寫新的插件。
排版約定
本書中使用以下排版約定:
斜體(Italic)
表示新的術(shù)語(yǔ)、URL、電子郵件地址、文件名和文件擴(kuò)展名。
等寬字體(Constant width)
用于程序清單,以及段落中的程序元素,例如變量名、函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句以及關(guān)鍵字。
該圖示表示一般性說(shuō)明。
該圖示表示警告或注意。
示例代碼
這里的代碼是為了幫助你更好地理解本書的內(nèi)容。通常,可以在程序或文檔中使用本書中的代碼,而不需要聯(lián)系O’Reilly獲得許可,除非需要大段地復(fù)制代碼。例如,使用本書中所提供的幾個(gè)代碼片段來(lái)編寫一個(gè)程序不需要得到我們的許可,但銷售或發(fā)布O’Reilly的示例代碼則需要獲得許可。引用本書的示例代碼來(lái)回答問題也不需要許可,將本書中的很大一部分示例代碼放到自己的產(chǎn)品文檔中則需要獲得許可。
非常歡迎讀者使用本書中的代碼,希望(但不強(qiáng)制)注明出處。注明出處的形式包含書名、作者、出版社和ISBN,例如:
Learning CoreDNS,作者John Belamric 和 Cricket Liu,由O’Reilly出版,書號(hào)978-1-49
前言 1
第1章 CoreDNS簡(jiǎn)介 7
11 CoreDNS、容器和微服務(wù) 8
12 CoreDNS的限制 9
13 CoreDNS、Kubernetes和CNCF 10
第2章 DNS知識(shí)回顧 11
21 域名系統(tǒng) 11
22 域名和命名空間 12
23 域、委派和區(qū)域 13
24 資源記錄 15
25 DNS服務(wù)器和權(quán)威DNS服務(wù)器 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 區(qū)域數(shù)據(jù)文件示例 31
第3章 配置CoreDNS 35
31 下載CoreDNS 35
32 CoreDNS命令行選項(xiàng) 37
33 Corefile語(yǔ)法 38
331 環(huán)境變量 40
332 可重用代碼段 40
333 導(dǎo)入 41
334 服務(wù)器塊 41
335 查詢處理 42
34 插件 43
341 根插件 44
342 文件插件 45
343 輔助插件 46
344 轉(zhuǎn)發(fā)插件 47
345 緩存插件 49
346 錯(cuò)誤插件 50
347 日志插件 51
35 常見配置選項(xiàng) 55
351 fallthrough 55
352 tls 55
353 transfer to 56
36 DNS服務(wù)器配置示例 56
361 緩存DNS服務(wù)器 56
362 主DNS服務(wù)器 57
363 輔助DNS服務(wù)器 57
第4章 管理區(qū)域數(shù)據(jù) 59
41 文件插件 59
42 自動(dòng)插件 61
43 主機(jī)插件 63
44 route53插件 65
第5章 服務(wù)發(fā)現(xiàn) 69
51 服務(wù)發(fā)現(xiàn)簡(jiǎn)介 69
52 解決服務(wù)發(fā)現(xiàn)問題 70
53 使用CoreDNS和etcd實(shí)現(xiàn)服務(wù)發(fā)現(xiàn) 72
531 etcd插件 73
532 其他服務(wù)發(fā)現(xiàn)選項(xiàng) 78
54 服務(wù)發(fā)現(xiàn)和容器編排 78
第6章 CoreDNS與Kubernetes 81
61 Kubernetes基礎(chǔ)知識(shí) 81
62 Kubernetes網(wǎng)絡(luò) 83
621 cluster IP服務(wù) 84
622 headless服務(wù) 85
63 Kubernetes DNS規(guī)范 86
64 CoreDNS集成 94
65 CoreDNS默認(rèn)配置 95
66 存根域和聯(lián)邦 99
67 集群DNS部署資源 100
671 基于角色的訪問控制 100
672 服務(wù) 102
673 部署 103
68 自動(dòng)擴(kuò)縮 107
69 優(yōu)化配置 108
610 kubernetes插件 110
611 CoreDNS擴(kuò)展 112
6111 pod選項(xiàng) 113
6112 通配符查詢 113
6113 Autopath和ndots:5問題 114
6114 區(qū)域傳輸支持 117
6115 對(duì)外公開服務(wù) 118
6116 修改可用記錄 119
第7章 操作查詢和響應(yīng) 121
71 模板插件 121
72 重寫插件 123
721 重寫EDNS0選項(xiàng) 126
722 多條重寫規(guī)則 128
73 元數(shù)據(jù)插件 129
74使用DNS安全擴(kuò)展簽名響應(yīng) 130
741 管理DNSSEC簽名的主區(qū)域 130
742 使用dnssec插件進(jìn)行動(dòng)態(tài)DNSSEC簽名 134
75 案例研究:Infoblox的BloxOne威脅防御 136
751 識(shí)別用戶 136
752 應(yīng)用策略 138
第8章 監(jiān)控和故障排查 139
81 prometheus插件 139
82 日志插件 141
83 dnstap插件 146
84 錯(cuò)誤插件 148
85 跟蹤插件 150
86 調(diào)試插件 152
第9章 自定義構(gòu)建 153
91 使用外部插件編譯CoreDNS 153
911 使用Docker構(gòu)建 154
912 在工作站上構(gòu)建 155
913 修改plugincfg文件 156
914 更換主程序 159
92 編寫自定義插件 165
921 示例:只保留一條記錄 168
922 與指標(biāo)、跟蹤和元數(shù)據(jù)集成 172