Kubernetes 中的 Service Mesh 是什么?

在 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:透明代理,部署在每个微服务旁边,用于代理与管理服务通信。

其工作流程大致是:

  1. 当 Kubernetes 集群部署 Service Mesh 后,每个服务部署时会注入 Sidecar 代理。
  2. Sidecar 代理建立网络连接,将自身注册到控制平面。
  3. 控制平面维持 Sidecar 代理的目录,并下发配置给每个代理。
  4. 服务 A 调用服务 B 时,请求被 A 的 Sidecar 代理拦截并转发。
  5. Sidecar 代理根据控制平面下发的配置,决定是转发到服务 B 还是其他服务。
  6. 响应由 B 的 Sidecar 代理返回给服务 A 的 Sidecar 代理,最终到达服务 A。
  7. 服务调用细节被 Sidecar 代理记录,用作链路追踪与监控。

例如,在 Istio Service Mesh 中,架构是:

  • 数据平面:Envoy Sidecar 代理。
  • 控制平面:Istio Pilot、Mixer、Citadel。
  • Pilot:管理 Sidecar 代理,进行服务发现与路由配置。
  • Mixer:负责监控指标、访问控制与遥测数据收集。
  • Citadel:提供认证与mgrs/gress 管理。
    所以总结来说,Service Mesh 的主要作用是管理服务间的网络通信,其主要特征是:
  1. 依赖注入 Sidecar 代理,无需更改服务代码。
  2. 自动服务注册与发现。
  3. 负载均衡与熔断限流。
  4. 链路追踪与监控。
  5. mTLS 加密通信。
  6. RBAC 访问控制。

它由以下几个部分组成:

  1. 数据平面:代理平面,用于处理真实通信。
  2. 控制平面:管理数据平面与配置。
  3. Sidecar:透明代理,注入到每个服务中。