关于本书
谁应该读这本书
本书面向开发人员、架构师,以及服务运营商,他们运维或计划运维分布式服务,如面向用户的Web应用程序、API和后端服务,并希望向用户提供高可用的服务。如果你隶属于平台工程团队,为组织内的许多开发团队提供基础设施和支持组件,如日志管理、监控、容器编排等,本书将告诉你如何给用户提供合适的工具,让他们的应用程序安全、有弹性且可观测,降低发布新特性的风险。
如果你已经在测试环境或预发布环境中使用了Istio,但对它的工作原理感到困惑,那么本书将为你揭开Istio的神秘面纱。特别是后面的章节,将向你展示如何在组织中扩展服务网格,当它的行为不符合你的期望时,如何排除故障,以及自定义策略并对其进行扩展以满足企业需求。
如果你已经是Istio专家,本书对你可能仍然很有用,因为我们非常仔细地将过去三年在该领域工作中学到的东西融入其中。
如果你对构建容器很陌生,不熟悉Kubernetes的Deployment、Pod和Service,那么本书可能还不适合你。有很多资源可以帮助你学习这些预备知识。我们强烈推荐Marko Lukša的Kubernetes in Action(Manning,2017);这本书全面介绍了这方面内容,引人入胜。在你理解了Kubernetes的基础原理和资源定义,以及Kubernetes控制器是如何工作的之后,你就可以回来深入了解Istio服务网格。
你还应该对网络知识有基本的了解,我们说的是基本的。如果你熟悉网络层(第3层)、传输层(第4层),以及它们与应用层(第7层)的区别,那么你就已经准备好阅读这本书了。
本书的组织方式:路线图
本书分为4部分,共14章。第1部分介绍了服务网格的概念和Istio的实现。这3章涵盖了Istio架构、Envoy如何融入Istio,以及Istio如何使你的组织受益:
• 第1章介绍了Istio的优势和服务网格给组织带来的价值。
• 第2章是在Kubernetes集群中部署Istio的实践教程。我们将应用程序部署并集成到网格中,使用Istio的自定义资源对其进行配置。本章借助demo应用程序概述了Istio的开箱即用能力,并涵盖了可观测性、弹性、流量路由等内容。
• 第3章是关于Envoy的——它是如何产生的、解决了什么问题、为何适用于服务网格架构。
第2部分将深入探讨Istio,重点转向了实际案例。我们回答了操作上的一些关键问题——如何保护进入集群的流量,使服务更具弹性,以及如何利用服务代理中的遥测技术,使系统可观测。这部分共分6章:
• 第4章教你如何使用和配置Istio入口网关,安全地将流量从公共网络导入集群内部服务(我们称之为南北流量)。
• 第5章展示了流量进入集群后,如何使用VirtualService和Destina-tionRule以细粒度的方式路由流量,降低使用复杂的部署模式发布软件时的风险。
• 第6章探讨了应用程序团队如何从Istio中受益。我们讨论了如何通过在服务网格中实现重试、熔断、跨区域的负载均衡和位置感知负载均衡来增强服务的健壮性。
• 第7章介绍了Istio如何通过指标、追踪和日志来实现服务的可观测性。在这里,我们将深入研究由服务代理生成的指标和其中记录的信息,以及如何对这些信息进行自定义。
• 第8章介绍了如何使用遥测可视化工具来理解收集的数据。我们使用Prometheus来收集指标,使用Grafana进行可视化,使用Jaeger将服务发送的请求的追踪数据连接在一起。本章还将介绍Kiali,使网格中服务的故障排除变得轻而易举。
• 第9章详细阐述了Istio如何保护服务间流量,为服务配置身份,以及如何使用身份来实现访问控制和缩小潜在的攻击范围。
第3部分是一些进阶操作。该部分介绍了如何解决数据平面的问题,维护控制平面的稳定性和性能。阅读完这部分,你将对Istio的内部原理有一个确切的了解,你将能够自主发现和修复问题:
• 第10章展示了如何使用istioctl、Kiali等工具,以及收集到的可视化数据来解决数据平面的问题。
• 第11章讨论了影响Istio性能的因素,主要展示了如何配置Istio以使控制平面获得更高的性能——这是构建一个健壮的服务网格的基础。
本书的第4部分,也就是最后一部分,展示了如何让Istio真正成为你的得力工具。企业具有跨边界运行的服务,例如不同的集群、不同的网络,或者云原生工作负载和传统工作负载的混合。在第4部分结束时,你将知道如何将工作负载加入单一的网格中,并使用WebAssembly定制网格的行为来满足特殊的需求:
• 第12章展示了如何连接不同Kubernetes集群中的工作负载,而无论它们在哪里运行,比如不同的云服务商、本地或混合云中。
• 第13章展示了如何将运行在虚拟机中的传统工作负载集成到网格中,并扩展这些工作负载的弹性和高可用性。
• 第14章教你如何使用Lua脚本和WebAssembly的代码扩展和定制Istio的功能。
关于代码
本书包含了许多源代码示例,它们以编号清单的形式显示,或者与普通文本一致。在这两种情况下,源代码都被格式化为固定宽度的字体,以便与普通文本区分开。有时代码也会以粗体显示,以突出显示与本章前面步骤不同的部分,例如当一个新特性被添加到现有的代码行中时。
在很多情况下,原始的源代码已经被重新格式化;我们添加了换行符,并修改了缩进,以节省版面。在极少数情况下,这甚至还不够,清单中还包括行延续标记(➥)。此外,当在文本中描述代码时,源代码中的注释通常会被从清单中删除。许多代码中都伴随着注释,突出了重要的概念。
你可以在https://livebook.manning.com/book/istio-in-action上,从本书的liveBook(在线)版本获得可执行的代码片段。本书中示例的完整代码可从Manning网站www.manning.com和GitHub网站https://github.com/istioinaction/book-source-code下载。