猜你喜欢
Istio服务网格技术解析与实践

Istio服务网格技术解析与实践

书籍作者:王夕宁 ISBN:9787111644682
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5198
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书系统介绍服务网格技术与Istio的开发实战。全书分为三大篇-共12章。初级篇包括第1~3章-首先介绍Istio和服务网格的基本概念-并快速搭建Istio环境-部署第一个应用程序;然后介绍Istio的整体架构。中级篇包括第4~8章-介绍Istio在东西向、南北向流量方面的路由控制能力-包括流量路由规则、流量镜像等-以及流量治理方面的高级能力-包括流量策略、负载均衡等;还介绍Istio安全方面的能力-以及Istio Mixer的控制与观测能力。高级篇包括第9~12章-介绍Istio的稳定性与运维经验、Istio的定制与扩展、基于Istio的无服务器计算设计等;最后对云原生技术的生态系统进行了介绍和未来展望-并展示了如何实现多云环境下的多集群部署。

作者简介

王夕宁 阿里云高级技术专家-阿里云服务网格产品ASM及Istio on Kubernetes技术负责人-关注Kubernetes、云原生、服务网格等领域。曾在IBM中国开发中心工作-担任过专利技术评审委员会主席-作为架构师和主要开发人员负责或参与了一系列在SOA中间件、云计算、IoT等领域的开发工作-拥有40多项相关领域的国际技术专利。

编辑推荐
适读人群 :1. 云计算开发人员 2. 微服务开发人员

本书由阿里云高级技术专家撰写-详细介绍Istio的基本原理与开发实战-包含大量精选案例和参考代码可以下载-可快速入门Istio开发。

前言

前  言

目前-服务网格是云原生范畴中最热门的话题。随着容器越来越流行-服务拓扑也频繁变动-这就需要更好的网络性能。服务网格能够通过服务发现、路由、负载均衡、心跳检测和支持可观测性-帮助开发人员管理网络流量。服务网格将为无规则的、复杂的容器问题提供规范化的解决方案。

Istio是当前业界服务网格领域中最流行的实现-可帮助开发人员在混合环境中简化运行和操作云原生服务架构的应用。Istio使得开发人员能使用自己喜欢的编程语言构建服务功能-这有效提升了开发人员的生产力-同时免于将解决分布式系统问题的代码糅合到业务代码中。

Istio是一个开源项目-拥有一个充满活力、开放和多元化的社区-它的目标是赋能开发人员和运维人员-使他们在所有环境中都能敏捷地发布和维护微服务-拥有底层网络的完全可见性-且获得一致的控制和安全能力。在本书中-我们将展示如何利用Istio的功能在云原生世界中运行微服务应用。

本书适合零基础初学者-对服务网格感兴趣的人也可以把本书作为一个不错的起点。本书旨在让读者熟悉服务网格的基础概念和理论-了解在现实世界中如何应用服务网格技术。

诚然-如果读者已经对服务网格有所了解-或者在实际工作中已经使用过类似的技术-本书的中、高级篇提到的实际应用中遇到的经验教训也非常有用。

全书分为3大篇:初级篇、中级篇、高级篇。初级篇包括第1~3章-中级篇包括第4~8章-高级篇包括第9~12章。

第1章讨论从单体应用程序向分布式微服务架构进行转型的过程中面临的挑战-引出解决这些问题的一个方法-即服务网格(Service Mesh)技术。阐述Istio作为服务网格技术的代表-如何提供一个完整的解决方案。

第2章重点介绍如何在MiniKube、Docker Desktop上搭建Istio环境-用于个人开发测试。同时介绍基于公有云Kubernetes容器服务-如何搭建用于企业级应用开发及生产运行的Istio环境-以及公有云提供的Istio环境。最后-为读者准备了一个简单示例-以供学习如何在搭建好的Istio环境中部署一个应用程序来体验Istio的功能。

