Kubernetes网络*威指南,云原生时代的底层网络模型、实现、企业落地选型必备!
本书是容器与Kubernetes网络的基础和进阶书籍,旨在让更多人了解和学习云原生时代的底层网络模型与实现机制,指导企业在落地云原生时的网络方案选型。
全书共6章,第1章 Linux网络虚拟化将支撑容器网络的内核技术娓娓道来,第2章简单介绍了Docker网络模型,第3章介绍Kubernetes网络原理与实践,第4章剖析了Kubernetes网络实现机制,第5章详解了业界主流的Kubernetes网络插件生态,第6章重点解析了Istio网络流量管控的背后机制。
第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
——华为云容器服务总经理,方璞
在Kubernetes技术体系飞速发展的过程中,其在弹性、可用性及可维护性方面日趋成熟,同时在敏捷性、提升研发效率和降低系统复杂度方面也表现卓越。敏捷开发、基础设施服务化、DevOps、ContainerOps深度融合,这就让普通开发者也可以快速地进入软件的构建中,可以让企业更多地将精力聚焦在应用层逻辑开发中。杜军是云原生技术的拥护者,Kubernetes社区核心成员,Kubernetes核心组件、网络服务的主要代码贡献者和维护者之一,也是一位优秀的技术分享者。本书对Kubernetes生态中颇为复杂的网络体系,从底层基础原理、概念、理论、关键技术点,到容器网络标准、模型、选型及实践,进行了深入浅出的论述,值得各位技术从业者仔细阅读和思考。
——神州优车技术总监,黄强元
本书内容贯穿了整个虚拟网络演化历程,不仅探讨了容器网络和Kubernetes网络模型,更从底层原理到生产实践、再到源码解析和故障排查,层层递进,全方位、全视角地展现了整个云原生网络知识体系。容器、etcd、Kubernetes及istio是云原生技术生态的基石,本书作者杜军任Kubernetes和Istio项目的maintainer,为这些技术的发展做出了突出贡献。他也是多部畅销云原生技术书籍的作者,是业界认可的云原生技术专家。相信本书能给广大读者带来全新的知识体验,提供一场云原生技术全貌的饕餮盛宴。
——北京虚云科技总经理,易宝支付前资深架构师,李大伟
云原生容器技术经过多年的进化和积累,已经被业界广泛认可,基于容器的技术和方案百花齐放,而网络也成为容器技术里难以攻克的一个领域。杜军对容器和虚拟化网络有深入的探索和实战经验,本书从虚拟化网络模型、协议、服务网格、DNS、网络策略、网络插件生态等方面进行了系统且深入的讲解,是虚拟化网络技术领域技术爱好者的一把利器。
——西雅图华为云计算研究所资深架构师,谢海滨
自从Kubernetes被公认为构建平台的平台,无论是上游开源社区还是终端用户都将越来越多的注意力集中到编排层之上的技术创新。从Istio到Knative,再到OpenKruise,令人兴奋的技术创新层出不穷。而本书主题却有些“反流行”,用三百多页篇幅,从network namespace一直讲到Docker、Kubernetes网络模型和实现,从底层基础原理讲起,帮助开源技术的爱好者和使用者厘清当下主流容器网络标准及技术背后的机理,为技术选型和落地提供切实有用的帮助和指导,是对业界当前重上层创新的趋势的一个很好的补充。
——浙江大学计算机系博士 谐云首席科学家,丁轶群