在 Kubernetes 中,Service Mesh 是一种专门处理服务间通信的架构。它通过依赖注入的方式插入代理(Sidecar)来管理服务间的网络通信。
Service Mesh 的主要功能是:
- 服务发现:自动注册与发现服务。
- 负载均衡:在服务间的调用中实现负载均衡。
- 熔断与限流:控制服务调用的延迟与流量。
- 链路追踪:跟踪服务间调用的延迟与路径。
- 加密:加密服务间的网络通信。
- RBAC:在服务层面控制权限。
常见的 Service Mesh 有:
- Istio:由 IBM、Google、Lyft 开发,操作简单,功能强大,是最流行的 Service Mesh 方案。
- Linkerd:Cloud Native Computing Foundation 托管的轻量级 Service Mesh。
- Consul Connect:Consul 生态的 Service Mesh 方案,内部使用 Envoy 作为数据平面。
- AWS App Mesh:AWS 的托管 Service Mesh 服务。
这些 Service Mesh 的架构都包含:
- 数据平面(Data Plane):代理集合,用于处理真实的服务通信,如 Envoy。
- 控制平面(Control Plane):管理代理并配置数据平面,是 Service Mesh 的大脑。
- Sidecar:透明代理,部署在每个微服务旁边,用于代理与管理服务通信。
其工作流程大致是:
- 当 Kubernetes 集群部署 Service Mesh 后,每个服务部署时会注入 Sidecar 代理。
- Sidecar 代理建立网络连接,将自身注册到控制平面。
- 控制平面维持 Sidecar 代理的目录,并下发配置给每个代理。
- 服务 A 调用服务 B 时,请求被 A 的 Sidecar 代理拦截并转发。
- Sidecar 代理根据控制平面下发的配置,决定是转发到服务 B 还是其他服务。
- 响应由 B 的 Sidecar 代理返回给服务 A 的 Sidecar 代理,最终到达服务 A。
- 服务调用细节被 Sidecar 代理记录,用作链路追踪与监控。
例如,在 Istio Service Mesh 中,架构是:
- 数据平面:Envoy Sidecar 代理。
- 控制平面:Istio Pilot、Mixer、Citadel。
- Pilot:管理 Sidecar 代理,进行服务发现与路由配置。
- Mixer:负责监控指标、访问控制与遥测数据收集。
- Citadel:提供认证与mgrs/gress 管理。
所以总结来说,Service Mesh 的主要作用是管理服务间的网络通信,其主要特征是:
- 依赖注入 Sidecar 代理,无需更改服务代码。
- 自动服务注册与发现。
- 负载均衡与熔断限流。
- 链路追踪与监控。
- mTLS 加密通信。
- RBAC 访问控制。
它由以下几个部分组成:
- 数据平面:代理平面,用于处理真实通信。
- 控制平面:管理数据平面与配置。
- Sidecar:透明代理,注入到每个服务中。