第3章重点介绍Istio的架构-首先从整体架构设计原理出发-一步步详细介绍Istio的控制平面、数据平面以及Envoy在Istio架构下的部署使用-并针对当下的其他服务网格进行对比。

第4章重点介绍Istio的东西向流量治理方法-首先介绍Istio流量管理的基本内容以及如何使用东西向流量管理-接着针对流量路由规则、流量镜像通过示例展开详细介绍-最后介绍如何通过Istio管理应用的灰度发布场景-并详述流量路由规则的定义。

第5章介绍Istio南北向流量管理方法-即将集群外部的客户端连接到集群内运行-以及从集群内访问集群外部的任何服务。首先介绍Istio网关以及服务条目(Service Entry)的概念-然后详细介绍如何加密网关-最后介绍基于CoreDNS插件扩展实现服务条目的DNS寻址。

第6章介绍Istio在流量治理方面的高级功能-包括如何使用流量策略、设置负载均衡-重点介绍Istio提供的混沌工程能力-即如何使用连接池配置和异常检测实现熔断功能-并通过示例介绍服务重试和故障注入的操作方法。最后-讲述了Istio 1.1之后新增的Sidecar命名空间隔离下的流量管理功能。

第7章介绍Istio在安全方面的功能-剖析Citadel的架构设计-介绍如何使用认证策略、双向认证等功能-以及如何提升Istio在生产环境中的安全性。

第8章介绍Istio Mixer的控制与观测功能-首先介绍Mixer的架构设计-然后介绍几个适配器-包括用于指标数据收集的Prometheus适配器、日志数据收集适配器-以及如何启用分布式跟踪、速率限制策略及黑白名单策略等。

第9章围绕Istio的稳定性与运维调试展开。首先-介绍Istio相关组件的功能稳定性、可能的请求错误排查情况-以及如何使用SDS动态管理证书来提升稳定性-接着重点阐述Istio流量管理相关的运维及问题排查-以帮助读者在遇到问题时可以参考调试-最后介绍Istio在运维过程中涉及的组件升级与回滚-以及带来的影响。

第10章介绍如何对Istio进行定制与扩展。首先介绍如何扩展Mixer适配器-通过适配器将Mixer与不同的后端基础设施集成。之后从多个角度阐述Istio的定制与扩展功能-包括Istio CNI插件扩展-从Kubernetes扩展到虚拟机的网格扩展-如何扩展Envoy过滤器以及如何集成外部Zipkin兼容服务。

第11章介绍Knative如何基于Istio实现了无服务器计算能力-并通过示例讲解Knative的使用。

第12章总结分析以Kubernetes与Istio为基础的云原生操作系统给云计算领域带来的影响-以及云原生技术的生态系统与未来发展。同时-介绍了服务网格如何支持多云环境下、多集群混合部署。

本书所有示例代码都放在GitHub上-地址为https://github.com/osswangxining/istio-book-读者可以查看或下载使用。

由于作者水平和时间有限-书中难免会有一些纰漏和错误-欢迎读者及时指正。可以通过电子邮件[email protected]联系到我。

致谢

感谢所有在本书撰写、出版过程中给予过帮助的人。这本书从筹划到出版的整个过程-得到了很多人的支持和帮助。这里要特别感谢机械工业出版社的吴怡编辑-没有她的鼎力相助-就没有本书。同时也要特别感谢我所在的阿里云容器服务团队的负责人易立以及每一位同事-没有他们的支持和智慧-我不可能在有限的时间里把这些经验知识变成一本书籍。本书写作过程中参考了社区和业界众多厂商的资料-恕不一一列举-在此表示衷心感谢!最后要感谢阅读本书的读者-感谢你在阅读本书的过程中“聆听”我的想法!


目录

目  录?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

......

短评

难道你的奶奶当年的你想念想念你想念想念你都能懂你的奶奶都能懂你的奶奶大男大女当你的女想念你想念想念想念你想念想念想念想念想念想念你想念谢谢你想念你想念小

2020-03-26 10:04:41