《Istio入门与实战》
实战
Istio入门与实战
毛广献 编著
Preface 前 言
近几年来,容器技术的飞速发展使得微服务技术更容易落地,微服务架构在业界逐渐流行起来。但是微服务架构对基础设施要求较高,微服务依赖持续集成、服务注册、服务发现、负载均衡、健康检测、配置管理、服务路由、服务容错、日志收集、指标收集、调用链追踪等,而构建这一套基础设施的成本巨大。因此,微服务相关的框架逐渐露出水面,比如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联系到我。
致谢
感谢所有在本书撰写、出版过程中给予过帮助的人。这里要特别感谢机械工业出版社的吴怡编辑,没有她的鼎力相助,就没有本书。同时也要感谢我的家人和朋友,没有他们的支持和理解,我不可能在有限的时间里完成本书。最后要感谢阅读本书的读者,非常感谢大家的支持!
目 录 Contents
前言
第4章 创建Kubernetes集群 48
4.1 安装Docker 48
4.2 安装Kubeadm 51
4.3 配置基础环境 52
4.4 创建Kubernetes集群的步骤 55
4.5 测试集群的正确性 61
4.6 注意事项与技巧 65
4.7 本章小结 67
第5章 Istio部署与常用命令 68
5.1 部署Istio 68
5.2 常用资源类型 77
5.2.1 流量控制 77
5.2.2 请求配额 80
5.2.3 mTLS认证策略 81
5.2.4 RBAC访问权限 81
5.3 常用的kubectl命令 83
5.4 常用的istioctl命令 83
5.4.1 通用参数说明 84
5.4.2 常用命令 84
5.5 注意事项与技巧 85
5.6 本章小结 89
第6章 微服务应用的部署 90
6.1 微服务应用架构 90
6.2 部署服务 94
6.3 访问服务 98
6.4 在Istio中部署微服务 102
6.5 本章小结 105
第7章 让服务流量控制更简单 106
7.1 整体介绍 106
7.2 管理集群的入口流量 110
7.3 把请求路由到服务的指定版本 111
7.4 根据服务版本权重拆分流量 113
7.5 根据请求信息路由到服务的不同版本 114
7.6 流量镜像 115
7.7 管理集群的出口流量 117
7.8 实现服务A/B测试 126
7.9 实现服务灰度发布 128
7.10 灰度发布与A/B测试结合 132
7.11 本章小结 135
第8章 让服务更具弹性 136
8.1 整体介绍 136
8.2 负载均衡 138
8.3 连接池 141
8.4 健康检测 144
8.5 熔断 145
8.6 超时 149
8.7 重试 151
8.8 限流 153
8.9 本章小结 165
第9章 让服务故障检测更容易 166
9.1 整体介绍 166
9.2 给服务增加时延 168
9.3 给服务注入错误 169
9.4 时延与错误配合使用 171
9.5 本章小结 173
第10章 让服务通信更安全可控 174
10.1 整体介绍 174
10.2 Denier适配器 176
10.3 黑白名单 177
10.4 服务与身份认证 180
10.5 RBAC访问控制 194
10.6 本章小结 205
第11章 让服务更易观测与监控 206
11.1 整体介绍 206
11.2 指标收集 209
11.3 日志收集 216
11.4 调用链追踪 224
11.5 服务指标可视化 230
11.6 服务调用树 235
11.7 本章小结 239
第12章 Istio维护 240
12.1 整体介绍 240
12.2 Istio服务网格仪表板 241
12.3 升级Istio 245
12.4 使用Helm定制部署Istio 253
12.5 故障排除 257
12.6 一个请求的完整过程分析 272
12.7 本章小结 282
第13章 杂项 283
13.1 CORS 284
13.2 URL重定向 287
13.3 URL重写 289
13.4 TCP路由 290
13.5 TLS路由 292
13.6 mTLS迁移 295
13.7 EnvoyFilter 297
13.8 添加请求头 299
13.9 在Gateway上使用HTTPS 300
13.10 在HTTPS服务上开启mTLS 304
13.11 网格中的服务健康检查 306
13.12 Envoy代理Ingressgateway 308
13.13 Mixer与Adapter模型 311
13.14 本章小结 312
- 点赞
- 收藏
- 关注作者
评论(0)