Istio 深入理解数据平面组件 Envoy

news/2024/11/29 8:50:49/

ingress control承载了控制面和数据面的一个职责,在control里面有一个process,这个进程就承担了反向代理的能力,当有任何请求发过来的时候,会被nginx接收到这个请求并且被转发,基于的规则由ingress control动态配置的,所以control就是控制平面,nginx本身就是其数据面。

在谈istio的时候一样会分数据面和控制面,控制面就是istio自身,istio会有各种各样的控制平面组件,比如istiod,在里面有流量控制的控制器,它会去监听istio相关的一些对象以及k8s status这些对象,它会基于这些对象把所有的路由配置信息变更组装成envoy的配置,然后推送给envoy。

envoy就是我们在istio里面数据平面的组件,所有的请求都是发到envoy,再由envoy转发到后端的服务器的。

 

主流七层代理软件比较


http2被业界认可以及部署的范围越来越广了,http2相对于http1.x来说它有一些明显的优势,因为是连接复用的,所以对整个网络的链路需求会小很多。

然后又是连接复用的,那么传输的性能会高很多。k8s很多组件都是基于grpc的,也是基于http2的。

envoy在做技术选型的时候它有非常完整的支持,无论是upstream还是downstream,两个方向都基于http2,但是nginx是单方向的。

处理优雅终止:当你的一个应用,它接收到一些请求的时候,我们要让这个进程重启或者停止,在那一刻往往都有一些发送到服务器上面但是还没有处理完的请求,之所以要优雅终止就是要给到这些请求一些时间让他们处理完。然后再优雅退出,这样就不会让客户端感受到突然重启造成的一些error。

connection draining就是重新加载静态配置的时候,它老的进程不退出,新的进程谈过共享内存启动起来,然后将老的进程里面的socket copy到新的进程里面去。然后老的进程已经连接的connection它会继续的去处理,当所有的已连接的请求处理完成之后,它再将老的进程退出,然后平滑的过度到新的进程去。

这样在重启的过程当中,对于客户来说是没有感知到的,因为是平滑过渡去的,这个功能envoy支持的非常好。

上面就是envoy在能力层次上面有很强的优势。

Envoy的优势


性能:

在具备大量特性的同时,Envoy提供极高的吞吐量和低尾部延迟差异,而CPU和RAM消耗却相对较少。

envoy可以提供非常高的吞吐量,然后只贡献一点点延迟,对资源cpu 内存的开销相对比较少。

可扩展性:

Envoy在L4和L7都提供了丰富的可插拔过滤器能力,使用户可以轻松添加开源版本中没有的功能。

你可以写很多的插件。你可以通过c++ rust语言的代码去编写自己的插件,当任何数据包被envoy接受的时候,除了envoy内置的逻辑去处理这些数据包,你所编写的插件逻辑也可以对这些数据包进行一些额外的处理,这就使得envoy的能力变的非常的容易扩展,你可以在envoy原有逻辑的基础上加上自己对数据包的处理能力。

API可配置性:

·Envoy提供了一组可以通过控制平面服务实现的管理API。如果控制平面实现所有的API,则可以使用通用引导配置在整个基础架构上运行Envoy。所有进一步的配置更改通过管理服务器以无缝方式动态传送,因此Envoy从不需要重新启动。这使得Envoy成为通用数据平面,当它与一个足够复杂的控制平面相结合时,会极大的降低整体运维的复杂性。

在envoy出来之前,其他的代理软件都只支持静态文件的配置,让静态配置文件生效就需要重启进程。在以前低频率下这种模式是没有问题的,k8s是一个动态的环境,节点会失效,pod就会故障转移,ip就会变动。还有弹性使得pod实例的数量加加减减,这样就会去频繁的修改配置文件,那么基于静态重启进程生效那么你的应用进程会一直重启。

有没有更加优雅的方式?更加轻量级的方式,就是envoy提供的开创性的能力。就是API可配置,除了envoy可以读取本地的配置文件进行热重启,它还可以在基础配置文件里面配置,接受另外一个地址的管理,当要进行配置更新,配置加载的时候,那么我就去那个地址要一份配置清单。这样的话就可以在不重启进程的前提下静态的去远端的网络地址要一份配置清单,只要这个配置清单生成好了之后,推送到envoy这一侧,那么配置就会即使生效。

比如说有pod一直redy或者一直不redy,那么只需要在远端控制服务器里面把这个envoy配置进行一个动态的变更。这个动态的变更要推送到envoy这一侧,那么envoy这边就可以及时生效了。


http://www.ppmy.cn/news/758998.html

相关文章

深度学习06-pytorch从入门到精通

文章目录 概述环境准备安装cuda和cudnn安装pytorch 基础张量定义numpy转换数学函数随机数计算函数矩阵处理函数 自动梯度案例计算图 torchvision模块TransformsDataSetDataLoader自定义数据集 nn模块nn.ModuleCNN图像处理层nn.Conv2dnn.AvgPool2d和nn.MaxPool2dnn.Linearnn.Bat…

​安全测试之XSS跨站脚本攻击实例解析​

跨站攻击,即Cross Site Script Execution(通常简写为XSS,因为CSS与层叠样式表同名,故改为XSS) 是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻…

系统正常启动、运行就是不让进bios

硬盘状态灯不亮,不是主板的问题,也不是硬盘的问题,原来是那个硬盘盒子上的led灯坏了,折腾死工程师了,这问题。。。。 系统启动、运行正常,但是就是不让进bios,拔了硬盘就让进,插上硬…

如果你狂按F2,F12,DEL也进不了BIOS怎么办?

开关机旁边的一键还原键了解一下,关机状态下长按直达,不谢 鄙人联想490电脑,仅供参考

部分装win10电脑进不去bios的解决方法

可能是因为开启了快速启动的原因。 控制面板-右上角搜索框里搜索“更改电源按钮的功能”,点进去,然后点更改当前不可用的设置,找到快速启动,去掉前面的勾确定后重启电脑,就可以按F2什么的进bios了。 转载于:https://bl…

服务器主板不装系统进不去BIOS,bios进不去怎么装系统

以下是学习啦小编整理的在进不去bios的情况下如何装系统的问题,供大家参考和学习。 电脑无法进入bios? 1、如何进入笔记本电脑BIOS 故障现象:一台二手的COMPAQ笔记本电脑,需进入BIOS进行一些设置,可是不知道快捷键。 故障分析与处理:大多数笔记本电脑进入BIOS的方式都不同…

联想电脑狂按F2不能进入BIOS设置解决办法——通过UEFI固件设置进入BIOS

关于BIOS BIOS是英文"Basic Input Output System"的缩略词,中文名称就是"基本输入输出系统"。BIOS是个人电脑启动时加载的第一个软件。计算机在运行时,首先会进入BIOS,它在计算机系统中起着非常重要的作用。一块主板性能…

bios进不去

可以尝试换硬盘,刷新BIOS.硬盘前面的磁道坏道可能比较多,把启动盘放到其他盘符或许可以解决。