Istio 什么是服务网格

news2024/11/19 14:28:33

什么是服务网格


服务网格(Service Mesh)这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。随着规模和复杂性的增长,服务网格越来越难以理解和管理。

它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如A/B测试、金丝雀发布、限流、访问控制和端到端认证等。

每一个方框就是一个pod,绿色的部分就是应用代码,蓝色部分就是sidecar。

这样应用之间的服务调用就变成了sidecar和sidecar之间调用的一个网。所谓的mesh就是sidecar的这种网络调用使得整个平台变成了一个网状结构。

服务网格有多样的能力,服务发现,负载均衡,故障恢复等等。

 

 

为什么要使用Istio?


  • HTTP、gRPC、WebSocket和TCP流量的自动负载均衡。(像基于内核能力的负载均衡,它是工作在四层的,我们只能通过五元组去做负载均衡。有些协议grpc协议,它是基于长连接的服务,一个客户端要访问后端服务,这个协议是基于http2的,http2是连接复用的协议,客户端和服务器发起了一个连接,这个连接就不会断掉,后面的连接会基于之前的tcp连接继续去发。基于这种场景,客户端和服务端产生了一个连接,这个连接就会一直保持,如果后端服务器有3个,基于hhtp2,客户端发起请求,一旦和和后端的服务器建立好了连接,它就再也不断了,然后所有的请求都会被发送到后端服务器去。这样很难做到负载均衡,这样永远都有两个空闲的,一个在处理请求,所以这样的话基于内核的这种tcp协议的负载均衡无法满足这种诉求,所以有了istio,istio是一个应用软件,它里面可以跑grpc协议,它可以先将grpc协议接下来然后再去做负载均衡,所以对于高级应用协议的负载均衡可以通过istio去做了
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。(有了应用的能力,istio是控制面。反向代理软件envoy,sidecar里面跑的进程叫做envoy,envoy本身是应用进程,应用进程就可以有很多的高级能力和故障处理的能力,因为加任何的能力不需要修改内核而是修改应用代码就行了,所以它就可以进行很多的细流量的控制)
  • 可插入的策略层和配置API,支持访问控制、速率限制和配额。(envoy是可以提供灵活的插件的,访问控制和速率的配置,这样就可以提供插件化去做灵活的扩展)
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。(这些都可以通过envoy去做统一汇报,基于服务网格可以去做安全保障,包括认证和鉴权)
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

Istio功能概览


 在说服务网格的时候,它不仅仅是在谈服务网格自身,要去做高级的流量管理不仅仅是集群内部的,还要涉及到外面的客户端的流量如何进来。

它就是涉及到了ingress流量,外面的流量进来之后,集群内部的微服务跳转,就是服务和服务之间的调用,还涉及到内部的服务调用外部的服务可以通过统一的对外代理出去访问,这个叫做egress gateway。

虽然说他是服务网格,但是它解决的是入栈的流量,服务网格的流量,和出栈流量的统一管控。

这样就将所有流量的管控都统一起来了。

k8之前提供ingress对象来帮你做入栈流量管理,但是ingress有许许多多的限制,这些限制基于istio都能够帮你实现,所以你即使做入栈流量的接入,只做这一点也能够完全满足你的诉求。

istio是一个集成了入栈流量,mesh流量,出栈流量统一管控的一个组合。

 

流量管理


istio基于简单的配置就可以做精细化的流量管理。基于精细化的流量管理可以去做A/B测试,金丝雀部署等等这些支持业务场景。

连接

·通过简单的规则配置和流量路由,可以控制服务之间的流量和API调用。Istio简化了断路器、超时和重试等服务级别属性的配置,并且可以轻松设置A/B测试、金丝雀部署和基于百分比的流量分割的分阶段部署等重要任务。

 

控制

·通过更好地了解流量和开箱即用的故障恢复功能,可以在问题出现之前先发现问题,使调用更可靠,并且使您的网络更加强大——无论您面临什么条件。

可以真实的了解流量的走向,一些开箱即用的故障恢复来帮你管控流量。

 

安全


现在的架构不应该只在集群的边界去做加固,而是你要去做假设整个集群都是不安全的,所以任何应用提供服务的时候都需要去做安全加固,认证鉴权加密传输。istio就天然有这种能力,它允许去做协议的升级,允许基于tls协议去做身份验证,去做鉴权。

·使开发人员可以专注于应用程序级别的安全性。Istio提供底层安全通信信道,并大规模管理服务通信的认证、授权和加密。使用Istio,服务通信在默认情况下是安全的,它允许跨多种协议和运行时一致地实施策略——所有这些都很少或根本不需要应用程序更改。

●虽然Istio与平台无关,但将其与Kubernetes(或基础架构)网络策略结合使用,其优势会更大,包括在网络和应用层保护Pod间或服务间通信的能力。

可观察性


Istio生成以下类型的遥测数据,以提供对整个服务网格的可观察性:

  • 指标:Istio基于4个监控的黄金标识(延迟、流量、错误、饱和)生成了一系列服务指标。Istio还为网格控制平面提供了更详细的指标。除此以外还提供了一组默认的基于这些指标的网格监控仪表板。
  • 分布式追踪:Istio为每个服务生成分布式追踪span,运维人员可以理解网格内服务的依赖和调用流程。
  • 访问日志:当流量流入网格中的服务时,Istio可以生成每个请求的完整记录,包括源和目标的元数据。此信息使运维人员能够将服务行为的审查控制到单个工作负载实例的级别。

所有这些功能可以更有效地设置、监控和实施服务上的SLO,快速有效地检测和修复问题。

入栈流量,出栈流量,mesh流量都经过sidecar,所有的sidecar都知道整个集群的网络流量是怎么走的,包括延迟错误码,源目标端口 ip这些信息都能够拿到,这样就可以很清晰的抓到当前集群之间服务不同之间的调用关系,流量调用的健康状况,错误码的分布情况,就有一个非常清晰的视图能够看到整个集群的健康状态。

Istio架构演进


数据平面

  • 由一组以Sidecar方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及Mixer之间所有的网络通信。(istio本身的数据面是反向代理软件叫做envoy)

控制平面

  • 负责管理和配置代理来路由流量。此外控制平面配置Mixer以实施策略和收集遥测数据。(istio往往由数据面和控制平面的一个组合,envoy是数据面,istio是数据面)

架构演进

  • 从微服务回归单体(istio本身的架构做过重大的调整,这个调整是由分布式架构变回了一个单体架构,早期的istio会将功能划分为三个大的模块,第一个就是流量治理模块,由piolt模块去完成的。第二个模块是由telemetry和policy就是策略管控和状态监控,这两个能力,这两个能力是放在muxer里面。最后一个就是和安全相关的封装在citadel里面,早期部署的时候istio里面就有很多的组件,除了这些组件还要其他的一些pod,整个应用拉起来就有十来个pod,每个组件都有单一的职责,这些组件在逻辑上依赖也不是这么强,各司其职是一个完美的架构,这个架构在后期遇到了一些状况,比如要去做版本的变更,这个就要考虑先升级谁后升级谁,出现了问题还要去排错,这个问题可能出现在pliot mixer citadel里面,这个排错会变得相当的困难。随着这个架构体系往后面走就遇到了一些卡点,在升级的时候很难去做无损升级,在排查的时候有很多的困难。虽然将这些组件分离开来了,但是我们后续发现后续这些组件的生命周期好像是一样的,其实就是有点设计过度,是不是应该将最后的各个功能整合在一起,所以就有了重大的架构变化)

在控制面,将所有的能力,流量管控,安全等等这些能力都放到istiod里面去了,mixer组件是没有了。

入栈的流量进入到proxy里面来,在proxy进入到集群里面来,很多时候是提供gateway网关,网关也是一个envoy的proxy,这个流量进入到集群里面就在proxy里面去跳转。proxy会去将流量劫持掉,然后再发给应用,应用和应用之间的调用都是通过proxy去走的mesh traffic。

 

设计目标


 最大化透明度

  • Istio将自身自动注入到服务间所有的网络路径中,运维和开发人员只需付出很少的代价就可以从中受益。
  • Istio使用Sidecar代理来捕获流量,并且在尽可能的地方自动编程网络层,以路由流量通过这些代理,而无需对已部署的应用程序代码进行任何改动。
  • 在Kubernetes中,代理被注入到Pod中,通过编写iptables规则来捕获流量。注入Sidecar代理到Pod中并且修改路由规则后,Istio就能够调解所有流量。
  • 所有组件和API在设计时都必须考虑性能和规模。

增量

  • 预计最大的需求是扩展策略系统,集成其他策略和控制来源,并将网格行为信号传播到其他系统进行分析。策略运行时支持标准扩展机制以便插入到其他服务中。(比如endpoint状态怎么样以增量的形式推到envoy里面,比如一个pod发生了变化,很多envoy的配置都需要刷新,每次刷新全量的时候是扛不住的,网络流量占用的带宽也太大了,所以需要去计算质量和只发增量)

可移植性

  • 将基于lstio的服务移植到新环境应该是轻而易举的,而使用Istio将一个服务同时部署到多个环境中也是可行的(例如,在多个云上进行冗余部署)。

策略一致性

  • 在服务间的API调用中,策略的应用使得可以对网格间行为进行全面的控制,但对于无需在API级别表达的资源来说,对资源应用策略也同样重要。
  • 因此,策略系统作为独特的服务来维护,具有自己的API,而不是将其放到代理/sidecar中,这容许服务根据需要直接与其集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高压功率放大器在超声波探测器中的应用

超声波探测技术是一种非常重要的无损检测技术,广泛应用于医学、工业等领域。超声波探测器中的高压功率放大器是其中一个关键部件,它主要用于将微弱的超声信号放大到能够进行后续处理和分析的程度。 在超声波探测器中,超声波发射器会向被测物体…

Qt编码方式

中文乱码算是一个常见的问题,本文提供两种解决方案 1 对字符串单独进行处理(不推荐) QString strQString::fromLocal8Bit("阿萨德");//使用此函数进行转码以显示正常(本地语言方式) QString strQString::fromUtf8("阿萨德");//qt还提供了从其他…

Bug小能手系列(python)_8: 使用mne库读取gdf文件报错 Cannot cast ufunc ‘clip‘ output

Cannot cast ufunc clip output from dtype float64 to dtype uint32 with casting rule same_kind 0. 错误介绍1. 环境介绍2. 问题分析3. 解决方法4. 总结 0. 错误介绍 在加载BCI Competition IV 2a数据集时,当使用mne库的io的read_raw_gdf()函数时出错。注&#…

Haproxy开源负载均衡部署

第一步环境准备: systemctl stop firewalld setenforce 0 systemctl disable firewalld.service #设置开机不启动防火墙sed -i s/SELINUX.*/SELINUXdisabled/ /etc/sysconfig/selinux #设置开机不启动防火墙iptables -F centos7服务器 haproxy 192.168…

自动化测试验证码tesseract安装以及python联调

前提 经常会遇到登录系统时候需要输入动态验证码的情况,但是自动化如何识别图片然后登陆系统? 需要用到pytesseract识别验证码图片以及PIL图像处理方法 import pytesseract from PIL import Image, ImageEnhance1、tesseract安装 OCR,即O…

ESP32报错-Invalid chip id. Expected 9 read 0. Bootloader for wrong chip?

异常现象: 如下图所示,ESP32的 bootloader 运行时候一直报错,导致设备频繁重启,无法跳转至APP 原因及解决方式: 这个报错的原因就是程序编译时候选择的芯片型号和当前实际运行的芯片型号不一致,导致无法…

两个链表的第一个公共节点

题目描述 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出:Reference of…

「一键智能去除文件名中的特殊符号,让文件批量改名更加简单!」

文件批量改名一直是个繁琐的任务,其中最麻烦的问题之一就是文件名中的特殊符号。手动去除这些符号是一项耗时而繁琐的工作,但现在有一个更加智能的解决方案,可以让你快速的去除文件名中的特殊符号。方法如下: 首先,我…

漏洞预警|Apache StreamPipes 权限升级漏洞

棱镜七彩安全预警 近日,棱镜七彩威胁情报团队探测到开源项目Apache StreamPipes 存在权限升级漏洞,经分析研判,向全社会发起开源漏洞预警公告,提醒相关安全团队及时响应。 项目介绍 Apache StreamPipes(incubating&…

【正点原子STM32连载】 第四十三章 DHT11数字温湿度传感器 摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第四…

如何在 ZBrush 和 UE5 中创建精灵吟游诗人(P1)

小伙伴们大家好,今天 云渲染小编给大家带来的是CG艺术家Hugo Sena关于“精灵吟游诗人”项目背后的工作流程,讨论了角色身体、服装和竖琴的工作流程,并解释了如何在虚幻引擎 5 中设置灯光。篇幅较长,分为上下两篇,大家接…

导出csv列错乱

今天在导出CSV文件的时候文件的列错乱了。 场景是将数据库信息导出,采用的是CSV,比excel快点。然后数据需要经过处理后再导入到其他库,导入的时候部分文件解析出错了,原因就是CSV文件内容的列和导入映射的实体字段数量对不上。见…

把你的 Python 技能从 “Hello World“ 升级到 “万能钥匙“:掌握 Python 的输出、输入、数据类型转换和运算符!

前言 这篇文章我将为大家分享 python 的输出、输入、数据类型的转换和运算符 相关的知识。如果大家也想跟着博主一起学习 python ,欢迎订阅专栏哦python学习😊 输出 我们都知道,要想知道程序的运行结果,就需要将结果给打印到屏…

EventLog Analyzer:保障企业等保合规的安全利器

企业等保合规是现代信息安全管理的重要组成部分。在信息化时代,企业面临着越来越多的网络安全威胁和合规要求。为了确保企业的信息系统安全可靠,以及满足相关法规和标准的要求,企业需要借助强大的安全事件管理工具。EventLog Analyzer作为一种…

【力扣】前缀和/滑动窗口:209. 长度最小的子数组

【力扣】前缀和/滑动窗口:209. 长度最小的子数组 文章目录 【力扣】前缀和/滑动窗口:209. 长度最小的子数组1. 问题2. 题解2.1 暴力法2.2 前缀和 二分查找2.3 滑动窗口 参考 1. 问题 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组…

SRGAN图像超分重建算法Python实现(含数据集代码)

摘要:本文介绍深度学习的SRGAN图像超分重建算法,使用Python以及Pytorch框架实现,包含完整训练、测试代码,以及训练数据集文件。博文介绍图像超分算法的原理,包括生成对抗网络和SRGAN模型原理和实现的代码,同…

c++重载函数和虚函数(重写)为什么分别在编译和运行时候确定

函数调用的本质: 函数调用实际上是执行函数体中的代码函数体是内存中的一个代码段函数名代表改代码段的首地址,函数执行时就从这里开始 所以执行一个函数的时候,需要知道具体的函数地址,才能执行函数 重载、重写和隐藏的区别 …

大家想知道ai写作宝怎么样吗?

ai写作是指利用人工智能技术自动生成文章、报告、新闻等文本内容的过程。它可以实现大规模、高效率、低成本的文本创作,免去人工编写的繁琐过程,节约了很多时间和精力。目前在文学创作、新闻报道、广告文案、社交媒体内容创作等方面,ai写作都…

mysql中将多行数据合并成一行数据

mysql中将多行数据合并成一行数据 一个字段可能对应多条数据,用mysql实现将多行数据合并成一行数据 例如:一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句: SELECT am.act…

英伟达,不止于GPU

光子盒研究院 2013年至2023年这十年,有一家公司的市值翻了115倍、一跃成为美国股市回报率最高的公司——这就是英伟达。 黄仁勋出生于中国台湾,四岁随父母移民美国。1984年大学毕业,获得俄勒冈州立大学和斯坦福大学工程学位。 1993年&#xf…