《云原生服务网格Istio:原理、实践、架构与源码解析》是由电子工业出版社出版的一本关于Istio方面的书籍,作者是张超盟,主要介绍了关于Istio、原理、实践、架构、源码解析方面的知识内容,目前在Istio类书籍综合评分为:9.5分。
书籍介绍
这书分成原理篇、实践篇、构架篇和源代码篇,循序渐进地将Istio新项目庖丁解牛并展现给用户。原理篇详细介绍了服务项目网格技术与Istio新项目的技术性背景图、设计构思与作用基本原理,可以协助用户掌握服务项目网格图这种云原生态行业的代表性技术性,把握Istio总流量整治、对策与遥测和安全性作用的使用说明。实践篇重零开始构建Istio软件环境并进行1个真正运用的开发设计、交货、发布监控器与整治的详细全过程,可以协助用户了解Istio的作用并加重对Istio的了解。构架篇分析了Istio新项目的几大关键子项目Pilot、Mixer、Citadel的详尽构架,协助用户了解Envoy、Galley、Pilot-agent等有关新项目,并发掘Istio编码身后的设计方案与保持观念。源代码篇对Istio每个新项目的编码构造、文件组织、关键步骤、关键数据结构及各关键编码片断等重要內容都开展了详解,用户只需具有必须的Go語言基本,便可迅速把握Istio各一部分的保持基本原理,并依据自身的兴趣爱好深层次掌握某一重要体制的详细保持。这书出示源码下载,参照http://github.com/cloudnativebooks/cloud-native-istio。不论是针对刚新手入门Istio的用户,還是针对早已产成品中应用Istio的用户,这书都具有实用价值。
目录
- 原 理 篇
- 第1章 你好,Istio. 2
- 1.1 Istio是什么... 2
- 1.2 通过示例看看Istio能做什么... 4
- 1.3 Istio与服务治理... 6
- 1.3.1 关于微服务... 6
- 1.3.2 服务治理的三种形态... 8
- 1.3.3 Istio不只解决了微服务问题... 10
- 1.4 Istio与服务网格... 11
- 1.4.1 时代选择服务网格... 11
- 1.4.2 服务网格选择Istio. 14
- 1.5 Istio与Kubernetes 15
- 1.5.1 Istio,Kubernetes的好帮手... 16
- 1.5.2 Kubernetes,Istio的好基座... 18
- 1.6 本章总结... 20
- 第2章 Istio架构概述... 21
- 2.1 Istio的工作机制... 21
- 2.2 Istio的服务模型... 23
- 2.2.1 Istio的服务... 24
- 2.2.2 Istio的服务版本... 26
- 2.2.3 Istio的服务实例... 28
- 2.3 Istio的主要组件... 30
- 2.3.1 istio-pilot 30
- 2.3.2 istio-telemetry. 32
- 2.3.3 istio-policy. 33
- 2.3.4 istio-citadel 34
- 2.3.5 istio-galley. 34
- 2.3.6 istio-sidecar-injector 35
- 2.3.7 istio-proxy. 35
- 2.3.8 istio-ingressgateway. 36
- 2.3.9 其他组件... 37
- 2.4 本章总结... 37
- 第3章 非侵入的流量治理... 38
- 3.1 Istio流量治理的原理... 38
- 3.1.1 负载均衡... 39
- 3.1.2 服务熔断... 41
- 3.1.3 故障注入... 48
- 3.1.4 灰度发布... 49
- 3.1.5 服务访问入口... 54
- 3.1.6 外部接入服务治理... 56
- 3.2 Istio路由规则配置:VirtualService. 59
- 3.2.1 路由规则配置示例... 59
- 3.2.2 路由规则定义... 60
- 3.2.3 HTTP路由(HTTPRoute)... 63
- 3.2.4 TLS路由(TLSRoute)... 78
- 3.2.5 TCP路由(TCPRoute)... 81
- 3.2.6 三种协议路由规则的对比... 83
- 3.2.7 VirtualService的典型应用... 84
- 3.3 Istio目标规则配置:DestinationRule. 89
- 3.3.1 DestinationRule配置示例... 90
- 3.3.2 DestinationRule规则定义... 90
- 3.3.3 DestinationRule的典型应用.... 103
- 3.4 Istio服务网关配置:Gateway. 107
- 3.4.1 Gateway配置示例... 108
- 3.4.2 Gateway规则定义... 109
- 3.4.3 Gateway的典型应用... 112
- 3.5 Istio外部服务配置:ServiceEntry. 120
- 3.5.1 ServiceEntry配置示例... 120
- 3.5.2 ServiceEntry规则的定义和用法... 121
- 3.5.3 ServiceEntry的典型应用... 123
- 3.6 Istio代理规则配置:Sidecar 126
- 3.6.1 Sidecar配置示例... 126
- 3.6.2 Sidecar规则定义... 126
- 3.7 本章总结... 129
- 第4章 可扩展的策略和遥测... 131
- 4.1 Istio策略和遥测的原理... 131
- 4.1.1 应用场景... 131
- 4.1.2 工作原理... 136
- 4.1.3 属性... 137
- 4.1.4 Mixer的配置模型... 140
- 4.2 Istio遥测适配器配置... 147
- 4.2.1 Prometheus适配器... 148
- 4.2.2 Fluentd适配器... 155
- 4.2.3 StatsD适配器... 159
- 4.2.4 Stdio适配器... 161
- 4.2.5 Zipkin适配器... 163
- 4.2.6 厂商适配器... 168
- 4.3 Istio策略适配器配置... 169
- 4.3.1 List适配器... 169
- 4.3.2 Denier适配器... 171
- 4.3.3 Memory Quota适配器... 172
- 4.3.4 Redis Quota适配器.... 175
- 4.4 Kubernetes Env适配器配置... 178
- 4.5 本章总结... 181
- 第5章 可插拔的服务安全... 182
- 5.1 Istio服务安全的原理... 182
- 5.1.1 认证... 185
- 5.1.2 授权... 189
- 5.1.3 密钥证书管理... 192
- 5.2 Istio服务认证配置... 193
- 5.2.1 认证策略配置示例... 193
- 5.2.2 认证策略的定义... 194
- 5.2.3 TLS访问配置... 196
- 5.2.4 认证策略的典型应用... 200
- 5.3 Istio服务授权配置... 202
- 5.3.1 授权启用配置... 202
- 5.3.2 授权策略配置... 203
- 5.3.3 授权策略的典型应用... 207
- 5.4 本章总结... 210
- 第6章 透明的Sidecar机制... 211
- 6.1 Sidecar注入... 211
- 6.1.1 Sidecar Injector自动注入的原理... 214
- 6.1.2 Sidecar注入的实现... 216
- 6.2 Sidecar流量拦截... 219
- 6.2.1 iptables的基本原理... 220
- 6.2.2 iptables的规则设置... 223
- 6.2.3 流量拦截原理... 224
- 6.3 本章总结... 228
- 第7章 多集群服务治理... 230
- 7.1 Istio多集群服务治理... 230
- 7.1.1 Istio多集群的相关概念... 230
- 7.1.2 Istio多集群服务治理现状... 231
- 7.2 多集群模式1:多控制面... 232
- 7.2.1 服务DNS解析的原理... 233
- 7.2.2 Gateway连接的原理... 237
- 7.3 多集群模式2:VPN直连单控制面... 238
- 7.4 多集群模式3:集群感知服务路由单控制面... 240
- 7.5 本章总结... 246
- 实 践 篇
- 第8章 环境准备... 248
- 8.1 在本地搭建Istio环境... 248
- 8.1.1 安装Kubernetes集群... 248
- 8.1.2 安装Helm.. 249
- 8.1.3 安装Istio. 250
- 8.2 在公有云上使用Istio. 253
- 8.3 尝鲜Istio命令行... 255
- 8.4 应用示例... 257
- 8.4.1 Weather Forecast简介... 257
- 8.4.2 Weather Forecast部署... 258
- 8.5 本章总结... 259
- 第9章 流量监控... 260
- 9.1 预先准备:安装插件... 260
- 9.2 调用链跟踪... 261
- 9.3 指标监控... 265
- 9.3.1 Prometheus. 265
- 9.3.2 Grafana. 268
- 9.4 服务网格监控... 273
- 9.5 本章总结... 277
- 第10章 灰度发布... 278
- 10.1 预先准备:将所有流量都路由到各个服务的v1版本... 278
- 10.2 基于流量比例的路由... 279
- 10.3 基于请求内容的路由... 283
- 10.4 组合条件路由... 284
- 10.5 多服务灰度发布... 286
- 10.6 TCP服务灰度发布... 288
- 10.7 自动化灰度发布... 290
- 10.7.1 正常发布... 291
- 10.7.2 异常发布... 294
- 第11章 流量治理... 296
- 11.1 流量负载均衡... 296
- 11.1.1 ROUND_ROBIN模式... 296
- 11.1.2 RANDOM模式... 298
- 11.2 会话保持... 299
- 11.2.1 实战目标... 300
- 11.2.2 实战演练... 300
- 11.3 故障注入... 301
- 11.3.1 延迟注入... 301
- 11.3.2 中断注入... 303
- 11.4 超时... 304
- 11.5 重试... 306
- 11.6 HTTP重定向... 308
- 11.7 HTTP重写... 309
- 11.8 熔断... 310
- 11.9 限流... 313
- 11.9.1 普通方式... 314
- 11.9.2 条件方式.... 315
- 11.10 服务隔离... 317
- 11.10.1 实战目标... 317
- 11.10.2 实战演练... 317
- 11.11 影子测试... 319
- 11.12 本章总结... 322
- 第12章 服务保护... 323
- 12.1 网关加密... 323
- 12.1.1 单向TLS网关... 323
- 12.1.2 双向TLS网关... 326
- 12.1.3 用SDS加密网关... 328
- 12.2 访问控制... 331
- 12.2.1 黑名单... 331
- 12.2.2 白名单... 332
- 12.3 认证... 334
- 12.3.1 实战目标... 334
- 12.3.2 实战演练... 334
- 12.4 授权... 336
- 12.4.1 命名空间级别的访问控制... 336
- 12.4.2 服务级别的访问控制... 339
- 12.5 本章总结... 341
- 第13章 多集群管理... 342
- 13.1 实战目标... 342
- 13.2 实战演练... 342
- 13.3 本章总结... 350
- 架 构 篇
- 第14章 司令官Pilot 352
- 14.1 Pilot的架构... 352
- 14.1.1 Istio的服务模型... 354
- 14.1.2 xDS协议... 356
- 14.2 Pilot的工作流程... 360
- 14.2.1 Pilot的启动与初始化... 361
- 14.2.2 服务发现... 363
- 14.2.3 配置规则发现... 368
- 14.2.4 Envoy的配置分发... 376
- 14.3 Pilot的插件... 383
- 14.3.1 安全插件... 385
- 14.3.2 健康检查插件... 390
- 14.3.3 Mixer插件... 391
- 14.4 Pilot的设计亮点... 392
- 14.4.1 三级缓存优化... 392
- 14.4.2 去抖动分发... 393
- 14.4.3 增量EDS. 394
- 14.4.4 资源隔离... 395
- 14.5 本章总结... 396
- 第15章 守护神Mixer 397
- 15.1 Mixer的整体架构... 397
- 15.2 Mixer的服务模型... 398
- 15.2.1 Template. 399
- 15.2.2 Adapter 401
- 15.3 Mixer的工作流程... 403
- 15.3.1 启动初始化... 403
- 15.3.2 用户配置信息规则处理... 409
- 15.3.3 访问策略的执行... 416
- 15.3.4 无侵入遥测... 421
- 15.4 Mixer的设计亮点... 423
- 15.5 如何开发Mixer Adapter 424
- 15.5.1 Adapter实现概述... 424
- 15.5.2 内置式Adapter的开发步骤... 425
- 15.5.3 独立进程式Adapter的开发步骤... 430
- 15.5.4 独立仓库式Adapter的开发步骤... 437
- 15.6 本章总结... 438
- 第16章 安全碉堡Citadel 439
- 16.1 Citadel的架构... 439
- 16.2 Citadel的工作流程... 441
- 16.2.1 启动初始化... 441
- 16.2.2 证书控制器... 442
- 16.2.3 gRPC服务器... 444
- 16.2.4 证书轮换器... 445
- 16.2.5 SDS服务器... 446
- 16.3 本章总结... 449
- 第17章 高性能代理Envoy. 450
- 17.1 Envoy的架构... 450
- 17.2 Envoy的特性... 451
- 17.3 Envoy的模块结构... 452
- 17.4 Envoy的线程模型... 453
- 17.5 Envoy的内存管理... 455
- 17.5.1 变量管理... 455
- 17.5.2 Buffer管理... 456
- 17.6 Envoy的流量控制... 456
- 17.7 Envoy与Istio的配合... 457
- 17.7.1 部署与交互... 457
- 17.7.2 Envoy API 458
- 17.3 本章总结... 459
- 第18章 代理守护进程Pilot-agent 460
- 18.1 为什么需要Pilot-agent 461
- 18.2 Pilot-agent的工作流程... 461
- 18.2.1 Envoy的启动... 462
- 18.2.2 Envoy的热重启... 465
- 18.2.3 守护Envoy. 466
- 18.2.4 优雅退出... 467
- 18.3 本章总结... 468
- 第19章 配置中心Galley. 469
- 19.1 Galley的架构... 469
- 19.1.1 MCP. 470
- 19.1.2 MCP API 470
- 19.2 Galley的工作流程... 471
- 19.2.1 启动初始化... 471
- 19.2.2 配置校验... 476
- 19.2.3 配置聚合与分发... 479
- 19.3 本章总结... 482
- 源 码 篇
- 第20章 Pilot源码解析... 484
- 20.1 进程启动流程... 484
- 20.2 关键代码分析... 486
- 20.2.1 ConfigController 486
- 20.2.2 ServiceController 490
- 20.2.3 xDS异步分发... 495
- 20.2.4 配置更新预处理... 503
- 20.2.5 xDS配置的生成及分发... 509
- 20.3 本章总结... 514
- 第21章 Mixer源码解析... 515
- 21.1 进程启动流程... 515
- 21.1.1 runServer通过newServer新建Server对象... 517
- 21.1.2 启动Mixer gRPC Server 520
- 21.2 关键代码分析... 520
- 21.2.1 监听用户的配置... 520
- 21.2.2 构建数据模型... 524
- 21.2.3 Check接口... 533
- 21.2.4 Report接口... 536
- 21.2.5 请求分发... 539
- 21.2.6 协程池... 541
- 21.3 本章总结... 543
- 第22章 Citadel源码解析... 544
- 22.1 进程启动流程... 544
- 22.2 关键代码分析... 548
- 22.2.1 证书签发实体IstioCA.. 548
- 22.2.2 SecretController的创建和核心原理... 551
- 22.2.3 CA Server的创建和核心原理... 556
- 22.3 本章总结... 558
- 第23章 Envoy源码解析... 559
- 23.1 Envoy的初始化... 559
- 23.1.1 启动参数bootstrap的初始化... 559
- 23.1.2 Admin API的初始化... 560
- 23.1.3 Worker的初始化... 562
- 23.1.4 CDS的初始化... 562
- 23.1.5 LDS的初始化... 563
- 23.1.6 GuardDog的初始化... 564
- 23.2 Envoy的运行和建立新连接... 564
- 23.2.1 启动worker 565
- 23.2.2 Listener的加载... 565
- 23.2.3 接收连接... 566
- 23.3 Envoy对数据的读取、接收及处理... 567
- 23.3.1 读取数据... 568
- 23.3.2 接收数据... 568
- 23.3.3 处理数据... 569
- 23.4 Envoy发送数据到服务端... 570
- 23.4.1 匹配路由... 571
- 23.4.2 获取连接池... 572
- 23.4.3 选择上游主机... 572
- 23.5 本章总结... 573
- 第24章 Galley源码解析... 574
- 24.1 进程启动流程... 574
- 24.1.1 RunServer的启动流程... 577
- 24.1.2 RunValidation Server的启动流程... 578
- 24.2 关键代码分析... 580
- 24.2.1 配置校验... 580
- 24.2.2 配置监听... 584
- 24.2.3 配置分发... 585
- 24.3 本章总结... 589
- 结语... 590
- 附录A 源码仓库介绍... 592
- 附录B 实践经验和总结... 598