目 录 Contents
序 一
序 二
序 三
前 言
初级篇
第1章 服务网格与Istio 2
1.1 微服务架构的发展与挑战 2
1.2 使用应用程序库解决这些挑战 4
1.2.1 特定应用程序库的缺点 5
1.2.2 将这些问题推向基础设施 6
1.3 什么是服务网格 7
1.4 为什么服务网格是必要的 10
1.5 Istio服务网格 11
1.5.1 核心功能 12
1.5.2 为什么要使用Istio 14
1.5.3 成熟度和支持级别 15
1.6 本章总结 16
第2章 快速上手Istio 17
2.1 在MiniKube上搭建Istio环境 17
2.1.1 安装启动Minikube 17
2.1.2 安装部署Helm 18
2.1.3 安装部署Istio 19
2.2 在Docker Desktop上搭建Istio环境 22
2.2.1 安装配置Docker Desktop for
Kubernetes 22
2.2.2 切换Kubernetes 24
2.2.3 安装部署Helm 26
2.2.4 安装部署Istio 26
2.3 使用公有云Istio服务 28
2.4 在Istio中部署第一个应用程序 31
2.5 本章总结 39
第3章 Istio架构剖析 40
3.1 Istio的整体架构 40
3.2 剖析Istio控制平面 42
3.3 剖析Istio数据平面 45
3.3.1 Envoy代理 45
3.3.2 Envoy的启动配置 47
3.3.3 Envoy静态与动态配置 47
3.3.4 使用Envoy 51
3.3.5 Envoy请求重试 56
3.3.6 Envoy的Admin API 58
3.3.7 Envoy与其他类似代理的比较 61
3.4 剖析Sidecar自动注入 62
3.4.1 Kubernetes的Webhook机制 62
3.4.2 启用Webhook插件 63
3.4.3 采用Webhook自动注入Istio Sidecar 63
3.4.4 开启需要自动注入Sidecar的命名空间 66
3.5 本章总结 67
中级篇
第4章 东西向流量管理 70
4.1 流量管理 70
4.1.1 术语 72
4.1.2 流量拆分与导向 72
4.1.3 Istio服务与Kubernetes服务 73
4.1.4 示例 76
4.2 实现东西向流量路由 83
4.2.1 自动 Sidecar 注入 84
4.2.2 部署 85
4.2.3 查看Ingress Gateway的地址 85
4.2.4 请求路由 86
4.3 实现流量镜像及对比分析 89
4.3.1 流量镜像 89
4.3.2 流量对比 89
4.3.3 创建用于Istio流量镜像的服务 90
4.3.4 创建流量镜像的Istio策略 92
4.3.5 搭建Diffy用于请求流量对比 93
4.3.6 发送流量进行镜像验证 96
4.4 通过Istio管理应用的灰度发布 99
4.4.1 Kubernetes中的灰度发布 100
4.4.2 使用 Istio进行灰度发布 101
4.4.3 统一的流量路由规则 102
4.5 本章总结 103
第5章 南北向流量管理 104
5.1 Istio 网关 104
5.1.1 Istio网关的工作原理 104
5.1.2 Istio网关的负载均衡作用 105
5.1.3 入口网关服务 107
5.1.4 入口网关部署 107
5.1.5 网关资源 108
5.1.6 网关虚拟服务 109
5.1.7 调试入口网关 109
5.2 用HTTPS 加密网关 110
5.2.1 为入口网关配置TLS 111
5.2.2 创建示例服务 112
5.2.3 定义虚拟服务 112
5.2.4 通过网关请求示例服务 113
5.2.5 为多个主机配置 TLS入口网关 114
5.3 基于SNI的TLS路由 119
5.3.1 定义内部服务nginx 121
5.3.2 定义内部服务nginx2 122
5.3.3 部署网关 124
5.3.4 根据域名进行访问 125
5.4 服务条目 126
5.4.1 服务条目基本原理 126
5.4.2 服务条目的定义参数 127
5.5 实现出口流量路由的统一管理 130
5.5.1 出口安全 130
5.5.2 创建客户端 131
5.5.3 HTTP流量网关 131
5.5.4 HTTPS流量网关 133
5.5.5 出口流量的TLS发起 136
5.6 实现服务条目的DNS寻址 137
5.6.1 CoreDNS 及其插件工作机制 138
5.6.2 Kubernetes下的CoreDNS 139
5.6.3 部署Istio CoreDNS 140
5.6.4 更改集群CoreDNS配置 140
5.6.5 创建服务条目验证DNS解析 141
5.7 本章总结 142
第6章 流量治理 144
6.1 使用流量策略 144
6.1.1 目标规则 144
6.1.2 流量策略 145
6.2 设置负载均衡 146
6.2.1 标准负载均衡算法 147
6.2.2 会话保持 147
6.2.3 示例 147
6.3 熔断 150
6.3.1 连接池管理 151
6.3.2 异常检测 152
6.3.3 创建示例服务 152
6.3.4 使用fortio触发熔断 154
6.4 服务重试 157
6.5 故障注入 160
6.6 命名空间隔离下的流量管理 165
6.6.1 Sidecar资源定义 165
6.6.2 示例 166
6.7 本章总结 169
第7章 安全 170
7.1 Istio安全架构 170
7.1.1 Istio身份模型 172
7.1.2 Istio公钥基础设施 172
7.1.3 Istio证书和密钥轮换机制 173
7.2 剖析认证机制 173
7.2.1 认证架构 174
7.2.2 双向TLS认证 175
7.2.3 认证策略 175
7.3 使用认证策略 175
7.3.1 Istio默认认证策略 177
7.3.2 认证策略示例 177
7.3.3 双向认证策略检查 180
7.4 使用自定义CA证书和密钥 181
7.4.1 准备证书和密钥 181
7.4.2 插入证书和密钥 184
7.4.3 检查新证书 185
7.5 使用cert-manager管理网关证书 186
7.5.1 生成签名密钥对 186
7.5.2 将签名密钥对保存为Secret 186
7.5.3 部署cert-manager 186
7.5.4 创建引用Secret的Issuer 187
7.5.5 获得签名证书 187
7.5.6 检查证书与密钥 188
7.5.7 部署自定义网关 189
7.5.8 定义Kubernetes服务 192
7.5.9 创建虚拟服务 194
7.6 剖析授权机制 196
7.6.1 启用全局授权 197
7.6.2 Istio授权策略 197
7.6.3 授权策略示例 199
7.6.4 诊断授权策略 201
7.7 本章总结 206
第8章 Mixer的控制与观测 207
8.1 Mixer架构设计 207
8.2 剖析适配器机制 209
8.2.1 属性及表达式 209
8.2.2 配置模型 212
8.2.3 处理程序 212
8.2.4 示例 213
8.2.5 规则 214
8.3 指标数据收集 214
8.3.1 metric模板 214
8.3.2 Prometheus适配器的配置 215
8.3.3 监控指标 216
8.3.4 配置Istio收集指标 218
8.3.5 查询Istio指标 220
8.3.6 可视化Istio指标 221
8.4 集成日志数据收集 222
8.4.1 logentry模板 223
8.4.2 stdio适配器的配置 224
8.4.3 配置Istio日志 225
8.4.4 查看日志 226
8.4.5 安装EFK软件栈 227
8.4.6 为Fluentd适配器配置Istio资源 231
8.4.7 通过Kibana查看日志 232
8.5 启用基于Zipkin或Jaeger的分布式跟踪 234
8.5.1 Istio跟踪采样率 235
8.5.2 部署应用示例 236
8.5.3 启用Zipkin 238
8.5.4 启用Jaeger 238
8.6 启用速率限制策略 240
8.6.1 配额模板 240
8.6.2 速率限制配置 241
8.6.3 部署应用示例 243
8.7 启用黑白名单策略 244
8.7.1 list适配器及模板 245
8.7.2 部署应用示例 246
8.7.3 部署适配器示例 246
8.7.4 校验白名单策略 247
8.8 本章总结 248
高级篇
第9章 Istio稳定性与运维 250
9.1 Istio功能模块的稳定性与常见问题 250
9.1.1 可能的请求错误排查 252
9.1.2 证书有效期管理 254
9.1.3 使用SDS动态管理证书 257
9.2 Istio流量管理相关运维 258
9.2.1 路由规则对应用程序不生效 258
9.2.2 Sidecar是否注入 258
9.2.3 Istio配置参数优化 259
9.2.4 Envoy 无法连接 HTTP1.0 260
9.2.5 检查Envoy与Pilot状态差异 260
9.3 Istio组件升级与回滚 261
9.3.1 升级安装文件 261
9.3.2 CRD升级 262
9.3.3 控制平面升级 262
9.3.4 数据平面Sidecar升级 263
9.3.5 升级中的影响分析 264
9.4 本章总结 267
第10章 Istio定制与扩展 268
10.1 Mixer适配器扩展 268
10.2 实现适配器 270
10.3 编译与打包适配器 283
10.4 Istio CNI插件 287
10.4.1 安装配置Istio CNI插件 288
10.4.2 运行机制 289
10.4.3 验证CNI插件链配置 292
10.4.4 验证iptables是否已修改 293
10.5 从Kubernetes扩展到虚拟机 294
10.5.1 网格扩展 294
10.5.2 生成Istio的配置cluster.env 297
10.5.3 生成DNS配置文件kubedns 297
10.5.4 获取Istio服务账户密钥 298
10.5.5 在虚拟机上进行配置 298
10.5.6 部署应用示例到网格扩展 300
10.6 扩展Envoy过滤器 307
10.6.1 定义Envoy过滤器 307
10.6.2 部署示例应用 310
10.7 集成外部Zipkin兼容服务 312
10.7.1 集成部署 312
10.7.2 使用原生Zipkin 314
10.7.3 使用Zipkin兼容服务 315
10.8 本章总结 316
第11章 Knative:基于Istio的无服务器计算 317
11.1 Knative架构解析 317
11.1.1 Knative > Kubernetes + Istio 318
11.1.2 Knative的设计 319
11.1.3 安装Knative 320
11.2 Knative Build运行机制 321
11.2.1 Knative Build资源定义 322
11.2.2 创建Knative Build示例 322
11.2.3 验证使用Knative Build构建的镜像 326
11.3 Knative Eventing运行机制 327
11.3.1 架构设计 327
11.3.2 创建Knative Eventing示例 329
11.3.3 验证事件 331
11.4 基于Istio实现Serving组件 331
11.4.1 Knative Serving的设计 331
11.4.2 基于Serving实现source-to-
URL部署 333
11.5 在Istio上部署配置Knative 336
11.6 基于Knative Serving的自动伸缩 337
11.6.1 路由与自动伸缩 338
11.6.2 自动伸缩机制 340
11.6.3 自动伸缩算法 341
11.6.4 基于Serving实现自动伸缩示例 343
11.6.5 使用蓝绿部署路由和管理流量 345
11.7 本章总结 348
第12章 多集群管理 349
12.1 服务网格的未来 350
12.2 多集群部署管理 351
12.3 单控制平面VPN连接拓扑 351
12.3.1 前提约束 352
12.3.2 拓扑架构 352
12.3.3 启用双向TLS通信 354
12.3.4 部署本地控制平面 354
12.3.5 安装istio-remote 356
12.3.6 部署示例应用 359
12.4 单控制平面Gateway连接拓扑 361
12.4.1 集群感知的服务路由 361
12.4.2 Istio控制平面组件 362
12.4.3 istio-remote组件 363
12.4.4 部署示例应用 365
12.5 多控制平面 366
12.5.1 部署控制平面 366
12.5.2 设置DNS 368
12.5.3 部署示例应用 369
12.5.4 跨集群的版本路由 371
12.6 本章总结 374
· · · · · · (
收起)