ServiceMesh 2:控制面和数据面的职责(图文总结)
1 Service Mesh介绍
之前的章节我们详细介绍了ServiceMesh的基础知识.
ServiceMesh 是最新一代的微服务架构,作为一个基础设施层,能够与业务解耦,并解决复杂网络拓扑下微服务与微服务之间的通信。其实现形态一般为轻量级网络代理,并与应用SideCar部署,同时对业务应用透明。

2 Istio介绍
ServiceMesh 是一种强大微服务架构,但并不是一个架构产品,比较受欢迎的ServiceMesh产品有Istio、Linkerd和Consul Connect等。
其中的Istio 是最受欢迎、最强大、最值得信赖的服务网格。 Istio 由 Google、IBM 和 Lyft 于 2016 年创立,是云原生计算基金会的一个毕业项目, 与 Kubernetes 和 Prometheus 等项目并列。
Istio 可确保云原生和分布式系统具有弹性,帮助现代企业在保持连接和保护的同时跨不同平台维护其工作负载。 它启用安全和治理控制,包括 mTLS 加密、策略管理和访问控制、 支持网络功能,例如金丝雀部署、A/B 测试、负载平衡、故障恢复, 并增加对整个资产流量的可观察性。
Istio 并不局限于单个集群、网络或运行时的边界——在 Kubernetes 或 VM、多云、混合或本地上运行的服务都可以包含在单个网格中。
Istio 经过精心设计,具有可扩展性,并受到贡献者和合作伙伴的广泛生态系统的支持, 它为各种用例提供打包的集成和分发。您可以独立安装 Istio,也可以选择由提供基于 Istio 的解决方案的商业供应商提供的托管支持。

3 Istio部署逻辑
Istio 服务网格在部署逻辑上分为数据平面和控制平面。
- 数据平面是一组代理,用于调解和控制微服务之间的所有网络通信。 它们还收集和报告所有网格流量的可观测数据。
- 控制平面管理和配置数据平面中的代理。
Istio 支持两种主要的数据平面模式:
1. Sidecar 模式, 它会与您在集群中启动的每个 Pod 一起部署一个 Envoy 代理,或者与在虚拟机上运行的服务一同运行。
2. Ambient 模式, 使用每个节点的四层代理,并且可选地使用每个命名空间的 Envoy 代理来实现七层功能。
4 Istio架构图
Istio架构图如下:

它提供了如下功能:
- 针对HTTP,gRPC,WebSocket和TCP协议提供负载均衡;
- 精细的流量控制,比如A/B测试,金丝雀部署等;
- 模块化的插件设计,可以通过API进行访问,频率限制等;
- 全自动的请求遥测,包括请求的追踪,监控和日志;
- 强大的安全功能,比如认证,授权,加密等;
总之: Discovery、Configuration、Certificates
4.1 控制面
控制面负责服务治理,比如路由规则,流量规则(异常重试、超时重试、超时保护、限流、熔断),安全策略等,是服务网格的控制核心,通过控制面,可以配置服务网格中各个组件的行为。
为了结构化控制面的功能,Istio 将其分为Pilot,Mixer,Citadel 等组件,其各个部分对应的功能:
- Pilot:负责服务发现,负载均衡,路由规则等,不过Pilot不提供服务注册,只提供标准化的接口,可以方便的对接到各个服务注册中心,比如Eureka,Etcd等,然后通过服务发现控制Envoy的动态转发能力;
- Mixer:负责访问控制,策略执行等,在最初的Istio的架构设计中,Mixer是中心化的组件,由于Mixer提供了各种访问控制策略,所以Mixer的负载压力比较大,发起请求之前做一次逻辑检查,请求结束后还需要上报处理,Mixer接收的请求至少涨了原始请求的2倍。为了解决这个问题,Mixer增加了缓存的功能,逻辑处理和上报都由Mixer缓存完成,这样Mixer的负载压力就能缓解;
- Citadel:负责安全功能,比如认证授权等,比如那些服务安全级别比较高,需要对请求做单独的加密处理或者角色控制,Istio 通过引入Citadel组件,将安全能力透明化;
4.2 数据面
可以看到架构图上,每个服务都有一个sidecar,也就是 Envoy,这个就是数据面,负责服务间通讯和负载均衡。
所有进入服务的请求都经过 Envoy,然后根据路由规则转发到相应的服务,所以 Envoy 被称为服务网格的入口。
Envoy 架构图如下:

Envoy包括几个部分:
- listeners:监听器,负责监听端口,接收请求,比如上述的配置文件中监听10000端口;
- filter Chains:过滤器链,可以在配置文件配置对于请求的处理链路,可以在任何一个套接字上,按我们的需要去拼接多个过滤器,来实现对流量的、不同功能的处理,比如上述的配置文件中的过滤器链,在监听器上添加了 HttpConnectionManager 过滤器,这个过滤器负责解析HTTP协议;
- cluster defintios:设置转发到下游的upsteam server,比如上述配置文件中的cluster defintios,设置转发到
xxx域名上
Envoy提供了xDS API标准(x-discovery service),也就是服务发现服务 ,Envoy通过xDS API获取配置信息,然后根据配置信息进行转发,包括几个类型,分别是:EDS(endpoint discovery service),LDS(listener discovery service)和CDS(cluster discovery service),对应实现节点服务发现,监听器服务发现和集群服务发现。
4.3 控制面和数据面交互过程
整个交付过程分为3步骤:管理员使用控制面进行策略配置、策略下发数据面、数据面策略生效。
4.3.1 配置 istioctl、kubectl , 调用k8s api 的过程

