上一篇文章,说到为什么不看好服务网格,核心是没有强大的运维监控以及性能问题,那么lstio的出现让那个我们看到了一线曙光。因为实际生产活动中,各种运营上报、https证书各种对接、各种监控指标采集、流控策略下发,往往十分耗散开发人员的精力,使得我们无法专注于业务开发,为什么说大公司拉通多,就是这么来的。那么我想lstio就是为了来解决这种问题的。据说lstio的代理能力和已经和nginx差不多,不过没经过太多生产实践,还可以观望下。毕竟

服务网格是一个专用的基础设施层,旨在“在微服务架构中实现可靠、快速和安全的服务间调用”。它不是一个“服务”的网格,而是一个“代理”的网格,服务可以插入这个代理,从而使网络抽象化。在典型的服务网格中,这些代理作为一个 sidecar(边车)被注入到每个服务部署中。服务不直接通过网络调用服务,而是调用它们本地的 sidecar 代理,而 sidecar 代理又代表服务管理请求,从而封装了服务间通信的复杂性。相互连接的 sidecar 代理集实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)形成对比。

关于sidecar我们在下一篇文章中来介绍。

总而言之,Service Mesh 的基础设施层主要分为两部分:

  • 控制平面
  • 数据平面

当前流行的两款开源服务网格 Istio 和 Linkerd 实际上都是这种构造;接下来我们通过介绍lstio来进一步了解这种基础设施:

使用Istio实施服务网格

尽管有其他几种服务网格,但最受欢迎的是Istio。我们将使用Istio探索云原生应用程序的Service Mesh架构。

如以上各节所述,在微服务体系结构中, Istio通过形成基础结构层来实现此目的,以连接,保护和控制分布式服务之间的通信。Istio 在每个服务旁边部署一个 Istio代理(称为Istio sidecar),而该服务本身的代码更改几乎很少或没有。所有服务间流量都定向到Istio代理,该代理使用策略控制服务间通信,同时实施部署,故障注入和断路器的基本策略。

Istio的核心能力

  • 流量管理:这是 Istio 的最基本的功能。
  • 策略控制:通过 Mixer 组件和各种适配器来实现,实现访问控制系统、遥测捕获、配额管理和计费等。
  • 可观测性:通过 Mixer 来实现。
  • 安全认证:Citadel 组件做密钥和证书管理

核心Istio组件

从 2017 年 5 月发布以来,Istio 经历了四个重要的版本和由此划分的三个发展阶段。在不到三年的产品迭代过程中,出现了两次重大的架构变动。我们来简要分析一下这个变迁历程。

  • 0.1 版本:2017 年 5 月发布。作为第二代 Service Mesh 的开创者,宣告了 Istio 的诞生,也燃起了网格市场的硝烟与战火。
  • 1.0 版本:发布于 2018 年 7 月,对外宣传生产环境可用。从 0.1 到 1.0 版本,开发时间经历了一年多,但持续的发布了多个 0.x 版本,这一阶段处于快速迭代期。
  • 1.1 版本:发布于 2019 年 3 月,号称企业级可用的版本。一个小的版本号变化居然耗费了半年之久,其主要原因是出现了第一次架构重构,这一阶段算是调整期。
  • 1.5 版本:发布于 2020 年 3 月,再次进行架构的重建,将多组件整合为单体形态的 istiod。从 1.1 到 1.5 版本的一年中,Istio 开始遵循季节性发布,进入了产品的稳定发展期

虽然又变成了单体,但是从职责划分上我们还是可以从组件化去分析:

Istio的控制平面和Envoy的数据平面共同构成了一个引人注目的服务网格实现。两者都拥有蓬勃发展和充满活力的社区,并且面向下一代服务架构。Istio是独立于平台的,可运行于各种环境中,包括跨云、内部部署、Kubernetes、Mesos等。你可以在Kubernetes 上部署Istio或在具有Consul的Nomad上部署。Istio目前支持在Kubernetes上部署的服务、使用Consul注册的服务以及在虚拟机上部署的服务。

控制平面

