ServiceMesh 2:控制面和数据面的职责(图文总结)

ServiceMesh系列

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 的解决方案的商业供应商提供的托管支持。

官方网站:https://istio.io/latest/

3 Istio部署逻辑

Istio 服务网格在部署逻辑上分为数据平面和控制平面。

  • 数据平面是一组代理,用于调解和控制微服务之间的所有网络通信。 它们还收集和报告所有网格流量的可观测数据。
  • 控制平面管理和配置数据平面中的代理。

Istio 支持两种主要的数据平面模式:
1. Sidecar 模式, 它会与您在集群中启动的每个 Pod 一起部署一个 Envoy 代理,或者与在虚拟机上运行的服务一同运行。
2. Ambient 模式, 使用每个节点的四层代理,并且可选地使用每个命名空间的 Envoy 代理来实现七层功能。

4 Istio架构图

Istio架构图如下:

它提供了如下功能:

  • 针对HTTP,gRPC,WebSocket和TCP协议提供负载均衡;
  • 精细的流量控制,比如A/B测试,金丝雀部署等;
  • 模块化的插件设计,可以通过API进行访问,频率限制等;
  • 全自动的请求遥测,包括请求的追踪,监控和日志;
  • 强大的安全功能,比如认证,授权,加密等;

总之: DiscoveryConfigurationCertificates

4.1 控制面

控制面负责服务治理,比如路由规则,流量规则(异常重试、超时重试、超时保护、限流、熔断),安全策略等,是服务网格的控制核心,通过控制面,可以配置服务网格中各个组件的行为。

为了结构化控制面的功能,Istio 将其分为PilotMixerCitadel 等组件,其各个部分对应的功能:

  • 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的一种实现架构,主要包含数据面和控制面,他们的交互步骤如下:
    • 控制面支撑策略配置
    • 策略下发至数据面
    • 数据面策略生效并实现流量治理
相关推荐
米丘1 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质4 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯4 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y4 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰4 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了5 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking
至乐活着5 天前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
就改了5 天前
微服务异步场景链路断裂完整解决方案
微服务·云原生·架构
山东点狮信息科技有限公司5 天前
点狮OA-企业级 OA 办公自动化系统架构设计与实践
spring cloud·微服务·性能优化·架构·系统架构