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

Kubernetes 网络权威指南:基础、原理与实践百度网盘pdf下载

作者:
简介:Kubernetes 网络权威指南:基础、原理与实践
出版社:电子工业出版社
出版时间:2019-10-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐
  Kubernetes 网络权威指南,云原生时代的底层网络模型、实现、企业落地选型必备
内容简介
  本书是容器与Kubernetes网络的基础和进阶书籍,旨在让更多人了解和学习云原生时代的底层网络模型与实现机制,指导企业在落地云原生时的网络方案选型。全书包括:容器网络虚拟化基础、Docker容器网络、Kubernetes网络和Istio网络4部分,共6章。第1章容器网络虚拟化基础将支撑容器网络的内核技术娓娓道来。第2章简单介绍了Docker原生的容器网络能力。Kubernetes网络分为3章,第3章介绍Kubernetes网络的基础概念和使用,第4章为读者剖析了Kubernetes网络的底层实现原理,第5章详解了业界主流的Kubernetes网络插件。Istio网络总共1章,重点解析Istio网络流量管控的背后机制。
作者简介
  杜军,浙大SEL实验室硕士,曾任华为云架构师、咨询组专家,国内最早的容器技术布道师。开源社区自身贡献者与维护着,CNCF TOC Contributor,Kubernetes和Istio双科maintainer,对云计算技术演进与内在驱动力有深刻见解,主要研究方向为容器、微服务、DevOps、边缘计算。
