近几年来,容器技术的飞速发展使得微服务技术更容易落地,微服务架构在业界逐渐流行起来。但是微服务架构对基础设施要求较高,微服务依赖持续集成、服务注册、服务发现、负载均衡、健康检测、配置管理、服务路由、服务容错、日志收集、指标收集、调用链追踪等,而构建这一套基础设施的成本巨大。因此,微服务相关的框架逐渐露出水面,比如Java语言的Spring Cloud框架。虽然这些微服务框架为我们提供了很多便利,但由于这些框架是与编程语言绑定的,使得我们应用的技术栈受到了限制。即使后来有其他的微服务框架也支持多编程语言的技术栈,但由于这些微服务框架代码对服务代码入侵严重,给后续服务框架的bug修复和版本升级带来了一定的困难。所以,服务网格的概念一经提出,便得到了很多人的支持,人们对这项技术抱有很大的期望,希望能解决当前微服务所遇到的问题。
当我第一次接触服务网格技术的时候,就觉得服务网格将来可能会像IaaS、PaaS一样成为业界的主流技术,会得到广泛应用。其实,服务网格并没有提供什么新的概念和功能,它只是把原来服务框架所做的功能完全独立出来,整合了一个服务网格的基础设施层。这个改变看似很小,但是能使服务与服务治理功能实现完全解耦,这个影响是巨大的。
2017年5月,谷歌、IBM、Lyft等公司共同努力实现的开源服务网格Istio正式发布了第一个版本。而后又一个服务网格开源实现Conduit开始启航,服务网格进入了更多技术人员的视野,经过努力,Istio在2018年7月正式发布了1.0.0版本。
2018年是服务网格快速发展的一年,Istio发布的1.0.0版本标志着Istio已经成熟到可以接受生产流量的考验。2019年服务网格将会持续保持热度,作为一名技术人员,现在是时候了解一下服务网格技术了。而在所有的开源服务网格实现中,最成熟的肯定是Istio。因此,要学习和了解服务网格,首先应该学习使用Istio。
由于Istio官方文档使用英文编写,而且只简单演示了Istio提供的功能,没有基于一般的使用场景,我在学习Istio时就很迷茫。于是,我结合自己的学习经验和方法编写了这本如何在实战中学习Istio的书,以便技术人员能以最简单的方式上手Istio,理解Istio,并能在生产环境中应用Istio服务网格。
由于本书是一本实战类型的书,书中没有大篇的理论知识。对于Istio提供的功能,本书只简单地描述其作用和使用方式,然后使用实验来演示效果。我相信,只要你跟着书中的实验操作,并理解这些实验的目的,学习完本书后,你就一定能熟练使用Istio,并在以后的Istio使用中得心应手。
对服务网格感兴趣的人都可以阅读本书。如果你想了解服务网格,想知道服务网格提供了哪些功能,能解决什么问题,本书将是一个不错的选择。如果你想了解Istio,体验Istio,将来有可能将Istio应用于生产环境,那么阅读本书将是一个不错的开始。
本书主要内容如下:
第1章介绍服务网格的由来以及服务网格能给我们带来什么,接着介绍开源的服务网格实现Istio的主要功能特性及其架构设计。
第2章说明本书后续实验相关的环境和实验中的注意事项,并详细介绍后续实验中将会使用的微服务架构应用,以及微服务的容器化构建。
第3章简单介绍Vagrant及其使用方法。使用Vagrant可以快速创建实验环境,这对于我们后续实验环境的准备提供了非常大的便利,接着对创建实验环境的场景进行模拟,帮助读者熟悉Vagrant的使用流程。
第4章介绍如何使用Kubeadm快速创建一个多节点的Kubernetes集群。Kubernetes集群是后续部署Istio的基础。
第5章介绍如何以官方示例的方式部署一个包含完整功能的Istio集群,以及如何以最小资源的方式部署一个能满足大部分实验场景要求的Istio集群。此外,还简单介绍了Istio中常用的资源,以及常用的istioctl、kubectl命令。
第6章介绍微服务架构应用如何部署在Kubernetes集群中,以及如何访问部署在Kubernetes集群中的服务,还简单介绍了如何在Istio集群中部署和对外暴露服务。
第7章介绍Istio提供的服务流量管理功能,包括管理网格的入口和出口流量,根据请求进行流量拆分,如何借助Istio实现A/B测试和灰度发布等功能。
第8章介绍如何让部署在Istio中的服务更具弹性,包括负载均衡、连接池、服务健康检测、服务熔断、服务超时、服务重试、服务限流功能的配置。
第9章介绍服务故障注入的相关功能,提前给服务注入故障,可以测试服务在故障中的稳定性,提前发现问题并修复问题。
第10章介绍服务间通信加密和服务间访问权限的控制。Istio提供了双向TLS进行服务间的通信加密,使用RBAC来实现细粒度的服务访问权限控制。
第11章介绍如何提升服务的可观测性。在Istio中通过简单的配置,就可以实现服务的指标收集、日志收集。通过传递指定的服务请求头,就可以轻松实现服务的调用链追踪功能,这不但增强了服务的可观测性,还大大减轻了运维人员和开发人员的负担。
第12章介绍Istio部署后的维护工作。通过部署开源的第三方仪表板工具,我们可以更方便地管理Istio。接着介绍如何在不停机的情况下升级Istio,如何使用Helm以定制化的方式部署Istio,以及当Istio出现故障时应该如何排查并解决问题。最后介绍了在Istio中一个请求从发出到响应的整个流程。
第13章介绍一些不适合放在其他章节的Istio功能,包括跨域、跳转、TCP路由、TLS路由等,以及如何在Gateway上启用HTTPS,如何为部署在Istio中的服务开启健康检查功能,如何使用Envoy代理Ingressgateway来实现把集群内的服务暴露给集群外部使用。最后还简单介绍了Mixer和Adapter模型。
本书源码
本书所有示例代码都放在GitHub上,地址为 https://github.com/mgxian/istio-lab ,读者可以查看或下载。由于部署Kubernetes集群和Istio的过程中会涉及比较多的命令,我也把相关的命令放在了源码的cmd目录下。
由于作者水平和时间有限,书中难免会有一些纰漏和错误,欢迎读者及时指正。非常希望和大家一起学习和讨论服务网格与Istio,并共同推动服务网格和Istio在国内的发展。可以通过电子邮件will835559313@163.com联系到我。
致谢
感谢所有在本书撰写、出版过程中给予过帮助的人。这里要特别感谢机械工业出版社的吴怡编辑,没有她的鼎力相助,就没有本书。同时也要感谢我的家人和朋友,没有他们的支持和理解,我不可能在有限的时间里完成本书。最后要感谢阅读本书的读者,非常感谢大家的支持!