服务网格:Istio 架构

news2024/11/17 17:27:19

什么是服务网格


服务网格(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/707228.html

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

相关文章

数据结构--双端队列

数据结构–双端队列 双端队列(Double-ended Queue,简称Deque)是一种具有队列和栈特性的数据结构,可以在队列的两端进行插入和删除操作。双端队列允许从前端和后端同时进行插入和删除操作,因此可以称为“两端都可以进出…

「STC8A8K64D4开发板」第2-6讲:串口通信

第2-6讲:串口通信 学习目的掌握USB转串口电路的原理和设计。学习STC8A8K64D4的串口通信,包括串口初始化、波特率计算、串口发送和接收。编写串口收发程序,尤其是串口接收的软件缓存处理。编写串口发送命令控制LED指示灯亮灭的程序。 硬件电路…

【电商API接口系列】店铺所有商品数据的采集

API接口允许不同应用程序之间共享数据,在系统之间传输、读取和更新数据。例如,一个电商网站可以通过API接口获取支付系统的支付状态。API接口允许开发人员使用他人开发的功能来扩展自己的应用程序。通过调用第三方API接口,开发人员无需重新实…

二进制部署Kubernetes

二进制部署Kubernetes v1.20 k8s集群master01:192.168.142.10 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.142.20 k8s集群node01:192.168.142.30 kubelet kube-proxy docker k8s集群node…

基于Java汽车售票网站设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

VUE_网页自定义右键菜单组件

可以在uni-app或vue脚手架项目使用 引入组件会接管页面右键事件&#xff0c;所有options为空数组时&#xff0c;在页面右键将没有反应 rightMenu.vue <template><view><view v-if"show" class"contextMenu" :style"lay_style"…

Kafka:Kafka资料整理

一、官网 二、博主文章 1、kafka是什么 • Worktile社区 三、源码解读

一文了解云计算

目录 &#x1f34e;云服务 &#x1f34e;云计算类型 &#x1f352;公有云 &#x1f352;私有云 &#x1f352;混合云 &#x1f34e;云计算服务模式 &#x1f352;IaaS基础设施即服务 &#x1f352;PaaS平台即服务 &#x1f352;SaaS软件即服务 &#x1f352;三者之间区别 &…

4.springboot原理篇

原理篇 spring与springboot区别 spring是承载容器 springboot做的主要工作&#xff1a; ①简化配置&#xff08;省去了spring中配置xml&#xff0c;引入application.yml文件&#xff09; ②为我们提供了 spring-boot-starter-web 依赖&#xff0c;这个依赖包含了Tomcat和sprin…

二进制搭建Kubernetes集群(二)——部署Worker Node 组件

四.部署node节点 4.1 所有node节点部署 docker引擎 #所有 node 节点部署docker引擎#安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2#设置阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker- ce.…

Nuget更新全局包、缓存和临时文件夹路径位置

Nuget更新缓存 1、查看默认的Nuget路径2、更改全局包路径2.1 通过环境变量来进行修改2.2通过Nuget.Config配置文件来进行修改 3、更改http-cache路径4、更改temp文件路径5、更改plugins-cache文件路径 NuGet是一个流行的软件包管理器&#xff0c;可以帮助.NET开发人员轻松地添加…

【Python】 【Pandas 】【read_csv()】Pandas库的read_csv()方法的使用,处理:None,NULL

近期&#xff0c;使用read_csv的时候&#xff0c;遇到一个问题&#xff0c;就是本地读取的csv文件中的数据有None和NaN 两种&#xff0c;如&#xff1a; 直接使用 pd.read_csv(rF:\我爱Python\预测\历史样本.csv,encodingutf-8)发现读取的数据是将None 和 NULL 直接处理成 NaN…

SpingData-JDBC(看这篇文章就够了,新手入门指引)

JdbcTemplate 的基本使用 写在前面&#xff1a; 当DDL操作时&#xff0c;一般是用execute方法&#xff0c;这也是一种规范吧&#xff0c;这个也可以运行DML但是通常来说我DML操作是需要返回值的&#xff0c;一般就是返回影响的行数。然后这篇文章主要介绍增删改查&#xff0c…

软考A计划-系统集成项目管理工程师-项目范围管理(四)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Linux服务器网卡流量过高排查

第一种方式&#xff1a;nethogs 1.安装 yum -y install nethogs #nethogs em1 -d 3 监控eth0 并每3s刷新一次 手动安装 wget https://github.com/raboof/nethogs/archive/v0.8.5.tar.gz 依赖包&#xff1a; yum install -y libpcap libpcap-devel 编译&#xff1a; mak…

④数据封装对象(Vo、Bo、Po..)+MySQL视图

1.数据封装对象 VO&#xff08;View Object&#xff09;&#xff1a;视图对象&#xff0c;用于展示层&#xff0c;它的作用是把某个指定页面&#xff08;或组件&#xff09;的所有数据封装起来。 DTO&#xff08;Data Transfer Object&#xff09;&#xff1a;数据传输对象&a…

小黑特种兵重庆行走一天,体验了当地风土人情的leetcode之旅:剑指 Offer II 014. 字符串中的变位词

小黑代码 class Solution:def checkInclusion(self, s1: str, s2: str) -> bool:# 字符串长度n_s1 len(s1)n_s2 len(s2)if n_s1 > n_s2:return False# s1的字符计数字典count_s1 [0] * 26# 窗口计数字典count_window [0] * 26# 寻找初始窗口for i in range(n_s1):co…

SpringBoot(四)SpringBoot搭建简单服务端

通过之前的几篇文章相信大家已经对SpringBoot项目开发有了一个基本的了解。本篇&#xff0c;介绍下如何使用SpringBoot搭建一个简单的服务端&#xff0c;实现一个新用户注册的场景&#xff0c;供前端和移动端去使用。本篇需要你对SpringBoot的starter&#xff0c;mysql&#xf…

Redis概述及安装、使用和管理

文章目录 一、NoSQL非关系型数据库1.NoSQL概述2.关系型数据库和非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 3.非关系型数据库使用场景 二、Redis概述1.简介2.优点3.Redis…

Learn Mongodb了解DB数据库 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; PHP MYSQL &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…