服务网格(Service Mesh)是一种用于处理微服务架构中服务间通信的基础设施层。它的主要作用是提供可靠的服务发现、负载均衡、故障恢复、指标监控和安全性,通常无需对服务代码进行大量修改。服务网格通过在每个服务实例旁边部署一个轻量级代理(sidecar)来实现这些功能。
1.Istio#
Istio 是一个开源的服务网格(Service Mesh),透明地层叠到现有的分布式应用程序之上。Istio 强大的功能提供了一种统一且更高效的方式来保护、连接和监控服务。Istio 是实现负载均衡、服务间身份验证和监控的途径——几乎无需修改服务代码。它为你提供:
- 集群中服务间的安全通信,采用双向 TLS 加密,基于强身份的身份验证和授权
- HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡
- 通过丰富的路由规则、重试、故障切换和故障注入对流量行为进行细粒度控制
- 支持访问控制、速率限制和配额的可插拔策略层和配置 API
- 集群内所有流量(包括集群入口和出口)的自动化指标、日志和跟踪
参考:https://istio.io/latest/docs/overview/what-is-istio/
Istio 的流量管理模型源于和服务一起部署的 Envoy 代理。 网格内服务发送和接收的所有 data plane 流量都经由 Envoy 代理, 这让控制网格内的流量变得异常简单,而且不需要对服务做任何的更改。
Envoy 是在 Istio 里使用的高性能代理,用于为所有服务网格里的服务调度进出的流量。
参考:https://istio.io/latest/zh/docs/concepts/traffic-management/
2.Kong#
Kong 提供了两个主要产品:Kong Gateway 和 Kuma。
Kong Gateway 是一个云原生 API 网关,专注于管理、配置和路由 API 请求。它提供了强大的插件系统,可以扩展其功能以实现身份验证、速率限制、日志记录等功能。Kong Gateway 主要用于处理进出 API 的流量,但它不具备完整的服务网格功能。
Kuma 是 Kong 开发的一个服务网格,旨在简化服务间通信的管理。Kuma 提供了服务网格的所有核心功能,包括服务发现、负载均衡、故障恢复、可观察性和安全性。Kuma 可以部署在多个环境中,包括 Kubernetes 和虚拟机。