控制平面部分包括了Pilot、Mixer、Citadel和Galley四个组件

  • Pilot

  Istio的Pilot组件用于管理流量,可以控制服务之间的流量流动和API调用,通过Pilot可以更好地了解流量,以便在问题出现之前发现问题。这使得调用更加可靠、网络更加强健,即使遇到不利条件也能让应用稳如磐石。借助Istio的Pilot,你能够配置熔断器、超时和重试等服务级属性,并设置常见的连续部署任务,如金丝雀发布、A/B测试和基于百分比拆分流量的分阶段发布。Pilot为Envoy代理提供服务发现功能,为智能路由和弹性能力(如超时、重试、熔断器等)提供流量管理功能。Pilot将控制流量行为的高级路由规则转换为特定于Envoy代理的配置,并在运行时将它们传播到Envoy。此外,Istio提供了强大的开箱即用故障恢复功能,包括超时、支持超时预算和变量抖动的重试机制、发往上游服务的并发连接和请求数限制、对负载均衡池中的每个成员进行的定期主动运行状况检查,以及被动运行状况检查。

  Pilot将平台特定的服务发现机制抽象化并将其合成为标准格式,符合数据平面API的任何Sidecar都可以使用这种标准格式。这种松散耦合使得Istio能够在多种环境下运行(例如Kubernetes、Consul、Nomad),同时可保持用于流量管理的操作界面相同。Pilot中的adapter机制可以适配各种服务发现组件(Eureka、Consul、Kubenetes),最好的是Kubernetes

  • Mixer

  Istio的Mixer组件提供策略控制和遥测收集功能,将Istio的其余部分与各个后端基础设施后端的实现细节隔离开来。Mixer是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从Envoy代理和其他服务收集遥测数据。代理提取请求级属性,发送到Mixer进行评估。

  Mixer中包括一个灵活的插件模型,使其能够接入到各种主机环境和后端基础设施,从这些细节中抽象出Envoy代理和Istio管理的服务。利用Mixer,你可以精细控制网格和后端基础设施后端之间的所有交互。

  • Citadel

  Istio Citadel安全功能提供强大的身份验证功能、强大的策略、透明的TLS加密以及用于保护服务和数据的身份验证、授权和审计(AAA)工具,Envoy可以终止或向网格中的服务发起TLS流量。为此,Citadel需要支持创建、签署和轮换证书。Istio Citadel提供特定于应用程序的证书,可用于建立双向TLS以保护服务之间的流量。

控制平面主要是对数据平面组件的管理和维护,因此形成了Istio Service Mesh最重要的层。

  • Galley

Galley用于验证用户编写的Istio API配置。随着时间的推移,Galley将接管Istio获取配置、处理和分配组件的顶级责任。它负责将其他的Istio组件与从底层平台(例如Kubernetes)获取用户配置的细节中隔离开来。

数据平面

摘要 Istio使用Envoy代理作为默认的开箱即用服务代理,这些Envoy代理与参与服务网格的所有应用程序实例一起运行,但不在同一个容器进程中,形成了服务网格的数据平面。只要应用程序想要与其他服务通信,就会通过服务代理Envoy进行。由此可见,Envoy代理是数据平面和整个服务网格架构中的关键组成部分。

Envoy代理

  Envoy最初是由Lyft开发的,用于解决构建分布式系统时出现的一些复杂的网络问题。它于2016年9月作为开源项目提供,一年后加入了云原生计算基金会(CNCF)。Envoy是用C++语言实现的,具有很高的性能,更重要的是,它在高负载运行时也非常稳定和可靠。网络对应用程序来说应该是透明的,当网络和应用程序出现问题时,应该很容易确定问题的根源。正是基于这样的一种设计理念,将Envoy设计为一个面向服务架构的七层代理和通信总线。

  首先,Envoy是一种代理,在网络体系架构中扮演着中介的角色,可以为网络中的流量管理添加额外的功能,包括提供安全性、隐私保护或策略等。在服务间调用的场景中,代理可以为客户端隐藏服务后端的拓扑细节,简化交互的复杂性,并保护后端服务不会过载。例如,后端服务实际上是运行的一组相同实例,每个实例能够处理一定量的负载。

  其次,Envoy中的集群(Cluster)本质上是指Envoy连接到的逻辑上相同的一组上游主机。那么客户端如何知道在与后端服务交互时要使用哪个实例或IP地址?Envoy作为代理起到了路由选择的作用,通过服务发现(SDS,Service Discovery Service),Envoy代理发现集群中的所有成员,然后通过主动健康检查来确定集群成员的健康状态,并根据健康状态,通过负载均衡策略决定将请求路由到哪个集群成员。而在Envoy代理处理跨服务实例的负载均衡过程中,客户端不需要知道实际部署的任何细节。

Istio组件功能及相互协作方式

Istio 的主要组件及其相互关系大致如图所示摘自《云原生服务网格Istio》

找了很多资料,但是偶然发现了社区,开源里面的力量太强大,感恩这个时代:

这本书给你总结的明明白白:

Pilot · Istio Handbook - Istio 服务网格进阶实战 by ServiceMesher(服务网格社区)

更多有用:

Istio:服务发现和Pilot的架构机制_琦彦-CSDN博客_istio服务注册与发现

