元数据

深入理解Istio:云原生服务网格进阶实战

  •  深入理解Istio:云原生服务网格进阶实战|200
  • 书名: 深入理解Istio:云原生服务网格进阶实战
  • 作者: 云原生社区
  • 简介: 本书是云原生社区多位服务网格技术专家的鼎力之作。全书共 10 章,内容涉及Service Mesh概述、核心功能、架构解析、安装与部署、流量控制、可观察性、安全、进阶实战、故障排查、Service Mesh生态,分别从概念、实践和生态扩展3 个层面为读者系统介绍了 Istio 的相关知识,着重介绍了 Istio 在 1.5 版本以后的重大变化,从底层深入剖析了 Istio 的各项核心功能。 本书能为云计算领域的从业者,尤其是微服务领域的开发者在落地 Istio 时提供理论指导和实际借鉴。
  • 出版时间 2022-06-01 00:00:00
  • ISBN: 9787121435270
  • 分类: 计算机-计算机综合
  • 出版社: 电子工业出版社

高亮划线

推荐序

  • 📌 容器、编排和服务网格,是云原生发展的3个里程碑。 ^3300020615-6-551-575
    • ⏱ 2022-08-06 09:49:22

第1章 Service Mesh概述

  • 📌 •本质:基础设施层。•功能:请求分发。•部署形式:网络代理。•特点:透明。 ^3300020615-9-2474-2598

    • ⏱ 2022-08-06 10:15:55
  • 📌 它不是一个“服务”的网格,而是一个“代理”的网格,服务可以插入这个“代理”的网格中 ^3300020615-9-2974-3015

    • ⏱ 2022-08-06 10:18:21
  • 📌 在典型的服务网格中,这些代理作为一个Sidecar(边车)被注入每个服务部署中。服务不直接通过网络调用服务,而是调用它们本地的Sidecar代理,而Sidecar代理又代表了服务管理请求,从而封装了服务间通信的复杂性。相互连接的Sidecar代理实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)形成对比。 ^3300020615-9-3025-3190

    • ⏱ 2022-08-06 10:19:14
  • 📌 Service Mesh是一个专门处理服务通信的基础设施层。 ^3300020615-9-2302-2332

    • ⏱ 2022-08-06 10:20:05
  • 📌 微服务治理与业务逻辑的解耦。 ^3300020615-9-3845-3859

    • ⏱ 2022-08-06 10:29:08
  • 📌 可观察性 ^3300020615-9-4508-4512

    • ⏱ 2022-08-06 10:36:25
  • 📌 流量控制 ^3300020615-9-4801-4805

    • ⏱ 2022-08-06 10:37:24
  • 📌 安全 ^3300020615-9-5075-5077

    • ⏱ 2022-08-06 10:38:55
  • 📌 Kubernetes的本质是应用的生命周期管理,具体来说,就是应用的部署和管理(扩缩容、自动恢复、发布)。 ^3300020615-9-6867-6920

    • ⏱ 2022-08-06 10:45:02
  • 📌 服务网格的基础是透明代理,先通过Sidecar 代理拦截到微服务间流量,再通过控制平面配置管理微服务的行为。 ^3300020615-9-7013-7067

    • ⏱ 2022-08-06 10:47:09
  • 📌 xDS定义了服务网格配置的协议标准。 ^3300020615-9-7214-7232

    • ⏱ 2022-08-06 10:50:43
  • 📌 Envoy对服务网格或云原生而言最大的贡献就是定义了xDS。Envoy本质上是一个网络代理,是通过API配置的现代版代理 ^3300020615-9-6602-6662

    • ⏱ 2022-08-06 10:51:45
  • 📌 Kubernetes集群的每个节点都部署了一个kube-proxy组件,该组件会先与Kubernetes API Server通信,获取集群中的service信息,再设置iptables规则,直接将对某个service的请求发送到对应的Endpoint(属于同一组service的Pod)上。 ^3300020615-9-7575-7721

    • ⏱ 2022-08-06 16:53:44
  • 📌 Istio Gateway的功能与Kubernetes Ingress的功能类似,都是负责管理集群的南北向流量。Istio Gateway可被看作网络的负载均衡器,用于承载进出网格边缘的连接。 ^3300020615-9-10562-10658

    • ⏱ 2022-08-06 17:49:48
  • 📌 概括地讲,这些发现服务及其相应的API被称作xDS。 ^3300020615-9-12047-12073

    • ⏱ 2022-08-06 20:44:17
  • 📌 Envoy是Istio服务网格中默认的Sidecar ^3300020615-9-13243-13269

    • ⏱ 2022-08-06 20:48:38
  • 📌 Envoy中的基本术语 ^3300020615-9-13347-13358

    • ⏱ 2022-08-06 20:53:42
  • 📌 Downstream(下游):下游主机连接到Envoy,发送请求并接收响应,即发送请求的主机。 ^3300020615-9-13397-13444

    • ⏱ 2022-08-06 20:55:24
  • 📌 Upstream(上游):上游主机接收来自Envoy的连接和请求,并返回响应,即接收请求的主机。 ^3300020615-9-13474-13522

    • ⏱ 2022-08-06 20:55:31
  • 📌 Listener(监听器):监听器是命名网地址(例如,端口、UNIX Domain Socket等),下游客户端可以连接这些监听器。 ^3300020615-9-13552-13618

    • ⏱ 2022-08-06 20:55:35
  • 📌 Cluster(集群):集群是指Envoy连接的一组逻辑相同的上游主机。Envoy通过服务发现来发现集群的成员,并且可以通过主动健康检查确定集群成员的健康状态。Envoy通过负载均衡策略决定将请求路由到集群的哪个成员。 ^3300020615-9-13671-13780

    • ⏱ 2022-08-06 20:56:21
  • 📌 目前Istio提供了以下4个重要的功能。•为HTTP、gRPC、WebSocket和TCP流量自动负载均衡。•通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。•提供完善的可观察性方面的功能,包括对所有网格控制下的流量进行自动化度量、日志记录和追踪。•提供身份认证和授权策略,在集群中实现安全的服务间通信。 ^3300020615-9-16070-16349

    • ⏱ 2022-08-06 21:22:07

