第1章 服务网格 1
1.1 服务端架构的发展——从单体应用到微服务 1
1.1.1 单体应用 1
1.1.2 多层结构 3
1.1.3 面向服务的架构 4
1.1.4 微服务架构 5
1.2 微服务架构的痛点 6
1.3 服务网格的发展 7
1.3.1 耦合阶段 7
1.3.2 封装公用库 8
1.3.3 Sidecar模式 9
1.3.4 服务网格出现 11
1.4 什么是服务网格 12
1.4.1 基本概念 12
1.4.2 服务网格的功能 12
1.5 服务网格产品介绍 14
1.5.1 Linkerd 14
1.5.2 Envoy 14
1.5.3 Istio 15
1.5.4 其他 16
1.6 小结 17
第2章 Istio入门 18
2.1 什么是Istio 18
2.2 Istio的架构 19
2.3 Istio的核心控件 20
2.3.1 Envoy 20
2.3.2 Pilot 21
2.3.3 Mixer 22
2.3.4 Citadel 23
2.3.5 Galley 23
2.4 Istio的主要功能 23
2.4.1 流量管理 23
2.4.2 策略和遥测 27
2.4.3 可视化 28
2.4.4 安全 28
2.5 小结 30
第3章 Istio的安装和部署 32
3.1 准备工作 32
3.1.1 安装Go语言 32
3.1.2 安装Docker 35
3.1.3 Kubernetes平台搭建 37
3.2 安装Istio 42
3.2.1 下载安装包 43
3.2.2 安装Helm 43
3.2.3 使用Helm安装Istio 44
3.2.4 确认安装结果 47
3.2.5 问题处理 49
3.3 小结 50
第4章 Bookinfo应用 51
4.1 什么是Bookinfo应用 51
4.2 部署Bookinfo应用 53
4.2.1 安装和部署 53
4.2.2 默认目标规则 61
4.3 小结 61
第5章 流量管理 63
5.1 流量管理中的规则配置 63
5.1.1 VirtualService 64
5.1.2 DestinationRule 67
5.1.3 ServiceEntry 68
5.1.4 Gateway 69
5.2 流量转移 70
5.2.1 蓝绿部署 70
5.2.2 金丝雀发布 76
5.2.3 A/B测试 79
5.3 超时和重试 80
5.3.1 超时 81
5.3.2 重试 83
5.4 控制入口流量 84
5.4.1 确定入口IP和端口 85
5.4.2 配置网关 86
5.5 控制出口流量 89
5.5.1 启动Sleep服务 89
5.5.2 配置外部服务 90
5.5.3 配置外部HTTPS服务 92
5.5.4 为外部服务设置路由规则 93
5.6 熔断 94
5.6.1 熔断简介 94
5.6.2 设置后端服务 95
5.6.3 设置客户端 96
5.6.4 触发熔断机制 97
5.7 小结 99
第6章 策略与遥测 100
6.1 Mixer的工作原理 100
6.2 限流策略 103
6.2.1 Mixer配置项 104
6.2.2 客户端配置项 105
6.2.3 有条件的限流 106
6.3 黑名单和白名单策略 107
6.3.1 初始化路由规则 107
6.3.2 用Denier适配器实现黑名单 108
6.3.3 用List适配器实现黑白名单 109
6.4 遥测 111
6.4.1 收集新的指标数据 111
6.4.2 指标配置解析 113
6.4.3 日志配置解析 114
6.4.4 用Prometheus查看指标 114
6.5 小结 115
第7章 可视化工具 117
7.1 分布式追踪 117
7.1.1 启动Jaeger 118
7.1.2 生成追踪数据 119
7.1.3 追踪原理 120
7.2 使用Prometheus查询指标 121
7.2.1 Prometheus简介 121
7.2.2 查询Istio指标 122
7.3 用Grafana监控指标数据 124
7.3.1 Grafana简介 124
7.3.2 安装Grafana 124
7.3.3 指标数据展示 125
7.4 服务网格可视化工具——Kiali 127
7.4.1 Kiali简介 127
7.4.2 安装和启动Kiali 128
7.4.3 使用Kiali观测服务网格 129
7.5 使用EFK收集和查看日志 132
7.5.1 集中式日志架构 132
7.5.2 安装EFK 133
7.5.3 用Kibana查看生成的日志 140
7.6 小结 142
第8章 安全 144
8.1 认证 144
8.1.1 Istio中的认证方式 144
8.1.2 认证策略 146
8.2 授权 149
8.2.1 启用授权 149
8.2.2 授权策略 150
8.3 HTTP服务的访问控制 152
8.3.1 准备工作 152
8.3.2 命名空间的访问控制 154
8.3.3 服务级别的访问控制 155
8.4 TCP服务的访问控制 157
8.4.1 准备工作 157
8.4.2 启动访问控制 160
8.5 外部密钥和证书 162
8.5.1 插入密钥和证书 162
8.5.2 检查新证书 163
8.6 小结 163
第9章 进阶 165
9.1 云平台集成 165
9.1.1 在Google Cloud GKE上启用Istio 165
9.1.2 使用阿里云Kubernetes容器服务 169
9.2 高级流量控制 171
9.2.1 故障注入 171
9.2.2 流量镜像 174
9.3 调试和故障排查 179
9.3.1 Istio组件的日志 180
9.3.2 调试 181
9.3.3 故障排查 183
9.4 小结 186
附录 187
附录A Helm安装选项 187
A.1 certmanager选项 187
A.2 galley选项 188
A.3 gateways选项 188
A.4 global选项 191
A.5 grafana选项 194
A.6 Istio_cni选项 196
A.7 Istiocoredns选项 196
A.8 kiali选项 196
A.9 mixer选项 197
A.10 nodeagent选项 198
A.11 pilot选项 198
A.12 prometheus选项 199
A.13 security选项 200
A.14 servicegraph选项 200
A.15 sidecarInjectorWebhook选项 200
A.16 tracing选项 201
附录B 属性词汇表 202
附录C 表达式语言 205
附录D 适配器列表 206
附录E 命令行工具istioctl 207
E.1 istioctl authn 207
E.2 istioctl create 207
E.3 istioctl delete 208
E.4 istioctl deregister 208
E.5 istioctl gen-deploy 208
E.6 istioctl get 209
E.7 istioctl kube-inject 209
E.8 istioctl proxy-config 210
E.9 istioctl register 210
E.10 istioctl replace 210
E.11 istioctl version 210