猜你喜欢
Kubernetes网络权威指南:基础、原理与实践

Kubernetes网络权威指南:基础、原理与实践

书籍作者:杜军 ISBN:9787121373398
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7534
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书是容器与Kubernetes网络的基础和进阶书籍,旨在让更多人了解和学习云原生时代的底层网络模型与实现机制,指导企业在落地云原生时的网络方案选型。

全书共6章,第1章 Linux网络虚拟化将支撑容器网络的内核技术娓娓道来,第2章简单介绍了Docker网络模型,第3章介绍Kubernetes网络原理与实践,第4章剖析了Kubernetes网络实现机制,第5章详解了业界主流的Kubernetes网络插件生态,第6章重点解析了Istio网络流量管控的背后机制。


作者简介

杜军,浙大SEL实验室硕士,曾任华为云架构师、咨询组专家,容器技术布道师。开源社区自身贡献者与维护着,CNCF TOC Contributor,Kubernetes和Istio双科maintainer,对云计算技术演进与内在驱动力有深刻见解,主要研究方向为容器、微服务、DevOps、边缘计算。

编辑推荐
适读人群 :本书适合作为高等院校计算机相关专业云计算课程的参考资料,也适合云计算从业者,特别是希望对云原生网络技术有较深入了解并希望将其应用到日常工作中的所有读者阅读。

Kubernetes网络*威指南,云原生时代的底层网络模型、实现、企业落地选型必备!

前言

自序


缘起

这些年来,我观察到每次 Linux 世界的重大技术创新都发源于内核,经过一层层面向用户的抽象和封装,演化出应用层的森罗万象。正所谓万变不离其宗!

我自认为是个“old school”(老派)的人,坚信维持这个世界运转的、最本质的那部分东西是不会轻易改变的。尽管新技术“乱花渐欲迷人眼”,但经历过时间锤炼的实用技术和工具总是历久弥新的。一个很好的例子便是传统的网络虚拟化和 BGP,它们就是在容器这个新瓶子里焕发第二春的。因此,当有时髦的新技术出现时,我的第一反应是这些新技术底层是怎么实现的,对那些看起来酷炫的功能反倒没有兴趣。正如 OpenStack 兴起的那些年,当大家都在谈论 nova、neutron 这类调度虚拟机和网络的组件时,我默默地翻读了内核虚拟机(KVM)的源码。至今,我对那种奇妙的感觉记忆犹新,恰如一个发烧级摄影爱好者走进暗房,欣喜若狂地亲自手洗一张可触摸的胶片影像。当我读懂了 KVM 时,再回过头来看 OpenStack 便有了一种“会当凌绝顶,一览众山小”的豁然贯通之感。

工作之余让心静下来,细细品味,认真思考技术的本质——相信这是所有有激情、有梦想的工程师的共同追求。虽然在软件版本快速迭代的高压面前,这种良好的追求有时也会变成一种奢求,但是我坚信工程师不能只当一个使用者,而一定要理解当前正在使用的技术的底层实现机制。因此,在我的《云原生分布式存储基石:etcd 深入解析》一书中,开篇只字未提全书主角 etcd,而耗费将近 80 页的笔墨,从分布式系统的基本理论一直讲到一致性协议 Raft。尽管内容看似与这个高速发展、追求快节奏的社会“格格不入”,但我仍希望能够通过出版技术书这种本身就慢节奏且带仪式感的行为沉淀自己的思考。如果能够跟有缘的读者碰撞出思想的火花,则将是我人生的一大幸事!


我为什么写这本书