第2章 核心功能

  • 📌 假设不借助任何现成的第三方框架,一个最简单的实现方式就是在服务间添加一个负载均衡(如Nginx)做代理,通过修改配置的权重来分配流量。 ^3300020615-10-747-814

    • ⏱ 2022-08-07 10:39:38
  • 📌 Istio的流量控制功能主要分为3个方面:•请求路由和流量转移。•弹性功能,包括熔断、超时和重试。•调试能力,包括故障注入和流量镜像。 ^3300020615-10-988-1142

    • ⏱ 2022-08-07 10:42:37
  • 📌 在系统的入口和出口处部署Sidecar代理,让所有流入和流出的流量都由代理进行转发。 ^3300020615-10-1982-2024

    • ⏱ 2022-08-07 10:47:31
  • 📌 超时就是设置一个等待时间,只要上游服务的响应时间超过这个时间上限,就不再等待,直接返回,这就是所谓的快速失败。 ^3300020615-10-2890-2945

    • ⏱ 2022-08-07 10:49:19
  • 📌 重试一般是用来解决在网络抖动时通信失败的问题。 ^3300020615-10-2968-2991

    • ⏱ 2022-08-07 10:49:43
  • 📌 熔断 ^3300020615-10-3130-3132

    • ⏱ 2022-08-07 10:51:32
  • 📌 它是一种非常有用的过载保护手段,可以避免服务的级联失败。 ^3300020615-10-3133-3161

    • ⏱ 2022-08-07 10:52:01
  • 📌 熔断一共有3个状态,当上游服务可以正常返回时,熔断开关处于关闭状态;一旦失败的请求数量超过了失败计数器设定的上限,就切换到打开状态,让服务快速失败;熔断还有一个半开状态,设置一个超时时钟,在一定时间后切换到半开状态,让请求尝试访问上游服务,查看服务是否已经恢复正常,如果服务恢复正常就关闭熔断,否则会再次切换为打开状态。 ^3300020615-10-3161-3321

    • ⏱ 2022-08-07 10:52:42
  • 📌 从Istio1.9开始,官方文档里给出了如何使用EnvoyFilter实现限流的例子。Envoy支持两种限流方式:全局(Global)限流和本地(Local)限流。全局限流通过一个全局的gRPC服务为整个网格提供速率限制;而本地限流用于限制每个服务的请求速率。 ^3300020615-10-3471-3601

    • ⏱ 2022-08-07 10:57:43
  • 📌 故障注入就是在系统中人为地设置一些故障,用来测试系统的稳定性和系统恢复的能力。 ^3300020615-10-3897-3936

    • ⏱ 2022-08-07 11:02:46
  • 📌 Istio支持注入两种类型的故障:延迟和中断。延迟是模拟网络延迟或服务过载的情况;中断是模拟上游服务崩溃的情况,通过HTTP的错误码和TCP连接失败来表现。 ^3300020615-10-4054-4132

    • ⏱ 2022-08-07 11:04:43
  • 📌 流量镜像也被称为影子流量,通过复制一份请求并把它发送到镜像服务中,从而实现流量的复制功能。 ^3300020615-10-4264-4309

    • ⏱ 2022-08-07 11:16:37
  • 📌 最主要的就是进行线上问题排查。 ^3300020615-10-4326-4341

    • ⏱ 2022-08-07 11:17:37
  • 📌 Istio提供两种类型的认证。•对等认证(Peer Authentication):用于从服务到服务的认证。这种方式是通过mTLS(mTLS)实现的,即客户端和服务端都要验证彼此的合法性。I ^3300020615-10-6278-6402

    • ⏱ 2022-08-07 11:37:50
  • 📌 请求认证(Request Authentication):也被称为最终用户认证,用于验证终端用户或客户端。Istio将目前业界流行的JWT(JSON Web Token)作为实现方案。 ^3300020615-10-6484-6576

    • ⏱ 2022-08-07 11:38:06
  • 📌 Istio的授权策略可以为网格中的服务提供不同级别的访问控制,比如,网格级别、命名空间级别和工作负载级别。授权策略支持ALLOW和DENY动作 ^3300020615-10-6905-6976

    • ⏱ 2022-08-07 11:44:25
  • 📌 可观察性”,对服务的运行时状态进行监控、上报、分析,以提高服务可靠性。 ^3300020615-10-7443-7478

    • ⏱ 2022-08-07 11:47:26
  • 📌 时间序列数据库(如Prometheus) ^3300020615-10-8178-8198

    • ⏱ 2022-08-07 11:52:31
  • 📌 指标(Metrics):指标本质上是时间序列上的一系列具有特定名称的计数器的组合。不同计数器用于表征系统中的不同状态并将之数值化。 ^3300020615-10-8010-8075

    • ⏱ 2022-08-07 11:54:59
  • 📌 日志(Access Logs) ^3300020615-10-8572-8587

    • ⏱ 2022-08-07 11:57:35
  • 📌 分布式追踪(Distributed Traces) ^3300020615-10-9035-9060

    • ⏱ 2022-08-07 11:57:48
  • 📌 分布式追踪通过额外数据(Span ID等特殊标记)记录不同组件中事件之间的关联,并由外部数据分析系统重新构造出事件的完整事件链路及因果关系。 ^3300020615-10-9252-9322

    • ⏱ 2022-08-07 11:58:23