目录
作者简介
内容简介
自序
第1章 夯实基础:Linux网络虚拟化
1.1 网络虚拟化基石:network namespace
1.1.1 初识network namespace
1.1.2 配置network namespace
1.1.3 network namespace API的使用
1.1.4 小结
1.2 千呼万唤始出来:veth pair
1.2.1 veth pair内核实现
1.2.2 容器与host veth pair的关系
1.2.3 小结
1.3 连接你我他:Linux bridge
1.3.1 Linux bridge初体验
1.3.2 把IP让给Linux bridge
1.3.3 将物理网卡添加到Linux bridge
1.3.4 Linux bridge在网络虚拟化中的应用
1.3.5 网络接口的混杂模式
1.4 给用户态一个机会:tun/tap设备
1.4.1 tun/tap设备的工作原理
1.4.2 利用tun设备部署一个VPN
1.4.3 tun设备编程
1.5 iptables
1.5.1 祖师爷netfilter
1.5.2 iptables的三板斧:table、chain和rule
1.5.3 iptables的常规武器
1.6 初识Linux隧道:ipip
1.6.1 测试ipip隧道
1.6.2 ipip隧道测试结果复盘
1.6.3 小结
1.7 Linux隧道网络的代表:VXLAN
1.7.1 为什么需要VXLAN
1.7.2 VXLAN协议原理简介
1.7.3 VXLAN组网必要信息
1.7.4 VXLAN基本配置命令
1.7.5 VXLAN网络实践
1.7.6 分布式控制中心
1.7.7 自维护VTEP组
1.7.8 小结
1.8 物理网卡的分身术:Macvlan
1.8.1 Macvlan五大工作模式解析
1.8.2 测试使用Macvlan设备
1.8.3 Macvlan的跨机通信
1.8.4 Macvlan与overlay对比
1.8.5 小结
1.9 Macvlan的救护员:IPvlan
1.9.1 IPvlan简介
1.9.2 测试IPvlan
1.9.3 Docker IPvlan网络
1.9.4 小结
第2章 饮水思源:Docker网络模型简介
2.1 主角登场:Linux容器
2.1.1 容器是什么
2.1.2 容器与虚拟机对比
2.1.3 小结
2.2 打开万花筒:Docker的四大网络模式
2.2.1 bridge模式
2.2.2 host模式
2.2.3 container模式
2.2.4 none模式
2.3 最常用的Docker网络技巧
2.3.1 查看容器IP
2.3.2 端口映射
2.3.3 访问外网
2.3.4 DNS和主机名
2.3.5 自定义网络
2.3.6 发布服务
2.3.7 docker link:两两互联
2.4 容器网络的第一个标准:CNM
2.4.1 CNM标准
2.4.2 体验CNM接口
2.4.3 Libnetwork
2.4.4 Libnetwork扩展
2.4.5 小结
2.5 天生不易:容器组网的挑战
2.5.1 容器网络挑战综述
2.5.2 Docker的解决方案
2.5.3 第三方容器网络插件
2.5.4 小结
2.6 如何做好技术选型:容器组网方案沙场点兵
2.6.1 隧道方案
2.6.2 路由方案
2.6.3 容器网络组网类型
2.6.4 关于容器网络标准接口
2.6.5 小结
第3章 标准的胜利:Kubernetes网络原理与实践
3.1 容器基础设施的代言人:Kubernetes
3.1.1 Kubernetes简介
3.1.2 Kubernetes能做什么
3.1.3 如何用Kubernetes
3.1.4 Docker在Kubernetes中的角色
3.2 终于等到你:Kubernetes网络
3.2.1 Kubernetes网络基础
3.2.2 Kubernetes网络架构综述
3.2.3 Kubernetes主机内组网模型
3.2.4 Kubernetes跨节点组网模型
3.2.5 Pod的hosts文件
3.2.6 Pod的hostname
3.3 Pod的核心:pause容器
3.4 打通CNI与Kubernetes:Kubernetes网络驱动
3.4.1 即将完成历史使命:Kubenet
3.4.2 网络生态第一步:CNI
3.5 找到你并不容易:从集群内访问服务
3.5.1 Kubernetes Service详解
3.5.2 Service的三个port
3.5.3 你的服务适合哪种发布形式
3.5.4 Kubernetes Service发现
3.5.5 特殊的无头Service
3.5.6 怎么访问本地服务
3.6 找到你并不容易:从集群外访问服务
3.6.1 Kubernetes Ingress
3.6.2 小结
3.7 你的名字:通过域名访问服务
3.7.1 DNS服务基本框架
3.7.2 域名解析基本原理
3.7.3 DNS使用
3.7.4 调试DNS
3.8 Kubernetes网络策略:为你的应用保驾护航
3.8.1 网络策略应用举例
3.8.2 小结
3.9 前方高能:Kubernetes网络故障定位指南
3.9.1 IP转发和桥接
3.9.2 Pod CIDR冲突
3.9.3 hairpin
3.9.4 查看Pod IP地址
3.9.5 故障排查工具
3.9.6 为什么不推荐使用SNAT
第4章 刨根问底:Kubernetes网络实现机制
4.1 岂止iptables:Kubernetes Service官方实现细节探秘
4.1.1 userspace模式
4.1.2 iptables模式
4.1.3 IPVS模式
4.1.4 iptables VS.IPVS
4.1.5 conntrack
4.1.6 小结
4.2 Kubernetes极客们的日常:DIY一个Ingress Controller
4.2.1 Ingress Controller的通用框架
4.2.2 Nginx Ingress Controller详解
4.2.3 小结
4.3 沧海桑田:Kubernetes DNS架构演进之路
4.3.1 Kube-dns的工作原理
4.3.2 上位的CoreDNS
4.3.3 Kube-dns VS.CoreDNS
4.3.4 小结
4.4 你的安全我负责:使用Calico提供Kubernetes网络策略
4.4.1 部署一个带Calico的Kubernetes集群
4.4.2 测试Calico网络策略
第5章 百花齐放:Kubernetes网络插件生态
5.1 从入门到放弃:Docker原生网络的不足
5.2 CNI标准的胜出:从此江湖没有CNM
5.2.1 CNI与CNM的转换
5.2.2 CNI的工作原理
5.2.3 为什么Kubernetes不使用Libnetwork
5.3 Kubernetes网络插件鼻祖flannel
5.3.1 flannel简介
5.3.2 flannel安装配置
5.3.3 flannel backend详解
5.3.4 flannel与etcd
5.3.5 小结
5.4 全能大三层网络插件:Calico
5.4.1 Calico简介
5.4.2 Calico的隧道模式
5.4.3 安装Calico
5.4.4 Calico报文路径
5.4.5 Calico使用指南
5.4.6 为什么Calico网络选择BGP
5.4.7 小结
5.5 Weave:支持数据加密的网络插件
5.5.1 Weave简介
5.5.2 Weave实现原理
5.5.3 Weave安装
5.5.4 Weave网络通信模型
5.5.5 Weave的应用示例
5.5.6 小结
5.6 Cilium:为微服务网络连接安全而生
5.6.1 为什么使用Cilium
5.6.2 以API为中心的微服务安全
5.6.3 BPF优化的数据平面性能
5.6.4 试用Cilium:网络策略
5.6.5 小结
5.7 Kubernetes多网络的先行者:CNI-Genie
5.7.1 为什么需要CNI-Genie
5.7.2 CNI-Genie功能速递
5.7.3 容器多IP
第6章 Kubernetes网络下半场:Istio
6.1 微服务架构的大地震:sidecar模式
6.1.1 你真的需要Service Mesh吗
6.1.2 sidecar模式
6.1.3 Service Mesh与sidecar
6.1.4 Kubernetes Service VS.Service Mesh
6.1.5 Service Mesh典型实现之Linkerd
6.2 Istio:引领新一代微服务架构潮流
6.2.1 Istio简介
6.2.2 Istio安装
6.2.3 Istio路由规则的实现
6.3 一切尽在不言中:Istio sidecar透明注入
6.3.1 Init容器
6.3.2 sidecar注入示例
6.3.3 手工注入sidecar
6.3.4 自动注入sidecar
6.3.5 从应用容器到sidecar代理的通信
6.4 不再为iptables脚本所困:Istio CNI插件
6.5 除了微服务,Istio还能做更多
相关内容
媒体评论
  网络是Kubernetes技术体系中复杂的一环,也体现了Kubernetes独特的设计理念。本书作者杜军曾是华为云原生团队核心成员,多个Kubernetes社区网络特性的贡献者与维护者。本书内容涵盖Kubernetes基础容器网络,4/7层服务发现、路由与注册管理,以及与服务网格的配合等方面内容,是不可多得的Kubernetes网络专著,推荐大家阅读。
  ——华为云容器服务总经理,方璞
  在Kubernetes技术体系飞速发展的过程中,其在弹性、可用性及可维护性方面日趋成熟,同时在敏捷性、提升研发效率和降低系统复杂度方面也表现卓越。敏捷开发、基础设施服务化、DevOps、ContainerOps深度融合,这就让普通开发者也可以快速地进入软件的构建中,可以让企业更多地将精力聚焦在应用层逻辑开发中。杜军是云原生技术的拥护者,Kubernetes社区核心成员,Kubernetes核心组件、网络服务的主要代码贡献者和维护者之一,也是一位优秀的技术分享者。本书对Kubernetes生态中颇为复杂的网络体系,从底层基础原理、概念、理论、关键技术点,到容器网络标准、模型、选型及实践,进行了深入浅出的论述,值得各位技术从业者仔细阅读和思考。
  ——神州优车技术总监,黄强元
  本书内容贯穿了整个虚拟网络演化历程,不仅探讨了容器网络和Kubernetes网络模型,更从底层原理到生产实践、再到源码解析和故障排查,层层递进,全方位、全视角地展现了整个云原生网络知识体系。容器、etcd、Kubernetes及istio是云原生技术生态的基石,本书作者杜军任Kubernetes和Istio项目的maintainer,为这些技术的发展做出了突出贡献。他也是多部畅销云原生技术书籍的作者,是业界认可的云原生技术专家。相信本书能给广大读者带来全新的知识体验,提供一场云原生技术全貌的饕餮盛宴。
  ——北京虚云科技总经理,易宝支付前资深架构师,李大伟
  云原生容器技术经过多年的进化和积累,已经被业界广泛认可,基于容器的技术和方案百花齐放,而网络也成为容器技术里难以攻克的一个领域。杜军对容器和虚拟化网络有深入的探索和实战经验,本书从虚拟化网络模型、协议、服务网格、DNS、网络策略、网络插件生态等方面进行了系统且深入的讲解,是虚拟化网络技术领域技术爱好者的一把利器。
  ——西雅图华为云计算研究所资深架构师,谢海滨
  自从Kubernetes被公认为构建平台的平台,无论是上游开源社区还是终端用户都将越来越多的注意力集中到编排层之上的技术创新。从Istio到Knative,再到OpenKruise,令人兴奋的技术创新层出不穷。而本书主题却有些“反流行”,用三百多页篇幅,从network namespace一直讲到Docker、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月于厦门鼓浪屿
  
