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的一种实现架构,主要包含数据面和控制面,他们的交互步骤如下:
- 控制面支撑策略配置
- 策略下发至数据面
- 数据面策略生效并实现流量治理