第3章 架构解析

  • 📌 数据平面,由整个网格内的Sidecar代理组成,这些代理都是以Sidecar的形式和应用服务一起部署的。每一个Sidecar都会接管进入和离开服务的流量,并配合控制平面完成流量控制等方面的功能。 ^3300020615-11-808-905

    • ⏱ 2022-08-07 12:09:44
  • 📌 控制平面 ^3300020615-11-1022-1026

    • ⏱ 2022-08-07 12:10:18
  • 📌 用于控制和管理数据平面中的Sidecar代理,完成配置分发、服务发现、授权鉴权等功能。 ^3300020615-11-1032-1075

    • ⏱ 2022-08-07 12:10:27
  • 📌 在应用从单体架构向微服务架构演进的过程中,微服务之间的服务发现、负载均衡、熔断、限流等服务治理需求是无法回避的问题。 ^3300020615-11-4050-4108

    • ⏱ 2022-08-07 14:12:33
  • 📌 Istio流量管理的核心组件就是Pilot ^3300020615-11-4627-4648

    • ⏱ 2022-08-07 14:14:57
  • 📌 Pilot需要对不同来源的输入数据进行统一格式的存储,即抽象模型。 ^3300020615-11-5288-5321

    • ⏱ 2022-08-07 14:17:04
  • 📌 抽象模型中定义的关键成员包括HostName(service 名称)、Ports(service端口)、Address(service ClusterIP)、Resolution(负载均衡策略)等。 ^3300020615-11-5350-5449

    • ⏱ 2022-08-07 14:17:53
  • 📌 声明式API是Kubernetes项目编排能力“赖以生存”的核心,而配置是声明式API的承载方式。 ^3300020615-11-18389-18467

    • ⏱ 2022-08-07 15:47:55
  • 📌 面向Kubernetes编程近似于面向YAML编程。 ^3300020615-11-18706-18732

    • ⏱ 2022-08-07 15:48:51
  • 📌 将应用程序的功能划分为多个单独的进程,使其运行在同一个最小调度单元中(如Kubernetes中的Pod),这便被视为Sidecar 模式。 ^3300020615-11-25417-25486

    • ⏱ 2022-08-07 16:09:12
  • 📌 在Kubernetes的Pod中,在原有的应用容器旁边注入一个Sidecar容器,这两个容器共享存储、网络等资源,可以广义地将这个包含了Sidecar容器的Pod理解为一台主机,而这两个容器共享主机资源。 ^3300020615-11-26179-26281

    • ⏱ 2022-08-07 16:10:53
  • 📌 Istio中提供了以下两种Sidecar 注入方式。•使用istioctl 手动注入。•基于Kubernetes的突变Webhook入驻控制器自动注入。 ^3300020615-11-26646-26780

    • ⏱ 2022-08-07 16:11:57
  • 📌 传入参数会重新组装成iptables 规则 ^3300020615-11-31392-31413

    • ⏱ 2022-08-07 16:24:16
  • 📌 L3/L4筛选器主要用于处理连接和协议解析 ^3300020615-11-56248-56269

    • ⏱ 2022-08-07 17:50:18
  • 📌 L7筛选器(在绝大多数情况下,L7筛选器都可以等同于HTTP 筛选器)则是作为L4筛选器的子筛选器存在的 ^3300020615-11-56381-56433

    • ⏱ 2022-08-07 17:50:26
  • 📌 Envoy 采用多线程及基于Libevent的事件触发机制来保证其超高的性能。在Envoy中,共存在3种不同的线程,分别是Main 线程、Worker 线程及文件刷新线程。 ^3300020615-11-56571-56657

    • ⏱ 2022-08-07 17:51:39
  • 📌 文件刷新线程负责将Envoy需要持久化的数据写入磁盘。在Envoy中,所有打开的文件(主要是日志文件)都分别对应一个独立的文件刷新线程,用于周期性地把内存缓冲的数据写入磁盘文件中。而Worker 线程在写文件时,实际只是将数据写入内存缓冲区,最终由文件刷新线程落盘。如此可以避免 Worker 线程被磁盘 I/O所阻塞。 ^3300020615-11-57269-57429

    • ⏱ 2022-08-07 17:59:35
  • 📌 简单来说,筛选器就是插件 ^3300020615-11-56134-56146

    • ⏱ 2022-08-07 18:05:41

读书笔记

本书评论