精彩书摘
  两个network namespace可以通过veth pair连接,但要做到两个以上network namespace相互连接,veth pair就显得捉襟见肘了。这就轮到本节的主角Linux bridge出场了。
  我们在计算机网络课本上学的网桥正如其字面含义所描述的,有“牵线搭桥”之意,用于连接两个不同的局域网,是网线的延伸。网桥是二层网络设备,两个端口分别有一条独立的交换信道,不共享一条背板总线,可隔离冲突域。网桥比集线器(hub)性能更好,集线器上各端口都是共享同一条背板总线的。后来,网桥被具有更多端口、可隔离冲突域的交换机(switch)所取代。
  顾名思义,Linux bridge就是Linux系统中的网桥,但是Linux bridge的行为更像是一台虚拟的网络交换机,任意的真实物理设备(例如eth0)和虚拟设备(例如,前面讲到的veth pair和后面即将介绍的tap设备)都可以连接到Linux bridge上。需要注意的是,Linux bridge不能跨机连接网络设备。
  Linux bridge与Linux上其他网络设备的区别在于,普通的网络设备只有两端,从一端进来的数据会从另一端出去。例如,物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。Linux bridge则有多个端口,数据可以从任何端口进来,进来之后从哪个口出去取决于目的MAC地址,原理和物理交换机差不多。