
本书是《Istio权威指南》的上册,重点讲解Istio的原理和实践,分为原理篇和实践篇。 原理篇介绍Istio的相关概念、主要架构和工作原理。其中,第1章通过介绍Istio与微服务、服务网格、Kubernetes这几个云原生关键技术的联系,帮助读者立体地理解Istio的概念。第2章概述Istio的工作机制、服务模型、总体架构和主要组件。第3、4、5章通过较大篇幅介绍Istio提供的非侵入性流量治理、可观测性和策略控制、服务安全这三大核心特性,包括其各自解决的问题、实现原理、配置模型、配置定义和典型应用,可以满足大多数读者在工作中的具体需求。第6章重点介绍自动注入和流量拦截的透明代理原理;第7章介绍Istio正在快速发展的多基础设施流量管理,包括对各种多集群模型、容器、虚拟机的统一管理等。 实践篇通过贯穿全书的一个天气预报应用来实践Istio的非侵入能力。其中,第8章介绍如何从零开始搭建环境。第9章通过Istio的非侵入方式生成指标、拓扑、调用链和访问日志等;第10章介绍多种灰度分流方式,带读者了解Istio灵活的分流策略;第11章描述负载均衡、故障转移、故障注入、超时、重试、重定向、重写、熔断、异常点检查、限流等流量策略的实践;第12章讲解两种认证策略及其与授权的配合,以及Istio倡导的零信任网络的关键技术;第13章讲解入口网关和出口网关的流量管理,展示服务网格对东西向流量和南北向流量的管理;第14章则是对多集群和虚拟机环境下流量治理的实践。 本书适合入门级读者从零开始了解Istio的概念、原理和用法,也适合有一定基础的读者深入了解Istio的设计理念。
从2017年开源第1个版本到1.16版本,Istio已经走过了5年多的时间。在这5年里,伴随着云原生技术在各个领域的飞速发展,服务网格的应用也越来越广泛和深入。作为服务网格领域最具影响力的项目,Istio快速发展和成熟,获得越来越多的技术人员关注和应用。我们希望通过《Istio权威指南》系统、深入地讲解Istio,帮助相关技术人员了解和熟悉Istio,满足其日常工作中的需求。《Istio权威指南(上):云原生服务网格Istio原理与实践》是《Istio权威指南》的上册,重点讲解Istio的原理与实践;《Istio权威指南(下):云原生服务网格Istio架构与源码》是《Istio权威指南》的下册,重点讲解Istio的架构与源码。 服务网格是CNCF(Cloud-Native Computing Foundation,云原生计算基金会)定义的云原生技术的典型代表之一,和容器、微服务、不可变基础设施、声明式API等技术一起,帮助用户在动态环境下以弹性和分布式的方式构建并运行可扩展的应用。 从技术发展的角度来看,我们可以把云原生理解为云计算的重心从“资源”逐渐转向“应用”的必然结果。以资源为中心的上一代云计算技术专注于物理设备如何虚拟化、池化、多租化,典型代表是计算、网络、存储三大基础设施的云化,以及相关硬件、操作系统、管控面等技术;以应用为中心的云原生技术则专注于应用如何更好地适应云环境。相对于传统应用通过迁移改造“上云”,云原生的目标是通过一系列的技术支撑,使用户在云环境下快速开发和交付云原生应用。以Istio为代表的服务网格在云原生技术栈中,向上连接用户应用,向下连接多种计算资源,发挥着关键作用。 向下,服务网格和提供资源、运行平台的基础设施叠加在一起,构建了一个懂应用、对应用更友好的基础设施,而不再只是一堆机器和资源。它们帮助下层基础设施感知上层应用,从而对应用进行细粒度的管理,更有效地发挥资源的效能。服务网格向应用提供的这层基础设施也经常被称为“应用网络”,相当于TCP/IP的传统网络。用户开发的应用程序像使用传统的网络协议栈一样使用服务网格提供的应用层协议栈。就像TCP/IP负责将字节码可靠地在网络节点间传递,服务网格负责将请求可靠地在服务间传递,并通过解析请求的内容,对服务间的访问进行管理。 向上,服务网格以非侵入的方式提供面向应用的韧性、安全、动态路由、调用链、拓扑等应用管理和运维能力。这些运维能力在传统应用开发模式下,需要在开发阶段由开发人员开发和维护。而在云原生开发模式下,基于服务网格的非侵入性特点,这些能力被从业务中解耦,移到运维阶段。对于其中丰富的能力,无须开发人员开发,由运维人员配置即可。这些能力包括:灵活的灰度分流;超时、重试、限流、熔断等;动态地对服务访问进行重写、重定向、头域修改、故障注入;自动收集应用访问的指标、访问日志、调用链等可观测性数据,进行故障定界、定位和洞察;自动提供完整的面向应用的零信任安全,比如自动进行服务身份认证、通道加密和细粒度授权管理。使用这些能力时,无须改动用户的代码,也无须使用基于特定语言的开发框架。 近年来,服务网格在各个行业中的生产落地越来越多。CNCF在2022年上半年公布的服务网格调查报告显示,服务网格的生产使用率已达到60%,有19%的公司计划在接下来的一年内使用服务网格。当然,服务网格作为云原生的重要技术之一,当前在Gartner评定中仍处于技术发展的早期使用阶段,有很大的发展空间。 CNCF这几年的年度调查显示,Istio一直是生产环境中最受欢迎和使用最多的服务网格。其重要原因是,Istio是功能非常全面、扩展性非常好、与云原生技术结合非常紧密、非常适用于云原生场景的服务网格。像早期Kubernetes在编排领域的设计和定位一样,Istio从2017年第1个版本开始规划项目的应用场景和架构时,就致力于构建一个云原生的基础设施平台,而不是解决某具体问题的简单工具。 作为基础设施形态的平台,Istio向应用开发人员和应用运维人员提供了非常大的透明度。Istio自动在业务负载中注入服务网格数据面代理,自动拦截业务的访问流量,可方便地在多种环境下部署和应用,使得业务在使用Istio时无须做任何修改,甚至感知不到这个基础设施的存在。在实现上,Istio提供了统一的配置模型和执行机制来保证策略的一致性,控制面和数据面在架构上都提供了高度的可扩展性,支持用户基于实际需要进行扩展。 作为云原生的关键技术,Istio与其他云原生项目也无缝配合。Istio和Kubernetes一起构建了一个云原生应用的运行和治理平台。Istio基于Kubernetes实现代理的自动注入,利用Kubernetes的Service进行服务网格的服务发现,基于Kubernetes的负载身份构建安全标识,从而在Kubernetes上提供云原生的服务弹性、韧性、安全性、应用可观测性等能力。同时,Istio和Prometheus、Jaeger、Kiali、OpenTelementry、OPA等项目无缝集成,一起构造完整的云原生应用流量、安全和可观测性管理方案。 2022年9月28日,Istio项目被正式批准加入CNCF。这必将推动Istio和Envoy项目的紧密协作,一起构建云原生应用流量管理的技术栈。正如Kubernetes已成为容器编排领域的行业标准,加入CNCF也将进一步促进Istio成为应用流量治理领域的事实标准。Istio和Kubernetes的紧密配合,也将有助于拉通规划和开发更有价值的功能。根据Istio官方的统计,Istio项目已有8800名个人贡献者,超过260个版本,并有来自15家公司的85名维护者,可见Istio在技术圈和产业圈都获得了极大的关注和认可。 本书作者所在的华为云作为云原生领域的早期实践者与社区领导者之一,在Istio项目发展初期就参与了社区工作,积极实践并推动项目的发展,贡献了大量大颗粒特性。本书作者之一徐中虎在2020年Istio社区进行的第一次治理委员会选举中作为亚洲唯一代表入选,参与Istio技术策略的制定和社区决策。华为云在2018年率先发布全球首个Istio商用服务——应用服务网格ASM(Application Service Mesh),一个拥有高性能、高可靠性和易用性的全托管服务网格。作为分布式云场景下面向应用的网络基础,ASM对多云、混合云环境下的容器、虚拟机、Serverless、传统微服务、Proxyless服务提供了统一的应用健康、韧性、弹性、安全性等的全方位管理。 本书作者作为Istio早期的实践者,除了持续开发满足客户需求的服务网格产品并参与社区贡献,也积极促进服务网格等云原生技术在国内的推广,包括于2019年推出《云原生服务网格Istio:原理、实践、架构与源码解析》一书,并通过KubeCon、IstioCon、ServiceMeshCon等云原生和服务网格相关的技术峰会,推广服务网格和Istio相关的架构、生产实践和配套解决方案等。 写作目的 《Istio权威指南》作为“华为云原生技术丛书”的一员,面向云计算领域的从业者及感兴趣的技术人员,普及与推广Istio。本书作者来自华为云应用服务网格产品研发团队,基于作者在华为云及Istio社区的设计与开发实践,以及与服务网格强相关的Kubernetes容器、微服务和云原生领域的丰富经验,对Istio的原理、实践、架构和源码进行了系统化的深入剖析,由浅入深地讲解了Istio的概念、原理、架构、模型、用法、设计理念、典型实践和源码细节。 本书是《Istio权威指南》上册,适合入门级读者从零开始了解Istio的概念、原理和用法,也适合有一定基础的读者深入了解Istio的设计理念。 《Istio权威指南》的组织架构 《Istio权威指南》分为原理篇、实践篇、架构篇和源码篇,总计26章,其组织架构如下。 原理篇:介绍Istio的相关概念、主要架构和工作原理。其中,第1章通过介绍Istio与微服务、服务网格、Kubernetes这几个云原生关键技术的联系,帮助读者立体地理解Istio的概念。第2章概述Istio的工作机制、服务模型、总体架构和主要组件。第3、4、5章通过较大篇幅介绍Istio提供的非侵入性流量治理、可观测性和策略控制、服务安全这三大核心特性,包括其各自解决的问题、实现原理、配置模型、配置定义和典型应用,可以满足大多数读者在工作中的具体需求。第6章重点介绍自动注入和流量拦截的透明代理原理;第7章介绍Istio正在快速发展的多基础设施流量管理,包括对各种多集群模型、容器、虚拟机的统一管理等。 实践篇:通过贯穿全书的一个天气预报应用来实践Istio的非侵入能力。其中,第8章介绍如何从零开始搭建环境。第9章通过Istio的非侵入方式生成指标、拓扑、调用链和访问日志等;第10章介绍多种灰度分流方式,带读者了解Istio灵活的分流策略;第11章描述负载均衡、故障转移、故障注入、超时、重试、重定向、重写、熔断、异常点检查、限流等流量策略的实践;第12章讲解两种认证策略及其与授权的配合,以及Istio倡导的零信任网络的关键技术;第13章讲解入口网关和出口网关的流量管理,展示服务网格对东西向流量和南北向流量的管理;第14章则是对多集群和虚拟机环境下流量治理的实践。 架构篇:从架构的视角分别介绍Istio各组件的设计思想、数据模型和核心工作流程。在Istio 1.16中,Istiod以原有的Pilot为基础框架构建了包含Pilot、Citadel、Galley等组件的统一控制面,第15、16、17章会分别介绍以上三个组件各自的架构、模型和流程机制。第18、19、20章依次讲解服务网格数据面上Pilot-agent、Envoy和Istio-proxy的架构和流程,包括三者的结合关系,配合Istio控制面组件完成流量管理能力,特别是Envoy的架构、模型和关键流程。 源码篇:包括第21~26章,和架构篇的6章对应,分别介绍Istio管理面组件Pilot、Citadel、Galley和数据面Pilot-agent、Envoy和Istio-proxy的主要代码结构、代码流程和关键代码片段。本篇配合架构篇中每个组件的架构和机制,对Istio重要组件的实现进行了更详细的讲解和剖析,为读者深入研读Istio相关代码,以及在生产中进行相应代码的调试和修改提供指导。 学习建议 对于有不同需求的读者,我们建议这样使用本书。 对云原生技术感兴趣的所有读者,都可通过阅读《Istio权威指南(上):云原生服务网格Istio原理与实践》,了解服务网格和Istio的概念、技术背景、设计理念与功能原理,并全面掌握Istio流量治理、可观测性和安全等功能的使用方式。通过实践篇可以从零开始搭建Istio运行环境并完成多种场景的实践,能够熟悉Istio的功能、应用场景,以及需要解决的问题,并加深对Istio原理的理解。对于大多数架构师、开发者和其他从业人员,通过对原理篇和实践篇的学习,可以系统、全面地了解Istio的方方面面,满足日常工作需要。 对Istio架构和实现细节感兴趣的读者,可以阅读《Istio权威指南(下):云原生服务网格Istio架构与源码》,了解Istio的整体架构、各个组件的详细架构、设计理念和关键的机制流程。若对Istio源码感兴趣,并且在实际工作中需要调试或基于源码进行二次开发,那么还可以通过阅读源码篇,了解Istio各个项目的代码结构、详细流程、主要数据结构及关键代码片段。在学习源码的基础上,读者可以根据自己的兴趣或工作需求,深入了解某一关键机制的完整实现,并作为贡献者参与到Istio或Envoy项目的开发中来。 勘误和支持 若您在阅读本书的过程中有任何问题或者建议,则可以通过本书源码仓库提交Issue或者PR(源码仓库地址参见本书封底“读者服务”),也可以关注华为云原生官方微信公众号并加入微信群与我们交流。我们十分感谢并重视您的反馈,会对您提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。 本书还免费提供了Istio培训视频及Istio常见问题解答等资源,请通过本书封底“读者服务”获取这些资源。 致谢 在本书的写作及成书过程中,本书作者团队得到了公司内外领导、同事及朋友的指导、鼓励和帮助。感谢华为云张平安、张宇昕、李帮清等业务主管对华为云原生技术丛书及本书写作的大力支持;感谢华为云容器团队王泽锋、吕赟等对本书的审阅与建议;感谢电子工业出版社博文视点张国霞编辑一丝不苟地制订出版计划及组织工作;感谢四位作者的家人,特别是豆豆、小核桃、毛毛小朋友对本书写作的支持;也感谢CNCF基金会及Istio、Kubernetes、Envoy社区众多开源爱好者辛勤、无私的工作。谢谢大家! 华为云容器服务域总监 黄毽 华为云应用服务网格首席架构师 张超盟
目 录 原 理 篇 第1章 你好,Istio 2 1.1 Istio是什么 2 1.2 Istio能做什么 3 1.3 Istio与服务治理 5 1.3.1 关于微服务 5 1.3.2 服务治理的形态 7 1.3.3 Istio不只解决微服务问题 9 1.4 Istio与服务网格 11 1.4.1 云原生选择服务网格 11 1.4.2 服务网格选择Istio 14 1.5 Istio与Kubernetes 17 1.5.1 Istio,Kubernetes的好帮手 18 1.5.2 Kubernetes,Istio的好基座 20 1.6 本章小结 23 第2章 Istio的架构概述 25 2.1 Istio的架构及原理 25 2.2 Istio的服务模型 28 2.2.1 Istio的服务 29 2.2.2 Istio的服务版本 30 2.2.3 Istio的服务实例 32 2.3 Istio的主要组件 34 2.3.1 控制面的组件 34 2.3.2 数据面的组件 38 2.3.3 其他组件 42 2.4 本章小结 43 第3章 流量治理的原理 44 3.1 概念和原理 44 3.1.1 负载均衡 46 3.1.2 服务熔断 48 3.1.3 故障注入 54 3.1.4 灰度发布 55 3.1.5 故障转移 60 3.1.6 入口流量 63 3.1.7 出口流量 68 3.2 VirtualService(虚拟服务) 71 3.2.1 入门示例 71 3.2.2 配置模型 72 3.2.3 配置定义 73 3.2.4 HTTPRoute(HTTP路由) 75 3.2.5 TLSRoute(TLS路由) 89 3.2.6 TCPRoute(TCP路由) 91 3.2.7 三种协议的路由规则对比 92 3.2.8 VirtualService的典型应用 93 3.3 DestinationRule(目标规则) 101 3.3.1 入门示例 101 3.3.2 配置模型 101 3.3.3 配置定义 103 3.3.4 典型应用 116 3.4 Gateway(服务网关) 121 3.4.1 入门示例 121 3.4.2 配置模型 122 3.4.3 配置定义 123 3.4.4 典型应用 127 3.5 ServiceEntry(服务条目) 139 3.5.1 入门示例 139 3.5.2 配置模型 140 3.5.3 配置定义 140 3.5.4 典型应用 146 3.6 WorkloadEntry(工作负载) 150 3.6.1 入门示例 150 3.6.2 配置模型 150 3.6.3 配置定义 151 3.6.4 典型应用 152 3.7 WorkloadGroup(工作负载组) 154 3.7.1 入门示例 154 3.7.2 配置模型 155 3.7.3 配置定义 156 3.7.4 典型应用 156 3.8 Sidecar(网格代理) 157 3.8.1 入门示例 157 3.8.2 配置模型 158 3.8.3 配置定义 158 3.8.4 典型应用 161 3.9 EnvoyFilter(Envoy过滤器) 163 3.9.1 入门示例 164 3.9.2 配置模型 164 3.9.3 配置定义 165 3.9.4 典型应用 177 3.10 WasmPlugin(Wasm插件) 183 3.10.1 入门示例 183 3.10.2 配置模型 184 3.10.3 配置定义 184 3.10.4 典型应用 185 3.10 本章小结 186 第4章 可观测性和策略控制的原理 188 4.1 概念和原理 188 4.1.1 可观测性的概念 188 4.1.2 访问指标 194 4.1.3 调用链 198 4.1.4 访问日志 201 4.1.5 限流 204 4.2 Istio访问指标采集 207 4.2.1 指标采集的原理 207 4.2.2 指标采集的配置 210 4.3 Istio调用链采集 218 4.3.1 调用链采集的原理 218 4.3.2 调用链采集的配置 220 4.4 Istio访问日志采集 226 4.4.1 访问日志采集的原理 226 4.4.2 访问日志采集的配置 228 4.5 Istio限流 236 4.5.1 限流的原理 236 4.5.2 限流的配置 238 4.6 元数据交换 248 4.6.1 元数据交换的原理 249 4.6.2 元数据交换的配置 250 4.7 本章小结 252 第5章 服务安全的原理 255 5.1 概念和原理 255 5.1.1 对等身份认证 257 5.1.2 服务请求认证 263 5.1.3 服务访问授权 268 5.2 PeerAuthentication(对等身份认证) 273 5.2.1 入门示例 273 5.2.2 配置模型 274 5.2.3 配置定义 274 5.2.4 典型应用 275 5.3 RequestAuthentication(服务请求认证) 278 5.3.1 入门示例 278 5.3.2 配置模型 279 5.3.3 配置定义 279 5.3.4 典型应用 281 5.4 AuthorizationPolicy(服务授权策略) 283 5.4.1 入门示例 283 5.4.2 配置模型 284 5.4.3 配置定义 284 5.4.4 典型应用 289 5.5 本章小结 294 第6章 网格数据面代理Sidecar 295 6.1 Sidecar的透明注入原理 295 6.1.1 Sidecar的注入原理 295 6.1.2 自动注入服务 297 6.1.3 自动注入流程 299 6.2 Sidecar的流量拦截原理 302 6.2.1 iptables的基本原理 303 6.2.2 Sidecar Redirect模式 309 6.2.3 Sidecar Tproxy模式 318 6.2.4 Ingress网关模式 331 6.3 本章小结 335 第7章 异构基础设施 336 7.1 多集群服务治理的原理 336 7.1.1 Istio多集群相关的概念 336 7.1.2 Istio多集群管理 337 7.2 多集群的服务网格模型 338 7.2.1 扁平网络单控制面模型 338 7.2.2 非扁平网络单控制面模型 340 7.2.3 扁平网络多控制面模型 345 7.2.4 非扁平网络多控制面模型 347 7.3 多集群的关键技术 348 7.3.1 异构环境DNS 348 7.3.2 东西向网关 352 7.4 异构服务治理的原理 353 7.4.1 治理纯虚拟机服务 354 7.4.2 治理混合服务 355 7.5 本章小结 356 实 践 篇 第8章 环境准备 358 8.1 在本地搭建Istio环境 358 8.1.1 部署Kubernetes集群 358 8.1.2 安装Istio 359 8.2 尝鲜Istio命令行 361 8.3 应用示例 362 8.3.1 Weather Forecast简介 362 8.3.2 部署Weather Forecast 363 8.4 本章小结 364 第9章 应用监控实践 365 9.1 预先准备 365 9.2 调用链跟踪 366 9.3 指标监控 368 9.3.1 指标配置 369 9.3.2 指标采集:Prometheus 372 9.3.3 指标管理:Grafana 374 9.4 服务网格应用拓扑 379 9.5 访问日志 383 9.6 本章小结 384 第10章 灰度发布实践 385 10.1 预先准备 385 10.2 基于流量比例的路由 386 10.3 基于请求内容的路由 389 10.4 组合条件路由 391 10.5 多服务灰度发布 393 10.6 本章小结 395 第11章 流量治理实践 396 11.1 ROUND_ROBIN负载均衡 396 11.2 RANDOM负载均衡 397 11.3 地域负载均衡 399 11.3.1 基于权重的地域负载均衡 399 11.3.2 用于故障转移的地域负载均衡 402 11.4 会话保持 407 11.5 故障注入 409 11.5.1 延迟注入 409 11.5.2 中断注入 410 11.6 超时 412 11.7 重试 413 11.8 HTTP重定向 415 11.9 HTTP重写 417 11.10 熔断与连接池 418 11.11 熔断异常点检测 420 11.12 限流 423 11.12.1 全局限流 423 11.12.2 本地限流 427 11.13 服务隔离 430 11.14 影子测试 432 11.15 本章小结 434 第12章 服务安全实践 435 12.1 双向认证 435 12.2 JWT认证 438 12.3 特定命名空间的访问授权 441 12.4 特定源地址的授权 443 12.5 本章小结 445 第13章 网关流量实践 446 13.1 入口网关 446 13.2 单向TLS网关 448 13.3 双向TLS网关 451 13.4 访问网格外部服务 453 13.5 出口网关 455 13.6 本章小结 457 第14章 异构基础设施实践 458 14.1 多集群灰度发布 458 14.2 多集群非扁平网络负载均衡 462 14.3 多集群非扁平网络故障转移 465 14.4 虚拟机应用管理 470 14.5 本章小结 473