云计算的世界里,计算最基础,存储最重要,网络最复杂。在 Kubernetes 已经成为云原生代名词的今天,市面上介绍 Kubernetes 的书籍已经很多,然而限于篇幅或术业有专攻等诸多主客观因素,不少书籍对 Kubernetes 网络部分的讲解只是蜻蜓点水,甚至有些还存在专业性的错误。我经常在一些学习 Kubernetes 的论坛和群里看到有用户抱怨:传统网络架构都还没搞明白,又要理解容器网络。容器网络领域不但存在大量的术语,而且理解具体的方案需要不少前置知识,这无形中增加了学习的难度。计算机网络是我在大学里最喜欢,也是最擅长的一门课程。在我看来,计算机网络趣味性强,而且对逻辑性和动手能力要求较高。看到整个云原生网络领域正发生着激动人心的技术变革,意义不亚于上一次 SDN 兴起带来的冲击,我感觉这对传统网络工程师来说会是一次自我升级转型的契机。于是,我萌生了专门为 Docker、Kubernetes 的用户,以及传统网络工程师撰写一本云原生网络书籍的想法,破除他们学习过程中“不识庐山真面目,只缘身在此山中”的无力感。


关于本书

虽然书名是《Kubernetes 网络权威指南:基础、原理与实践》,但全书内容并不局限于Kubernetes。我对本书的定位是云原生领域的网络权威指南,企业落地方案的选型参考。按照我“old school”的思路,本书特别注重提供理解容器网络所必需的基础知识,会由浅入深地从架构、使用、实现原理等多方面展开,试图为读者呈现整个云原生网络的知识体系。

全书的脉络是:以 Linux 网络虚拟化基础作为“暖场嘉宾”,以 Docker 原生的容器网络“承前启后”,随后是主角 Kubernetes 网络“粉墨登场”,在各类 CNI 插件“沙场点兵”过后,以代表容器下半场的服务网格 Istio“谢幕”。

王安石在登上飞来峰后曾吟下“不畏浮云遮望眼,自缘身在最高层”这样的千古佳句。希望本书能够成为云计算 2.0 时代的弄潮儿们叩开网络大门的敲门砖,在解决各类场景下错综复杂的问题时能够做到“口中有粮、心中不慌”。不论是定位疑难杂症,还是技术选型,抑或是定制化开发都能轻松驾驭!

“人生不止眼前的苟且,还有诗和远方的田野”,愿更多的同路人加入。


杜军

2019 年 8 月于厦门鼓浪屿


目录

第1章夯实基础:Linux网络虚拟化 1

1.1 网络虚拟化基石:network namespace 1

1.1.1 初识network namespace 2

1.1.2 配置network namespace 3

1.1.3 network namespace API的使用 6

1.1.4 小结 12

1.2 千呼万唤始出来:veth pair 12

1.2.1 veth pair内核实现 14

1.2.2 容器与host veth pair的关系 15

1.2.3 小结 17

1.3 连接你我他:Linux bridge 17

1.3.1 Linux bridge初体验 17

1.3.2 把IP让给Linux bridge 21

1.3.3 将物理网卡添加到Linux bridge 22

1.3.4 Linux bridge在网络虚拟化中的应用 25

1.3.5 网络接口的混杂模式 26

1.4 给用户态一个机会:tun/tap设备 28

1.4.1 tun/tap设备的工作原理 28

1.4.2 利用tun设备部署一个VPN 29

1.4.3 tun设备编程 31

1.5 iptables 34

1.5.1 祖师爷netfilter 34

1.5.2 iptables的三板斧:table、chain和rule 36

1.5.3 iptables的常规武器 39

1.6 初识 Linux 隧道:ipip 45

1.6.1 测试ipip隧道 46

1.6.2 ipip隧道测试结果复盘 49

1.6.3 小结 50

1.7 Linux 隧道网络的代表:VXLAN 51

1.7.1 为什么需要VXLAN 51

1.7.2 VXLAN协议原理简介 52

1.7.3 VXLAN组网必要信息 54

1.7.4 VXLAN基本配置命令 55

1.7.5 VXLAN网络实践 56

1.7.6 分布式控制中心 63

1.7.7 自维护VTEP组 63

