这是一本介绍“云原生”与“服务网格”技术的书籍。你或许对这两个词语感到陌生,或者耳熟却不明其意,其实,这两个术语分别与“云计算”与“微服务”的概念有着非常紧密的联系。
依据CNCF基金会(Cloud-Native Computing Foundation)的定义,云原生是对在现代的动态环境下(比如云计算的三大场景:公有云、私有云及混合云)可用来构建并运行可扩展应用的技术的总称;服务网格则是云原生技术的典型代表之一,其他技术还包括容器、微服务、不可变基础设施、声明式API等。
从技术发展的角度来看,我们可以把云原生理解为云计算所关注的重心从“资源”逐渐转向“应用”的必然结果。以“资源”为中心的上一代云计算技术关注物理设备如何虚拟化、池化、多租化,典型代表是计算、网络、存储三大基础设施的云化,以及相关硬件、操作系统、管控面等技术;而以“应用”为中心的云原生技术则关注应用如何更好地适应云环境,相对于传统应用通过迁移改造“上云”而言,云原生希望通过一系列的技术支撑,使用户能够在云环境下快速开发和交付云原生应用。
作为云原生技术栈的一部分,服务网格则指由云原生应用的服务化组件构成的一种网格。换句话说,我们可以将服务网格理解为一种应用网络,即为在应用内部或应用之间由服务访问、调用、负载均衡等服务连接关系构成的一种网络。你可能会注意到,这里并没有使用“微服务”这个术语。微服务更多地从设计、开发的视角来描述应用的一种架构或开发模式,而服务网格事实上更为关注运行时视角,因此,采用“服务”这个用于描述应用内外部调用关系的术语更为合适。服务网格与微服务在云原生技术栈中是相辅相成的两部分,前者更关注应用的交付与运行时,后者更关注应用的设计与开发。
本书的主角Istio,作为服务网格技术的事实标准,是一个比较年轻的开源项目。它在2017年5月由Google与IBM联合发布之后,经过一年多的快速发展,于2018年7月发布了1.0版本,并于2019年3月发布1.1这个大更新版本,该版本算是第一个生产可用的GA 版本(虽然官方宣称 1.0 版本“Production-Ready”,但从实践评估来看,1.1 作为 GA版本更合适一些)。
Istio体现了云原生领域核心项目Kubernetes的创建者Google对服务网格技术的思考,还包含了云计算先行者 IBM 对服务网格最早的实践经验,因此一经发布就得到云原生领域的广泛响应,它是继 Kubernetes之后云原生领域非常火爆的项目之一。截至 2019 年年初,国内外已经有超过百家公司的公开实践案例。
本书作者所在的华为公司作为云原生领域的早期实践者与社区领导者之一,在 Istio项目发展初期就参与了Istio社区,积极实践Istio并推动Istio项目的发展。目前,华为公司内部的多个产品线已经使用了Istio,部分实践已经进入生产环境,Istio的商业化产品也已经包含在华为公有云、私有云、混合云解决方案中,并面向华为云客户群进行推广。华为作为 Istio社区的当前领导者之一,会继续致力于 Istio项目及服务网格技术的推广与演进。
本书写作目的
本书作为华为云原生技术丛书的一员,面向云计算领域的从业者及感兴趣的技术人员,普及与推广 Istio 服务网格技术。本书作者来自华为云应用服务网格产品研发团队及华为云原生开源社区团队。本书结合作者在华为云及 Istio 社区的设计与开发实践,以及与服务网格强相关的Kubernetes容器、微服务和云原生领域的丰富经验,对服务网格技术、Istio开源项目的原理、实践,架构和源码进行了深入剖析,由浅入深地讲解Istio的功能、用法、设计与实现,帮助读者全面、立体地了解云原生服务网格 Istio 的每个技术细节。对于刚入门的读者,本书提供了从零开始的 Istio 上手实战指导;对于已经在产品中使用Istio的读者,本书也提供了丰富的案例与经验总结。
本书结构
本书分为原理篇、实践篇、架构篇和源码篇,总计24章,由浅入深地将Istio项目庖丁解牛并呈现给读者。
对于有不同需求的读者,我们建议这样使用本书。
◎ 对云原生技术感兴趣的读者,可阅读并理解原理篇。本篇介绍了服务网格技术与Istio 项目的技术背景、设计理念与功能原理,能够帮助读者了解服务网格这一云原生领域的标志性技术,掌握Istio流量治理、策略与遥测和安全功能的使用方法。
◎ Istio 一线实践者或动手能力较强的技术人员,通过实践篇可以从零开始搭建 Istio运行环境并完成一个真实应用的开发、交付、上线监控与治理的完整过程,能够熟悉Istio的功能并加深对Istio原理的理解。
◎ 关注Istio架构设计或者正在评估是否将Istio引入当前技术栈的技术人员,架构篇能够帮你剖析 Istio项目的三大核心子项目 Pilot、Mixer、Citadel的详细架构,熟悉Envoy、Galley、Pilot-agent等相关项目,并深入挖掘Istio代码背后的设计与实现思想。
◎ 对Istio源码感兴趣且希望更深入地了解Istio实现细节的读者,可以通过源码篇进入Istio源码世界。源码篇对Istio各个项目的代码结构、文件组织、核心流程、主要数据结构及各主要代码片段等关键内容都进行了详细介绍。读者只需具备一定的 Go 语言基础,便可快速掌握 Istio 各部分的实现原理,并根据自己的兴趣深入了解某一关键机制的完整实现,以期成为Istio高手,甚至作为贡献者参与到Istio项目开发中来。
本书篇章组织概述如下。
◎ 原理篇:介绍Istio概念、核心功能、原理和使用方式,为后续的实践提供理论基础。其中,第 1~2 章分别介绍 Istio 的背景知识、基本工作机制、主要组件及概念模型等;第 2~7 章分别介绍 Istio 的五大块功能集,即非侵入的流量治理、可扩展的策略和遥测、可插拔的服务安全、透明的Sidecar机制及多集群服务治理。
◎ 实践篇:通过实际操作介绍如何通过一个典型应用进行Istio实践。其中,第8章讲解环境准备,完成Kubernetes与Istio平台的基础设施准备工作;第9~13章分别介绍如何实际操作一个天气预报应用在Istio平台上实现流量监控、灰度发布、流量治理、服务安全、多集群管理等功能。
◎ 架构篇:从架构角度剖析Istio多个主要组件的设计原理、关键内部流程及数据结构等内容,为高级用户提供架构与设计层面的参考。其中,第14~19章分别介绍了Pilot、Mixer、Citadel、Envoy、Pilot-agent与Galley等6个Istio核心组件。
◎ 源码篇:本篇包括第20~24章,分别介绍Istio整体的代码组织情况,以及Pilot、Mixer、Citadel、Envoy与Galley的代码结构与关键代码片段。
源代码与官方参考
Istio是一个开源项目,本书也开源了实践篇示例应用的源代码,读者可通过如下链接获取本书源码及相关内容。
◎ Istio项目官网:https://istio.io/。
◎ Istio源代码:https://github.com/istio。
◎ 本书示例应用源代码:https://github.com/cloudnativebooks/cloud-native-istio。
勘误和支持
若您在阅读本书的过程中有任何问题或者建议,则可以通过本书源码仓库提交 Issue或者 PR,也可以关注华为云原生官方微信公众号并加入微信群与我们交流。我们十分感谢并重视您的反馈,会对您提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。
致谢
在本书的写作及成书过程中,本书作者团队得到了公司内外许多领导、同事及朋友的指导、鼓励和帮助。感谢华为云郑叶来、张宇昕、廖振钦、方璞等业务主管对华为云原生技术丛书及本书写作的大力支持;感谢华为云容器团队王泽锋、罗荣敏、毛杰、张琦等对本书的审阅与建议;感谢华为云应用服务网格团队陈冬冬、巩培尧、王少东、李汉辰、秦玉函、张云等为本书编写示例程序及分享实践经验;感谢电子工业出版社博文视点张国霞编辑一丝不苟地制订出版计划及组织工作;感谢华为云邢紫月对本书的出版建议与指导;最后,也感谢CNCF基金会及Istio、Kubernetes社区众多开源爱好者辛勤、无私的工作,使得我们在这个技术爆发的时代能够充分领略到技术的魅力并能够亲身参与到这份有激情、有挑战的事业中来。谢谢大家!
刘赫伟 博士
华为云原生技术丛书 总编
华为云容器服务域 技术总监
张超盟
华为云应用服务网格 首席架构师