华为云讲解:2. Istio Pilot 与服务发现_张成基-CSDN博客_istio 服务发现

云原生系列「五」我为啥又看上了serviceMesh?相关推荐

  1. 云原生系列「四」我为啥不看好ServiceMesh?

    前言 今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础.作为架构师,如果你现在还不了 ...

  2. 云原生系列「二」Kubernetes网络详解

    前言 K8s是一个强大的平台,但它的网络比较复杂,涉及很多概念,例如Pod网络,Service网络,Cluster IPs,NodePort,LoadBalancer和Ingress等等,这么多概念足 ...

  3. 云原生系列「三」容器网络

    Docker的网络实现 标准的Docker支持以下4类网络模式. ◎ host模式:使用--net=host指定. ◎ container模式:使用--net=container:NAME_or_ID ...

  4. 云原生系列「0」容器概述

    一.Docker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化. 1. ...

  5. 云原生系列三:K8s应用安全加固技术

    今天叶秋学长带领大家学习云原生系列三:10大K8s应用安全加固技术~ 本文译自 Top 10 Kubernetes Application Security Hardening Techniques[ ...

  6. 谷歌公布云游戏平台「Stadia」 预计2019年上线

    在今天举行的 GDC 演讲上,谷歌正式公布了此前预告已久的全新云游戏平台「Stadia」.谷歌称这是一个不受硬件限制,能够将全世界所有玩家真正聚在一起的,随时随地游玩任何游戏的新服务. 「Stadia ...

  7. 【云原生系列】第三讲:Knative 之 Serving

    目录 序言 1. knative 1.1 发展历程 1.2 特点 2.Serving 2.1 基本介绍 2.2 支持类型 2.3 资源类型 2.3.1 service 2.3.2 Route 2.3. ...

  8. 连续三年上榜!谐云荣获2022「云原生应用优秀案例」、「云原生安全优秀实践」

    2022年6月15日,由中国信息通信研究院.中国通信标准化协会主办的"原生聚力,云数赋能"2022年云原生产业大会在线上召开. 谐云凭借在云原生领域的创新技术和前瞻性实践,斩获多项 ...

  9. 阿里云容器服务入选云原生边缘「领导力企业TOP3」,推动「原生云边」基础设施标准建立

    12 月 17 日,在 2020 GDCC 全球分布式云大会上,阿里云容器服务凭借在边缘云原生基础设施领域的技术实力.落地能力以及商业创新力等方面的领先优势,入选由亚太 CDN 产业联盟评选的边缘计算 ...

最新文章

  1. 这6种最常见分布式事务解决方案!请拿走不谢!
  2. 人工智能的爆点来临,这些金科玉律先得掌握
  3. 关于RMAN几个容易混淆的参数
  4. Python之禅--给编程者的掏心窝子的话
  5. 纯JSP实现简单登录跳转
  6. [转]手游研发数据专业术语科普 游戏热度跟啥有关
  7. SharePoint 2007 Backup Strategies
  8. CTF(Capture The Flag)
  9. axios不发起请求_axios无法发起跨域请求
  10. 个人作业7 第一阶段SCRUM冲刺(七)
  11. Eclipse使用————Working Set工作集
  12. 在linux中的文件中查找_如何在Linux中查找文件
  13. oracle存档模式,Oracle学习系列之如何开启归档模式
  14. 2010十一月份日用百货热销品货源推荐
  15. 酒店产生蜱虫原因及如何处理
  16. 教务系统mysql注入的原理_SQL注入原理及具体步骤
  17. 护士副高需要计算机考试吗,护士晋升副高的条件
  18. HCIE面试真题系列17(郝)
  19. MAMP Pro 6 mac强大的本地服务器环境软件套装
  20. GraphQL是什么,入门了解看这一篇就够了!

热门文章

  1. monotouch Single View Application
  2. php 主页子标题修改,关于有部分用户默认PC主页大标题标签修改无效的答疑.
  3. 大白话系列之java_大白话系列之——Java的面向对象思想
  4. itextsharp php,C#_C#使用iTextSharp设置PDF所有页面背景图功能实例,本文实例讲述了C#使用iTextSharp - phpStudy...
  5. 【数据结构与算法-2】链表
  6. python 中间一列左对齐_Python|fstring我喜欢Python的原因之一
  7. 基于物化视图优化_CVPR2017|基于构造多视图子空间中的潜在表示解决聚类问题
  8. mt4虚拟服务器在哪里看,mt4查看自己服务器地址
  9. 高中考试计算机课程,高中计算机课程的工作总结
  10. 点击延迟_解决移动端浏览器点击延迟300ms的问题——FastClick用法