跳转至

Istio最佳实战-克里斯汀·波斯塔 里诺·马洛库

  •  Istio最佳实战|200
  • 书名: Istio最佳实战
  • 作者: 克里斯汀·波斯塔 里诺·马洛库
  • 简介: Istio作为服务网格技术最具代表性的产品,历经多年发展已日渐成熟,并受到越来越多开发者的青睐。本书以 Istio 服务网格为核心,内容包括基本概念、核心功能、运维、企业级落地四大部分,从基本的安装部署到功能实践,从底层原理分析到故障排查,从进阶操作到企业级实战,由浅入深地介绍了 Istio 服务网格的各个方面。本书适合正在使用或关注 Istio 的开发工程师、运维工程师、架构师等云原生领域从业者阅读。无论你是服务网格技术的初学者,还是该领域的专家,都能从本书中寻找到有借鉴意义的理论及实践指导。
  • 出版时间 2023-07-01 00:00:00
  • ISBN: 9787121457395
  • 分类: 计算机-理论知识
  • 出版社: 电子工业出版社

高亮划线

封面

版权信息

内容简介

文前

译者序

序言

前言

致谢

关于本书

关于作者

关于封面插图

第1部分 理解Istio

1 Istio服务网格

  • 📌 它描述了一个由数据平面和控制平面组成的架构,数据平面使用应用层代理来管理网络流量,控制平面用于管理代理。 ^13-1398-1450

    • ⏱ 2023-11-07 07:55:42
  • 📌 Istio的数据平面由基于Envoy的服务代理组成,这些服务代理与应用程序共存。它们作为应用程序之间的中介,并根据控制平面发送的配置影响网络行为。 ^13-1698-1771

    • ⏱ 2023-11-07 07:56:33

1.1 快速迭代带来的挑战

1.1.1 不可靠的云基础设施

1.1.2 服务通信需要弹性

1.1.3 实时可观测性

1.2 使用应用程序库解决问题

1.3 基础设施的解决思路

1.3.1 应用程序感知服务代理

1.3.2 认识Envoy代理

1.4 什么是服务网格

1.5 Istio服务网格简介

  • 📌 Istio的数据平面使用Envoy代理配置应用程序,该代理被部署在应用程序旁边。Istio的控制平面由几个组件组成——这些组件为最终用户/运维人员提供API、代理的配置API、安全设置、策略声明等。 ^23-609-708
    • ⏱ 2023-11-07 08:23:06

1.5.1 服务网格与企业服务总线的关系

1.5.2 服务网格与API网关的关系

1.5.3 在非微服务架构中使用Istio

1.5.4 在分布式架构中使用Istio

1.5.5 使用服务网格的缺点

本章小结

2 Istio的第一步

2.1 在Kubernetes上部署Istio

2.1.1 使用Docker Desktop来演示样例

2.1.2 获取Istio发行版

2.1.3 将Istio组件安装到Kubernetes中

2.2 了解Istio控制平面

2.2.1 istiod简介

2.2.2 入口网关和出口网关

2.3 在服务网格中部署你的第一个应用程序

2.4 Istio的可观测性、弹性和流量路由

2.4.1 Istio与可观测性

2.4.2 Istio与弹性

2.4.3 Istio与流量路由

本章小结

3 Istio的数据平面:Envoy

3.1 什么是Envoy代理

3.1.1 Envoy的核心功能

3.1.2 Envoy与其他代理的比较

3.2 配置Envoy

3.2.1 静态配置

3.2.2 动态配置

3.3 Envoy实战

3.3.1 Envoy的Admin API

3.3.2 Envoy的请求重试

3.4 Envoy与Istio的融合

本章小结

第2部分 保护、观察和控制服务网格中的流量

4 Istio网关:将流量导入集群

4.1 流量入口概念

4.1.1 虚拟IP地址:简化服务访问

