Post

【Cloud Native】09 service mesh

【Cloud Native】09 service mesh

0 文档

reference:

1 概念

service mesh,服务网格。核心思想,就是对微服务的provider,进行架构解耦。也就是说,将业务服务和支持服务,进行解耦。

支持服务:流量代理、负载均衡、性能跟踪、日志、配置、链路跟踪、服务治理(限流、降级、熔断)。

主要分为两种模式:

  • sidecar边车模式
  • proxy代理模式

2 sidecar边车模式

sidecar,三轮摩托车的副座。sidercar服务,就是支持服务。

sidecar服务,与业务服务生命周期相同,一同创建和退出。 sidecar服务与业务服务绑定在一起部署,部署在业务程序旁边,这样通信没有明显io。

sidecar,也称sidekick。

优势:

  • 非侵入式架构,服务治理等支持服务与业务服务解耦。

劣势:

  • web服务,会增加请求次数
  • 管理这些接口、依赖,会带来额外工作量

3 代理模式

sidecar拦截到业务服务的流量,以及业务服务的响应,进行转发。类似于Nginx,也就是一个反向代理的角色

sidercar还可以实现上面我们说的,性能监控、服务治理这些。

总的来说,sidecar是一种模式,一种角色,不是一个具体的组件。Istio是框架,Envoy是组件。

4 实现框架 Istio

Istio, Conduit, Envoy, Linkerd

对比内容Spring cloudIstio
配置中心、注册中心、服务发现、路由规则nacosPilot(领航员)
策略控制(如限流、熔断)sentinelMixer
支持组件 Envoy(使节)

istio原理示意图

文档:

  • Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit: http://www.mark-to-win.com/tutorial/50497.html

4.1 Istio架构

Istio,基于现有的kubenete服务,proxy, kubelet,来获取网络信息(endpoint, cluster ip, pod ip)。 拥有istio-proxy的pod,所有的流量将被istio-proxy接管,但不会取代kube-proxy 而且istio-proxy会在处理每一个请求时,都将信息传给控制平面,这样,控制平面可以更好地观察、控制所有流量(精细化部署、流量治理)。 但是,拥有了istio-proxy,ingress就被取代了。

控制平面:Istiod 数据平面:Envoy

4.2 Istio运转流程

istio框架示意图

步骤说明
1, sidecar自动注入- 在Kubernetes场景下创建 Pod时,Kube-apiserver调用管理平面组件的 Sidecar-lnjector服务,
- 然后会自动修改应用程序的描述信息yaml并注入Sidecar。
- 业务服务无感知
2, 流量拦截- 在 Pod 初始化时,设置iptables规则,将所有流量路由到 istio-proxy(envoy)上
- 业务服务无感知
3, 服务发现- envoy调用控制平面的pilot服务注册接口,注册服务
- 这样,服务发现接口,也能发现这个服务
4, 负载均衡- 控制平面Pilot可以对负载均衡进行配置,当然,有默认值。
5, 流量治理- envoy路由时,会根据从控制平面(Pilot,Mixer)获取流量规则,进行流量分发。
6, 访问安全- envoy通信时,会根据从控制平面(Pilot,Citadel)获取证书、密钥实现双向认证。
7, 服务遥测- envoy通信时,所有请求都会上报控制平面(Mixer),这样控制平面可以将信息传给监控后端(如有)。
8, 策略执行- envoy通信时,所有请求都会先检查(Mixer)的流量控制规则,这样可以实现(限流、熔断、降级、灰度发布(滚动、蓝绿、金丝雀)。
9, 外部访问- Istio有Gateway,用来对接、控制外部访问。

4.3 Istio组件介绍

组件说明
Pilot服务注册中心、数据平面下发规则
Mixer(不是必须)分为:Policy(提供流量治理)、Telemetry(提供数据上报、日志搜集)
Citadel(不是必须)主要用来实现Istio的认证授权相关
Galley(不是必须)负责配置管理、配置复用等配置相关
Sidecar-Injector负责自动注入Sidecar
Proxy(Envoy)envoy代理,是Istio框架中,唯一与数据平面流量交互的组件。
envoy容器中有两个进程:
- pilot-agent: 生成、启动、重载、监控envoy
- envoy: 上面说的,流量代理、控制面交互等
Ingress-Gateway负责与网格外服务交互
注:流量同样先经过Pilot
This post is licensed under CC BY 4.0 by the author.