1.7.8 小结 68

1.8 物理网卡的分身术:Macvlan 68

1.8.1 Macvlan五大工作模式解析 68

1.8.2 测试使用Macvlan设备 72

1.8.3 Macvlan的跨机通信 73

1.8.4 Macvlan与overlay对比 74

1.8.5 小结 75

1.9 Macvlan的救护员:IPvlan 75

1.9.1 IPvlan简介 75

1.9.2 测试IPvlan 77

1.9.3 Docker IPvlan网络 78

1.9.4 小结 78


第2章 饮水思源:Docker网络模型简介 79

2.1 主角登场:Linux容器 79

2.1.1 容器是什么 79

2.1.2 容器与虚拟机对比 80

2.1.3 小结 81

2.2 打开万花筒:Docker的四大网络模式 81

2.2.1 bridge模式 82

2.2.2 host模式 83

2.2.3 container模式 84

2.2.4 none模式 85

2.3 最常用的Docker网络技巧 85

2.3.1 查看容器IP 85

2.3.2 端口映射 86

2.3.3 访问外网 84

2.3.4 DNS和主机名 87

2.3.5 自定义网络 88

2.3.6 发布服务 90

2.3.7 docker link:两两互联 91

2.4 容器网络的第一个标准:CNM 93

2.4.1 CNM标准 93

2.4.2 体验CNM接口 94

2.4.3 Libnetwork 95

2.4.4 Libnetwork扩展 97

2.4.5 小结 98

2.5 天生不易:容器组网的挑战 99

2.5.1 容器网络挑战综述 99

2.5.2 Docker的解决方案 101

2.5.3 第三方容器网络插件 102

2.5.4 小结 103

2.6 如何做好技术选型:容器组网方案沙场点兵 103

2.6.1 隧道方案 104

2.6.2 路由方案 104

2.6.3 容器网络组网类型 106

2.6.4 关于容器网络标准接口 107

2.6.5 小结 108


第 3 章 标准的胜利:Kubernetes 网络原理与实践 109

3.1 容器基础设施的代言人:Kubernetes 109

3.1.1 Kubernetes简介 109

3.1.2 Kubernetes能做什么 111

3.1.3 如何用Kubernetes 113

3.1.4 Docker在Kubernetes中的角色 113

3.2 终于等到你:Kubernetes网络 114

3.2.1 Kubernetes网络基础 114

3.2.2 Kubernetes网络架构综述 115

3.2.3 Kubernetes主机内组网模型 117

3.2.4 Kubernetes跨节点组网模型 118

3.2.5 Pod的hosts文件 120

3.2.6 Pod的hostname 121

3.3 Pod的核心:pause容器 124

3.4 打通CNI与Kubernetes:Kubernetes网络驱动 131

3.4.1 即将完成历史使命:Kubenet 131

3.4.2 网络生态第一步:CNI 133

3.5 找到你并不容易:从集群内访问服务 139

3.5.1 Kubernetes Service详解 141

3.5.2 Service的三个port 145

3.5.3 你的服务适合哪种发布形式 146

3.5.4 Kubernetes Service发现 150

3.5.5 特殊的无头Service 151

3.5.6 怎么访问本地服务 153

3.6 找到你并不容易:从集群外访问服务 154

3.6.1 Kubernetes Ingress 155

3.6.2 小结 157

3.7 你的名字:通过域名访问服务 158

3.7.1 DNS服务基本框架 158

3.7.2 域名解析基本原理 159

3.7.3 DNS使用 161

3.7.4 调试DNS 166

3.8 Kubernetes网络策略:为你的应用保驾护航 167

3.8.1 网络策略应用举例 168

3.8.2 小结 172

3.9 前方高能:Kubernetes网络故障定位指南 173

3.9.1 IP转发和桥接 173

3.9.2 Pod CIDR冲突 175

3.9.3 hairpin 176