4.1.2 虚拟主机:来自单个接入点的多个服务

  • 📌 我们需要一种方法来决定将特定请求路由到哪个虚拟主机。对于HTTP/1.1,我们可以使用Host头;对于HTTP/2,我们可以使用:authority头;对于TCP连接,我们可以依赖TLS的服务器名称指示(SNI)。 ^60-1045-1152
    • ⏱ 2023-11-09 07:56:15

4.2 Istio入口网关

4.2.1 声明Gateway资源

4.2.2 虚拟服务的网关路由

4.2.3 流量整体视图

4.2.4 对比Istio入口网关与Kubernetes Ingress

  • 📌 当在Kubernetes上运行应用时,你可能会问,“为什么Istio不直接使用Kubernetes Ingress v1资源来指定入口?”Istio确实支持Kubernetes Ingress v1资源,但是Kubernetes Ingress v1规范有很多的限制。首先,Kubernetes Ingress v1是一个非常简单的针对HTTP工作负载的规范。有Kubernetes Ingress的实现(如Nginx和Traefik);但是,它们都面向HTTP通信。事实上,Ingress规范只将80端口和443端口视为入口点。这严重限制了集群运营者允许进入服务网格的流量类型。例如,如果有Kafka或NATS.io工作负载,你可能希望向这些消息传递系统公开TCP连接,但Kubernetes Ingress不允许这样做。 ^65-479-870

    • ⏱ 2023-11-09 12:47:10
  • 📌 其次,Kubernetes Ingress v1资源没有被指定。没有通用的方法来指定复杂的流量路由规则、流量分割或类似于流量跟踪的方法。这方面缺乏规范,导致每个供应商都要重新思考如何最好地实现每种Ingress(HAProxy、Nginx等)的配置。最后,由于没有详细说明,大多数供应商都选择通过Deployment上的定制注解公开配置。供应商之间的注解各不相同,而且不可移植,如果Istio继续这一趋势,将会有更多的注解用来解释Envoy作为边缘网关的所有能力。最终,Istio决定重新构建入口网关,并将第4层(传输层)和第5层(会话层)的属性从第7层(应用层)路由关注点中分离出来。Istio的Gateway处理第4层和第5层的问题,而VirtualService处理第7层的问题。许多网格和网关的提供商也都为入口构建了自己的API,而且Kubernetes社区正在开发修订后的Ingress API。 ^65-899-1360

    • ⏱ 2023-11-09 12:47:04

4.2.5 对比Istio入口网关与API网关

4.3 保护网关流量

4.3.1 使用TLS的HTTP流量

4.3.2 将HTTP重定向到HTTPS

4.3.3 使用mTLS的HTTP通信

4.3.4 为多个虚拟主机提供TLS服务

4.4 TCP流量

4.4.1 在Istio网关上暴露TCP端口

4.4.2 使用SNI直通的流量路由

4.5 网关使用建议

4.5.1 拆分网关的职能

4.5.2 网关注入

4.5.3 入口网关访问日志

4.5.4 减少网关配置

本章小结

5 流量控制:细粒度流量路由

5.1 减少部署新代码带来的风险

5.2 Istio的请求路由

5.2.1 清理工作空间

5.2.2 部署catalog服务的v1版本

5.2.3 部署catalog服务的v2版本

5.2.4 将所有流量路由到catalog服务的v1版本

5.2.5 将特定请求路由到v2版本

5.2.6 在调用链路内部进行路由

5.3 流量迁移

5.4 进一步降低风险:流量镜像

5.5 使用Istio的服务发现路由到集群外部的服务

本章小结

6 弹性:应对应用程序的网络挑战

6.1 实现应用程序的弹性

6.1.1 为应用程序库构建弹性能力

6.1.2 使用Istio解决弹性问题

6.1.3 实现去中心化的弹性能力

6.2 客户端负载均衡

6.2.1 开始使用客户端负载均衡

6.2.2 构建应用场景

6.2.3 测试不同的客户端负载均衡策略

