Service Mesh服务网格之Linkerd架构|前沿
今天详细介绍一下Linkerd的架构。
控制平面
Linkerd控制平面是一组在专用Kubernetes命名空间中运行的服务(在Linked默认情况下)。这些服务完成各种事情--聚合遥测数据、提供面向用户的API、向数据平面代理提供控制数据等。它们共同驱动着数据平面的行为。
控制平面由四个部分组成:
- 控制器--控制器部署由多个容器(public-api,proxy-api,destination,tap)组成,这些容器提供了控制平面的大部分功能。
- Web--Web部署提供Linkerd Dashboard。
- Prometheus-- Linkerd公开的所有指标都通过Prometheus进行删除并存储。这是Prometheus的一个实例,它已被配置为专门用于处理Linkerd生成的数据。
- Grafana-- Linkerd配备了许多开箱即用的Dashboard。Grafana组件用于呈现和显示这些Dashboard。你可以通过LinkerdDashboard中的链接访问这些Dashboard。
架构
数据平面
Linkerd数据平面由轻量级代理组成,它们作为sidecar容器与服务代码的每个实例一起部署。为了将服务"添加"到Linkerd服务网格,你必须重新部署该服务的pod来让每个pod中都包含数据平面代理。(linkerd inject 命令完成此操作,以及完成通过代理透明地从每个实例传递流量所需的配置工作)你可以使用单个CLI命令将服务添加到数据平面。
这些代理透明地拦截与每个pod之间的通信,并添加诸如检测和加密(TLS)之类的功能,以及根据相关策略允许和拒绝请求。
这些代理不是手动配置的。相反,它们的行为是由控制平面驱动的。
代理
用Rust编写的超轻透明代理,它安装在服务的每个pod中,并成为数据平面的一部分。它接收pod的所有传入流量,并通过配置initcontainer的iptables,拦截传出流量和正确转发流量。因为它是一个sidecar并拦截服务的所有传入和传出流量,所以不需要更改代码,甚至可以将其添加到正在运行的服务中。
代理的功能包括:
HTTP,HTTP / 2和任意TCP协议的透明、零配置代理
用于HTTP和TCP流量的自动Prometheus度量导出
透明、零配置得WebSocket代理
自动、延迟感知、第7层负载均衡
针对非HTTP流量的自动第4层负载均衡
自动TLS(实验)
按需诊断分类API
- 代理支持通过DNS和目标gRPC API进行服务发现
CLI
Linkerd CLI在你的机器上本地运行,并用来和控制和数据平面交互。它可用于查看统计信息,实时调试生产问题以及安装/升级控制和数据平面。
Dashboard
Linkerd Dashboard提供了一个高级视图,能够实时显示你的服务发生情况。它可用于查看"黄金"指标(如成功率、请求/秒和延迟)、可视化服务依赖性,并了解特定服务路由的运行状况。
Top Line指标
Grafana
作为控制平面的一个组件,Grafana为你的服务提供开箱即用的可操作Dashboard。你可以查看高级指标并深入了解细节,即使对于pod也是如此。
开箱即用的Dashboard包括:
Top Line指标
部署细节
Pod细节
Linkerd 健康诊断
Prometheus
Prometheus是一种云原生监控解决方案,用于收集和存储所有Linkerd指标。它是作为控制平面的一部分安装的,并提供CLI、Dashboard和Grafana使用的数据。
代理在4191端口上公开一个/metrics端点,让Prometheus获取数据,并且每隔10秒就会获取一次
指标集合
更多技术文章,扫描下方二维码