4.3.2 Pilot通过xDS 接口进行策略下发

4.3.3 流量策略的执行过程

5 总结
- Service Mesh是新一代的微服务架构
- Istio 是ServiceMesh的一种实现架构,主要包含数据面和控制面,他们的交互步骤如下:
- 控制面支撑策略配置
- 策略下发至数据面
- 数据面策略生效并实现流量治理
ServiceMesh 2:控制面和数据面的职责(图文总结)的更多相关文章
- 关于oracle修复控制文件与数据文件不一致的问题----
本小菜鸟周末鼓捣数据库关于rman恢复与备份方面的实验,结果不知道哪根筋搭错了,手一哆嗦,做了不知道什么操作,就出现了数据库打不开的严重状态,只能开启到mount状态,但是切换到open状态时就会报错 ...
- jquery通过ajax获取数据,控制显示的数据条数
效果图: 现在我们可以先看它的json数据,如图所示: 然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ...
- 源端控制的OpenFlow数据面
OpenFlow 交换机一般采用 TCAM 存储和查找流表,从而带来了扩展性.成本和能耗的问题.TCAM 成本和能耗过高,存储容量有限,一般交换机中的 TCAM 仅能存储几千条流表项,对 OpenFl ...
- 转战物联网·基础篇07-深入理解MQTT协议之控制报文(数据包)格式
在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分: 结构名 中文名 解释说明 Fixed header 固定报头 报文的最开始部分,所有报文都包含这个部分 Variable ...
- 接收的参数为日期类型、controller控制层进行数据保存、进行重定向跳转
目录 1.接收的参数为日期类型 2.controller控制层进行数据保存 3.controller层如何进行重定向跳转(因为默认是请求转发) 4.静态资源的映射 1.接收的参数为日期类型 WEB-I ...
- Civil3d中 如何用管轴线的变坡点桩号控制其他纵断面数据的显示?
如何用管轴线的变坡点桩号控制其他纵断面数据的显示?如下图所示: 主要进行两步操作,下面以地面高程为例. 第1步: 右键纵断面图,打开纵断面图特性对话框,选择"标注栏"选项卡,分别设 ...
- dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
//-------------------------------------------------------------------------------------------- - //D ...
- dsp28377控制DM9000收发数据——第二版程序,能够实现手术功能,但是容易掉帧;使用读取中断寄存器的方式判断中断
G:\controlSUITE\device_support\F2837xD\v180\F2837xD_examples_Cpu1\emif1_16bit_asram\cpu01\emif1_16bi ...
- dsp28377控制DM9000收发数据
首先感谢上一篇转载文章的作者给出的参考,下面是一些自己在调试过程中的一些步骤: 首先把代码贴上来: //------------------------------------------------ ...
- M1卡修改各区块控制位值和数据
(一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限. 1.对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7 ...
随机推荐
- 暑假java自学进度总结03
一.今日所学: 1.标识符命名规则: 必须: 1>由数字,字母,下划线,美元符组成: 2>不能以数字开头: 3>不能是关键字: 4>区分大小写: 建议: 1>命名方法,变 ...
- redis如何实现主从同步
redis实现主从同步分为两种:全量同步和增量同步:第一次连入集群的slave需要进行全量同步,那些断开后重连的slave需要进行增量同步 每个redis都有自己的replid,他们是master的标 ...
- SpringTask
SpringTask是spring提供的一个任务调度工具,按照约定的时间自动执行代码逻辑 定时任务框架,即定时自动执行某段代码 应用场景:信用卡每月还款提醒,火车售票系统处理未支付订单 cron表达式 ...
- Bond4配置
Bongding聚合链路工作模式 > bond聚合链路模式共7种:0-6Mode > bond 0 负载均衡 轮询方式往每条链路发送报文,增加带宽和容错能力.容易出现数据包无序到达的问题, ...
- .NET 高性能缓冲队列实现 BufferQueue
目录 前言 适用场景 功能说明 使用示例 BufferQueue 内部设计概述 Topic 的隔离 Partition 的设计 对并发的支持 Partition 的动态扩容 Segment 的回收机制 ...
- 用了组合式 (Composition) API 后代码变得更乱了,怎么办?
前言 组合式 (Composition) API 的一大特点是"非常灵活",但也因为非常灵活,每个开发都有自己的想法.加上项目的持续迭代导致我们的代码变得愈发混乱,最终到达无法维护 ...
- Netty的源码分析和业务场景
Netty 是一个高性能.异步事件驱动的网络应用框架,它基于 Java NIO 构建,广泛应用于互联网.大数据.游戏开发.通信行业等多个领域.以下是对 Netty 的源码分析.业务场景的详细介绍: 源 ...
- 【Java】JDBC Part4 Transaction 事务
JDBC Part4 Transaction 事务 什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. 也就是原子性,一个事务中的一系列的 ...
- 【SpringSecurity】02 权限控制、自定义登陆、记住我
[资源过滤 权限控制] 就之前的权限问题,例如一个user1登录成功去访问level1的资源当然没有问题 但是页面还呈现了其他权限的资源,比如level2 & level3 既然呈现给了use ...
- pytorch报错:Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass RuntimeError: FIND was unable to find an engine to execute this computatio
GPU模式下运行pytorch代码报错,pytorch为2.2.1,NVIDIA驱动版本535.161.07 File "/home/devil/anaconda3/envs/sample- ...