封面
版权信息
序一
序二
序三
前言
初级篇
第1章 服务网格与Istio
1.1 微服务架构的发展与挑战
1.2 使用应用程序库解决这些挑战
1.2.1 特定应用程序库的缺点
1.2.2 将这些问题推向基础设施
1.3 什么是服务网格
1.4 为什么服务网格是必要的
1.5 Istio服务网格
1.5.1 核心功能
1.5.2 为什么要使用Istio
1.5.3 成熟度和支持级别
1.6 本章总结
第2章 快速上手Istio
2.1 在MiniKube上搭建Istio环境
2.1.1 安装启动Minikube
2.1.2 安装部署Helm
2.1.3 安装部署Istio
2.2 在Docker Desktop上搭建Istio环境
2.2.1 安装配置Docker Desktop for Kubernetes
2.2.2 切换Kubernetes
2.2.3 安装部署Helm
2.2.4 安装部署Istio
2.3 使用公有云Istio服务
2.4 在Istio中部署第一个应用程序
2.5 本章总结
第3章 Istio架构剖析
3.1 Istio的整体架构
3.2 剖析Istio控制平面
3.3 剖析Istio数据平面
3.3.1 Envoy代理
3.3.2 Envoy的启动配置
3.3.3 Envoy静态与动态配置
3.3.4 使用Envoy
3.3.5 Envoy请求重试
3.3.6 Envoy的Admin API
3.3.7 Envoy与其他类似代理的比较
3.4 剖析Sidecar自动注入
3.4.1 Kubernetes的Webhook机制
3.4.2 启用Webhook插件
3.4.3 采用Webhook自动注入Istio Sidecar
3.4.4 开启需要自动注入Sidecar的命名空间
3.5 本章总结
中级篇
第4章 东西向流量管理
4.1 流量管理
4.1.1 术语
4.1.2 流量拆分与导向
4.1.3 Istio服务与Kubernetes服务
4.1.4 示例
4.2 实现东西向流量路由
4.2.1 自动Sidecar注入
4.2.2 部署
4.2.3 查看Ingress Gateway的地址
4.2.4 请求路由
4.3 实现流量镜像及对比分析
4.3.1 流量镜像
4.3.2 流量对比
4.3.3 创建用于Istio流量镜像的服务
4.3.4 创建流量镜像的Istio策略
4.3.5 搭建Diffy用于请求流量对比
4.3.6 发送流量进行镜像验证
4.4 通过Istio管理应用的灰度发布
4.4.1 Kubernetes中的灰度发布
4.4.2 使用Istio进行灰度发布
4.4.3 统一的流量路由规则
4.5 本章总结
第5章 南北向流量管理
5.1 Istio网关
5.1.1 Istio网关的工作原理
5.1.2 Istio网关的负载均衡作用
5.1.3 入口网关服务
5.1.4 入口网关部署
5.1.5 网关资源
5.1.6 网关虚拟服务
5.1.7 调试入口网关
5.2 用HTTPS加密网关
5.2.1 为入口网关配置TLS
5.2.2 创建示例服务
5.2.3 定义虚拟服务
5.2.4 通过网关请求示例服务
5.2.5 为多个主机配置TLS入口网关
5.3 基于SNI的TLS路由
5.3.1 定义内部服务nginx
5.3.2 定义内部服务nginx2
5.3.3 部署网关
5.3.4 根据域名进行访问
5.4 服务条目
5.4.1 服务条目基本原理
5.4.2 服务条目的定义参数
5.5 实现出口流量路由的统一管理
5.5.1 出口安全
5.5.2 创建客户端
5.5.3 HTTP流量网关
5.5.4 HTTPS流量网关
5.5.5 出口流量的TLS发起
5.6 实现服务条目的DNS寻址
5.6.1 CoreDNS及其插件工作机制
5.6.2 Kubernetes下的CoreDNS
5.6.3 部署Istio CoreDNS
5.6.4 更改集群CoreDNS配置
5.6.5 创建服务条目验证DNS解析
5.7 本章总结
第6章 流量治理
6.1 使用流量策略
6.1.1 目标规则
6.1.2 流量策略
6.2 设置负载均衡
6.2.1 标准负载均衡算法
6.2.2 会话保持
6.2.3 示例
6.3 熔断
6.3.1 连接池管理
6.3.2 异常检测
6.3.3 创建示例服务
6.3.4 使用fortio触发熔断
6.4 服务重试
6.5 故障注入
6.6 命名空间隔离下的流量管理
6.6.1 Sidecar资源定义
6.6.2 示例
6.7 本章总结
第7章 安全
7.1 Istio安全架构
7.1.1 Istio身份模型
7.1.2 Istio公钥基础设施
7.1.3 Istio证书和密钥轮换机制
7.2 剖析认证机制
7.2.1 认证架构
7.2.2 双向TLS认证
7.2.3 认证策略
7.3 使用认证策略
7.3.1 Istio默认认证策略
7.3.2 认证策略示例
7.3.3 双向认证策略检查
7.4 使用自定义CA证书和密钥
7.4.1 准备证书和密钥
7.4.2 插入证书和密钥
7.4.3 检查新证书
7.5 使用cert-manager管理网关证书
7.5.1 生成签名密钥对
7.5.2 将签名密钥对保存为Secret
7.5.3 部署cert-manager
7.5.4 创建引用Secret的Issuer
7.5.5 获得签名证书
7.5.6 检查证书与密钥
7.5.7 部署自定义网关
7.5.8 定义Kubernetes服务
7.5.9 创建虚拟服务
7.6 剖析授权机制
7.6.1 启用全局授权
7.6.2 Istio授权策略
7.6.3 授权策略示例
7.6.4 诊断授权策略
7.7 本章总结
第8章 Mixer的控制与观测
8.1 Mixer架构设计
8.2 剖析适配器机制
8.2.1 属性及表达式
8.2.2 配置模型
8.2.3 处理程序
8.2.4 示例
8.2.5 规则
8.3 指标数据收集
8.3.1 metric模板
8.3.2 Prometheus适配器的配置
8.3.3 监控指标
8.3.4 配置Istio收集指标
8.3.5 查询Istio指标
8.3.6 可视化Istio指标
8.4 集成日志数据收集
8.4.1 logentry模板
8.4.2 stdio适配器的配置
8.4.3 配置Istio日志
8.4.4 查看日志
8.4.5 安装EFK软件栈
8.4.6 为Fluentd适配器配置Istio资源
8.4.7 通过Kibana查看日志
8.5 启用基于Zipkin或Jaeger的分布式跟踪
8.5.1 Istio跟踪采样率
8.5.2 部署应用示例
8.5.3 启用Zipkin
8.5.4 启用Jaeger
8.6 启用速率限制策略
8.6.1 配额模板
8.6.2 速率限制配置
8.6.3 部署应用示例
8.7 启用黑白名单策略
8.7.1 list适配器及模板
8.7.2 部署应用示例
8.7.3 部署适配器示例
8.7.4 校验白名单策略
8.8 本章总结
高级篇
第9章 Istio稳定性与运维
9.1 Istio功能模块的稳定性与常见问题
9.1.1 可能的请求错误排查
9.1.2 证书有效期管理
9.1.3 使用SDS动态管理证书
9.2 Istio流量管理相关运维
9.2.1 路由规则对应用程序不生效
9.2.2 Sidecar是否注入
9.2.3 Istio配置参数优化
9.2.4 Envoy无法连接HTTP1.0
9.2.5 检查Envoy与Pilot状态差异
9.3 Istio组件升级与回滚
9.3.1 升级安装文件
9.3.2 CRD升级
9.3.3 控制平面升级
9.3.4 数据平面Sidecar升级
9.3.5 升级中的影响分析
9.4 本章总结
第10章 Istio定制与扩展
10.1 Mixer适配器扩展
10.2 实现适配器
10.3 编译与打包适配器
10.4 Istio CNI插件
10.4.1 安装配置Istio CNI插件
10.4.2 运行机制
10.4.3 验证CNI插件链配置
10.4.4 验证iptables是否已修改
10.5 从Kubernetes扩展到虚拟机
10.5.1 网格扩展
10.5.2 生成Istio的配置cluster.env
10.5.3 生成DNS配置文件kubedns
10.5.4 获取Istio服务账户密钥
10.5.5 在虚拟机上进行配置
10.5.6 部署应用示例到网格扩展
10.6 扩展Envoy过滤器
10.6.1 定义Envoy过滤器
10.6.2 部署示例应用
10.7 集成外部Zipkin兼容服务
10.7.1 集成部署
10.7.2 使用原生Zipkin
10.7.3 使用Zipkin兼容服务
10.8 本章总结
第11章 Knative:基于Istio的无服务器计算
11.1 Knative架构解析
11.1.1 Knative>Kubernetes+Istio
11.1.2 Knative的设计
11.1.3 安装Knative
11.2 Knative Build运行机制
11.2.1 Knative Build资源定义
11.2.2 创建Knative Build示例
11.2.3 验证使用Knative Build构建的镜像
11.3 Knative Eventing运行机制
11.3.1 架构设计
11.3.2 创建Knative Eventing示例
11.3.3 验证事件
11.4 基于Istio实现Serving组件
11.4.1 Knative Serving的设计
11.4.2 基于Serving实现source-to-URL部署
11.5 在Istio上部署配置Knative
11.6 基于Knative Serving的自动伸缩
11.6.1 路由与自动伸缩
11.6.2 自动伸缩机制
11.6.3 自动伸缩算法
11.6.4 基于Serving实现自动伸缩示例
11.6.5 使用蓝绿部署路由和管理流量
11.7 本章总结
第12章 多集群管理
12.1 服务网格的未来
12.2 多集群部署管理
12.3 单控制平面VPN连接拓扑
12.3.1 前提约束
12.3.2 拓扑架构
12.3.3 启用双向TLS通信
12.3.4 部署本地控制平面
12.3.5 安装istio-remote
12.3.6 部署示例应用
12.4 单控制平面Gateway连接拓扑
12.4.1 集群感知的服务路由
12.4.2 Istio控制平面组件
12.4.3 istio-remote组件
12.4.4 部署示例应用
12.5 多控制平面
12.5.1 部署控制平面
12.5.2 设置DNS
12.5.3 部署示例应用
12.5.4 跨集群的版本路由
12.6 本章总结