3.9.4 查看Pod IP地址 176

3.9.5 故障排查工具 178

3.9.6 为什么不推荐使用SNAT 180


第 4 章 刨根问底:Kubernetes网络实现机制 183

4.1 岂止iptables:Kubernetes Service官方实现细节探秘 183

4.1.1 userspace模式 184

4.1.2 iptables模式 186

4.1.3 IPVS模式 191

4.1.4 iptables VS. IPVS 198

4.1.5 conntrack 199

4.1.6 小结 200

4.2 Kubernetes极客们的日常:DIY一个Ingress Controller 201

4.2.1 Ingress Controller的通用框架 202

4.2.2 Nginx Ingress Controller详解 202

4.2.3 小结 209

4.3 沧海桑田:Kubernetes DNS架构演进之路 209

4.3.1 Kube-dns的工作原理 209

4.3.2 上位的CoreDNS 212

4.3.3 Kube-dns VS. CoreDNS 217

4.3.4 小结 220

4.4 你的安全我负责:使用Calico提供Kubernetes网络策略 220

4.4.1 部署一个带Calico的Kubernetes集群 221

4.4.2 测试Calico网络策略 225


第5章 百花齐放:Kubernetes网络插件生态 228

5.1 从入门到放弃:Docker原生网络的不足 228

5.2 CNI标准的胜出:从此江湖没有CNM 229

5.2.1 CNI与CNM的转换 230

5.2.2 CNI的工作原理 231

5.2.3 为什么Kubernetes不使用Libnetwork 235

5.3 Kubernetes网络插件鼻祖flannel 238

5.3.1 flannel简介 239

5.3.2 flannel安装配置 241

5.3.3 flannel backend详解 244

5.3.4 flannel与etcd 256

5.3.5 小结 257

5.4 全能大三层网络插件:Calico 257

5.4.1 Calico简介 258

5.4.2 Calico的隧道模式 263

5.4.3 安装Calico 263

5.4.4 Calico报文路径 264

5.4.5 Calico使用指南 267

5.4.6 为什么Calico网络选择BGP 272

5.4.7 小结 274

5.5 Weave:支持数据加密的网络插件 276

5.5.1 Weave简介 276

5.5.2 Weave实现原理 277

5.5.3 Weave安装 278

5.5.4 Weave网络通信模型 280

5.5.5 Weave的应用示例 282

5.5.6 小结 288

5.6 Cilium:为微服务网络连接安全而生 288

5.6.1 为什么使用Cilium 289

5.6.2 以API为中心的微服务安全 294

5.6.3 BPF优化的数据平面性能 295

5.6.4 试用Cilium:网络策略 297

5.6.5 小结 299

5.7 Kubernetes多网络的先行者:CNI-Genie 299

5.7.1 为什么需要CNI-Genie 300

5.7.2 CNI-Genie功能速递 302

5.7.3 容器多IP 303


第6章 Kubernetes网络下半场:Istio 305

6.1 微服务架构的大地震:sidecar模式 305

6.1.1 你真的需要 Service Mesh吗 306

6.1.2 sidecar模式 307

6.1.3 Service Mesh与sidecar 307

6.1.4 Kubernetes Service VS. Service Mesh 309

6.1.5 Service Mesh典型实现之Linkerd 310

6.2 Istio:引领新一代微服务架构潮流 312

6.2.1 Istio简介 312

6.2.2 Istio安装 313

6.2.3 Istio路由规则的实现 317

6.3 一切尽在不言中:Istio sidecar透明注入 319

6.3.1 Init容器 319

6.3.2 sideca注入示例 319

6.3.3 手工注入sidecar 326

6.3.4 自动注入sidecar 327

6.3.5 从应用容器到sidecar代理的通信 329

6.4 不再为iptables脚本所困:Istio CNI插件 330

6.5 除了微服务,Istio还能做更多 331


标签
网络,k8s
产品特色