service mesh 提供了诸如流量管理,弹性,策略,安全性,强身份和对负载的观察能力等功能。
应用程序与这些操作功能分离,service mesh 将它们从应用程序层移到基础结构层。
以下是使用 service mesh 时可以为工作负载启用的一些场景:
-
加密集群中的所有通信:在集群中指定服务之间启用 HTTPS 双向认证。这个功能可以扩展到网络外层的出入口。可以提供默认安全选项,无需更改应用程序代码和基础结构。
-
服务发布策略:指定条件将流量到集群子集路由中一组新服务里面。当线上发布测试成功后,移除条件路由,逐步增加指向新服务的流量百分比,最终,所有的流量将被引导到新的服务。
-
流量管理和控制:在服务上创建一个策略,将所有流量限制为来自特定来源的某个版本的服务。或创建一个策略,对指定服务之间的故障类别应用重试规则。也可以在迁移时,或者 debug 一个问题时,将实时流量的镜像指向新版本的服务中去。也支持在测试环境中的服务之间注入错误以测试恢复能力。
-
可观察性:深入了解服务是如何链接都他们之间的流量的。获取集群中所有通信量以及出入口的 metrics,日志和 trace。为应用程序添加分布式 trace 功能。
service mesh 通常由控制面板和数据面板组成。
控制面板有许多组件支持管理 service mesh。通常包括一个管理接口,可以是 UI 或者 API。 通常还会有一些组件管理规则和策略定义,这些定义决定了 service mesh 应该如何实现特定功能。 还有一些组件可以管理安全性的各个方面,比如 mTLS 的强校验和证书。 service mesh 通常还有一个具有度量或可观察性的组件,用于从工作负载收集和聚合 metrics 和 telemetry。
数据面板通常由一个代理组成,该代理作为一个 sidecar 透明地注入到工作负载中。这个代理配置用来控制所有进出,包含工作负载的 pod 的网络流量。这允许将代理配置为通过 mTLS 保护流量,动态路由流量,对流量应用策略以及收集 metrics 和跟踪信息。
每个 service mesh 都有一个自然的匹配,并专注于支持特定的场景,但是通常会发现,大多数 service mesh 都将实现以下一些功能。
-
协议——7层协议(http,grpc)
-
动态路由——条件,加权,镜像
-
弹性——超时,重试,熔断器
-
策略——访问控制,速率限制,配额
-
测试——故障注入
-
加密——mTLS,证书管理,外部 CA
-
强认证——SPIFFE 或类似的认证
-
权限——认证,授权
-
Metrics——metrics,prometheus,grafana
-
Tracing——跨工作负载的跟踪
-
流量——集群,入口/出口
-
Supported Compute——Kubernetes, 虚拟机
-
多集群——网关,联合