6.2.4 理解负载均衡算法的差异

6.3 位置感知负载均衡

6.3.1 位置感知负载均衡实验

6.3.2 利用加权分布对位置感知负载均衡进行更多的控制

6.4 透明的超时和重试

6.4.1 超时

6.4.2 重试

6.4.3 高级重试

6.5 Istio中的熔断

6.5.1 利用连接池设置防止服务过慢

6.5.2 利用异常点检测剔除不健康的服务

本章小结

7 可观测性:理解服务的行为

7.1 什么是可观测性

7.1.1 可观测性与监控

7.1.2 Istio如何帮助实现可观测性

7.2 探索Istio的指标

7.2.1 数据平面指标

7.2.2 控制平面指标

7.3 使用Prometheus抓取Istio指标

7.3.1 安装Prometheus和Grafana

7.3.2 配置Prometheus Operator抓取Istio控制平面和工作负载的指标

7.4 自定义Istio标准指标

7.4.1 配置现有的指标

7.4.2 创建新指标

7.4.3 使用新属性分组调用

本章小结

8 可观测性:使用Grafana、Jaeger和Kiali观察网络行为

8.1 使用Grafana观察Istio服务和控制平面指标

8.1.1 安装Istio的Grafana仪表板

8.1.2 查看控制平面指标

8.1.3 查看数据平面指标

8.2 分布式追踪

8.2.1 分布式追踪是怎么工作的

8.2.2 安装分布式追踪系统

8.2.3 配置Istio实现分布式追踪

8.2.4 查看分布式追踪数据

8.2.5 追踪采样、强制追踪和自定义标签

8.3 使用Kiali观察服务网格

8.3.1 安装Kiali

8.3.2 结论

本章小结

9 确保微服务通信安全

9.1 应用程序网络安全需求

9.1.1 服务间认证

9.1.2 终端用户认证

9.1.3 授权

9.1.4 单体和微服务应用的安全比较

9.1.5 Istio如何实现SPIFFE

9.1.6 Istio安全简述

9.2 自动mTLS

9.2.1 安装环境

9.2.2 理解Istio的对等认证

9.3 授权服务间流量

9.3.1 了解Istio中的授权

9.3.2 设置工作区

9.3.3 当策略被应用于工作负载时行为的变化

9.3.4 默认使用一个全局策略拒绝所有请求

9.3.5 允许来自单一命名空间的请求

9.3.6 允许来自非认证的工作负载的请求

9.3.7 允许来自单一服务账户的请求

9.3.8 策略的条件匹配

9.3.9 了解值匹配表达式

9.3.10 了解评估授权策略的顺序

9.4 终端用户的认证和授权

9.4.1 什么是JWT

9.4.2 入口网关的终端用户认证和授权

9.4.3 使用RequestAuthentication验证JWT

9.5 与自定义的外部授权服务集成

9.5.1 外部授权实践

9.5.2 配置ExtAuthz

9.5.3 使用自定义的AuthorizationPolicy资源

本章小结

第3部分 Istio运维

10 数据平面的故障排查

10.1 最常见错误:数据平面配置错误

10.2 识别数据平面的问题

10.2.1 如何验证数据平面是最新的

10.2.2 使用Kiali发现配置错误

10.2.3 通过istioctl发现配置错误

10.3 从Envoy配置中发现错误

10.3.1 Envoy管理界面

10.3.2 使用istioctl查询代理配置

10.3.3 应用程序的故障排查

10.3.4 使用ksniff检查网络流量

10.4 通过Envoy的遥测能力了解应用程序

10.4.1 在Grafana中查看请求失败率

10.4.2 使用Prometheus查询受影响的Pod

本章小结

11 控制平面性能优化

11.1 控制平面的主要目标

11.1.1 了解数据平面同步的步骤

11.1.2 决定性能的因素

11.2 监控控制平面

11.3 性能调整

11.3.1 设置工作区

11.3.2 测量优化前的性能

