Istio 什么是服务网格

什么是服务网格


服务网格(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中,这容许服务根据需要直接与其集成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle字符集

1、查看oracle字符集 如果操作系统或者客户端的字符集设置和数据库设置不一样就会出现乱码 查询NLS_LANG即操作系统环境变量要设为 NLS_LANGUAGE_NLS_TERRITORY**.NLS_CHARACTERSET**,如: export NLS_LANG“AMERICAN_AMERICA.AL32UTF8”

Hadoop环境搭建

一、简介 1.1、概念 Hadoop是一个由Apache基金会所创建的分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题,从广义上来说hadoop是数据存储分包器,可以存储大量的数据。 1.2、优势 Hadoop具有高可靠性(Hado…

electron+vue3+ts+vite

首先使用vite工具创建一个vue3ts的项目 npm create vite创建好vuets项目后启动项目 cd electron-vue3-ts-vitenpm installnpm run dev 访问http://127.0.0.1:5173/地址可以看到项目已经启动成功 安装Electron 接下来我们安装electron,使用以下命令 npm i -D el…

CV什么时候能迎来ChatGPT时刻?

卷友们好,我是rumor。 最近看了几篇CV的工作,肉眼就感受到了CVer们对于大一统模型的“焦虑”。 这份焦虑让他们开始尝试统一一切,比如: 统一复杂的自动驾驶任务的优化目标[1],来自今年CVPR最佳论文。统一典型的CV任务&…

360手机 360手机刷机最高安卓版本参考

360手机 360手机刷机最高安卓版本参考 参考:360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机:360rom.github.io 【360手机(最高)安卓版本】 以下列举为常见360手机机型;其它早期系列,一般为Android4-6左右360手机UI界…

doker安装RabbitMQ以及用java连接

目录 doker安装: RabitMq安装: java链接 doker安装: 参考链接(非常详细): docker安装以及部署_docker bu shuminio_春风与麋鹿的博客-CSDN博客 安装好后开启doker //启动docker服务 systemctl start do…

保偏产品系列丨5款保偏光纤产品简介

保偏光纤应用日益扩大,特别是在干涉型传感器等测量方面,利用保偏光纤的光无源器件起着非常重要的作用,种类也很多。 本文来介绍5款保偏光纤系列产品以及它们的性能,欢迎收藏转发哦! 01、保偏光纤跳线-TLPMPC 保偏光纤跳…

梯度下降法求函数的解

题目 例如 y x^ 5 e^x3x−3,求解y 0的解 问题分析 首先要构造y 0的损失函数,让这个损失函数是凸的,也就是可以有最优解,并且是可到的,比较容易想到的是mse平方误差,我们要让y和0之间绝对误差最小。lo…

css 背景颜色级别高于背景图

<div class"bg-parent"> <img :src"employeeImg" class"bg-url" /> <div class"bg"> <el-icon class"plus-icon"> <Plus /> </el-icon> </div> </div> .bg-parent{ //父级…

python3套接字编程之socket和socketserver(TCP和UDP通信)

socket和socketserver是python3中socket通信模块&#xff0c;关于其使用做如下总结。 目录 1.socket 1.1模块引入 1.2套接字获取 1.3套接字接口 1.3.1 服务端 1.3.2 客户端套接字函数 1.3.3 公共套接字函数 1.3.4 面向锁的套接字方法 1.3.5 面向文件的套接字的函数 …

CNN卷积类型总结(标准卷积、空洞卷积、反卷积、深度可分离卷积、分组卷积等)

目录 标准卷积 卷积的运算 conv2d conv1d 其他卷积类型 空洞卷积&#xff08;膨胀卷积&#xff09; 反卷积&#xff08;转置卷积&#xff09; 深度可分离卷积 分组卷积 参考文章 上学时&#xff0c;卷积常在各个课程中出现&#xff0c;现代、信号与系统这些&#xff…

【MySQL】SQL的高阶用法

文章目录 条件查询使用关系运算符查询使用IN关键字查询使用BETWEEN AND关键字查询使用空值查询使用AND关键字查询使用OR关键字查询使用LIKE关键字查询(模糊查询)使用LIMIT分页查询使用GROUP BY进行分组查询GROUP BY和聚合函数一起使用GROUP BY和聚合函数以及HAVING一起使用 使用…

热点探测技术架构设计与实践

1. 概述 说到热点问题&#xff0c;首先我们先理解一下什么是热点&#xff1f; 热点通常意义来说&#xff0c;是指在一段时间内&#xff0c;被广泛关注的物品或事件&#xff0c;例如微博热搜&#xff0c;热卖商品&#xff0c;热点新闻&#xff0c;明星直播等等&#xff0c;所以…

2-css-2

一 复合选择器 定义&#xff1a;由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 作用&#xff1a;更准确、更高效的选择目标元素&#xff08;标签&#xff09;。 1 后代选择器 后代选择器&#xff1a;选中某元素的后代元素。 选择器写法&#xff1a;父选择器…

【微信小程序开发】第 7 课 - 小程序的常用组件

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、小程序中组件的分类 3、常用的视图容器类组件 3.1、view 组件 3.2、scroll - view 组件 3.3、swiper 和 swiper…

OpenAI 重磅更新 变得更强啦 | 包括更多可控的 API 模型、函数调用能力、更长的上下文和更低的价格

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 官网&#xff1a;https://openai.com/blog/function-calling-and-other-api-updates 功能调用和其他 API 更新。OpenAI 宣布更新&#xff0c;包…

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

哈工大计算机网络课程网络层协议详解之&#xff1a;互联网控制报文协议&#xff08;ICMP&#xff09; 在互联网中&#xff0c;IP数据报的传输很容易出现差错&#xff0c;当出现差错时&#xff0c;最简单的处理办法就是对该IP数据报进行丢弃。但是&#xff0c;并不是直接丢弃就…

Linux 学习记录40(C++篇)

Linux 学习记录40(C/QT篇) 本文目录 Linux 学习记录40(C/QT篇)一、QT软件的使用1. 新建工程 二、C语言和C的区别1. C对C的扩充2. C对C的兼容 三、第一个C程序1. cout标准输出流对象(1.介绍&#xff1a;(2. 运算符(3. cout的使用 2. cin标准输出流对象(1.介绍&#xff1a;(3. ci…

TCP/IP详解(一)

TCP/IP协议是Internet互联网最基本的协议&#xff0c;其在一定程度上参考了七层OSI&#xff08;Open System Interconnect&#xff0c;即开放式系统互联&#xff09;模型 OSI参考模型是国际组织ISO在1985年发布的网络互联模型&#xff0c;目的是为了让所有公司使用统一的规范来…

序列化和反序列化的认识【protobuf、json、xml】

1. 什么是序列化与反序列化&#xff1f; 程序员在编写应用程序的时候往往需要将程序的某些数据存储在连续的内存中&#xff0c;然后将其写入文件或是将其传输到网络中的另一台计算机上以实现通讯。这个将程序数据转换成能被存储并传输的格式的过程被称为序列化&#xff08;seri…