11.3.3 忽略事件:使用发现选择器缩小发现的范围

11.3.4 事件批处理和推送节流特性

11.4 性能优化准则

本章小结

第4部分 在组织中落地Istio

12 在组织中扩展Istio

12.1 多集群服务网格的好处

12.2 多集群服务网格概述

12.2.1 Istio多集群部署模型

12.2.2 在多集群部署中如何发现工作负载

12.2.3 跨集群的工作负载连接

12.2.4 集群间互信

12.3 多集群、多网络、多控制平面的服务网格

12.3.1 选择多集群部署模型

12.3.2 建立云基础设施

12.3.3 配置插件式CA证书

12.3.4 在每个集群中安装控制平面

12.3.5 启用跨集群的工作负载发现

12.3.6 设置跨集群连接

12.3.7 跨集群的负载均衡

本章小结

13 将虚拟机工作负载纳入网格

13.1 Istio的虚拟机支持

13.1.1 简化虚拟机中sidecar代理的安装与配置

13.1.2 虚拟机的高可用性

13.1.3 网格内服务的DNS解析

13.2 设置基础设施

13.2.1 设置服务网格

13.2.2 配置虚拟机

13.3 将网格扩展到虚拟机

13.3.1 向虚拟机暴露istiod和集群服务

13.3.2 使用WorkloadGroup表示一个工作负载组

13.3.3 在虚拟机中安装与配置istio-agent

13.3.4 将流量路由到集群服务

13.3.5 将流量路由到WorkloadEntry

13.3.6 虚拟机是由控制平面配置的:强制执行双向认证

13.4 揭开DNS代理的神秘面纱

13.4.1 DNS代理如何解析集群内主机名

13.4.2 DNS代理知道哪些主机名

13.5 自定义代理的行为

13.6 将WorkloadEntry从网格中删除

本章小结

14 在请求路径上扩展Istio

14.1 Envoy的扩展能力

14.1.1 了解Envoy的过滤器链

14.1.2 用于扩展的过滤器

14.1.3 定制Istio的数据平面

14.2 使用EnvoyFilter资源配置Envoy过滤器

14.3 调用外部的限流请求

14.4 使用Lua扩展Istio的数据平面

14.5 使用WebAssembly扩展Istio的数据平面

14.5.1 WebAssembly简介

14.5.2 为什么使用WebAssembly

14.5.3 使用WebAssembly构建新的Envoy过滤器

14.5.4 使用meshctl工具构建新的Envoy过滤器

14.5.5 部署新的WebAssembly Envoy过滤器

本章小结

A 自定义Istio安装

A.1 IstioOperator API

A.2 Istio安装配置文件

A.3 使用istioctl安装和定制Istio

A.4 使用istio-operator安装和定制Istio

A.4.1 安装istio-operator

A.4.2 更新网格安装

B Istio的sidecar及其注入选项

B.1 sidecar注入

B.1.1 手动sidecar注入

B.1.2 自动sidecar注入

B.2 istio-init的安全问题

C Istio安全——SPIFFE

C.1.1 通过TLS和终端用户认证进行流量加密

C.2 SPIFFE:适用于任何人的安全生产环境身份框架

C.2.1 SPIFFE ID:工作负载身份

C.2.2 工作负载API

C.2.3 工作负载端点

C.2.4 SPIFFE可验证的身份文件

C.2.5 Istio如何实现SPIFFE

C.2.6 引导工作负载身份的步骤

C.3 了解请求身份

C.3.1 RequestAuthentication资源收集的元数据

C.3.2 请求流程概述

D Istio故障排查

D.1 Istio代理暴露的信息

D.1.1 自检和排除Istio代理故障的端点

D.1.2 通过Istio代理查询Istio Pilot的调试端点

D.2 Istio Pilot暴露的信息

D.2.1 Istio Pilot的调试端点

D.2.2 ControlZ界面

E 如何配置虚拟机接入网格

读书笔记

本书评论