目录
本期我们将介绍一系列的服务网格工具,这些工具为实现微服务提供了安全性、金丝雀部署、遥测、负载平衡等功能。
下面就让我们从介绍什么是服务网格开始吧!
在软件架构中, 服务网格 是一个专用的基础设施层,用于促进服务或微服务之间的服务到服务通信
如果想管理、监控和保护所有微服务之间的通信怎么办?这便是服务网格的用武之地。
服务网格是一种为微服务提供抽象层的工具。它们在服务之间提供智能路由、弹性和负载平衡功能,具有比传统解决方案更好的容错能力。
总体而言,服务网格管理所有服务到服务的通信。它拦截服务之间的所有流量。此外,我们还可以以声明方式管理所有服务网格功能,就像在 Kubernetes 中部署对象一样。
服务网格本质上主要使用 sidecar 代理来管理多个微服务之间的流量。
/ 服务网格工作原理
使用服务网格有很多好处,包括:
通过提供通信加密来提高安全性
通过可观察性工具简化调试过程
通过智能故障转移功能、水平可扩展性和跨容器或机器的分布式跟踪而带来的更高可用性
服务网格旨在提供以下功能:
路由和负载平衡服务发现
身份验证和授权
金丝雀部署
断路、速率限制、健康检查和重试预算
相互传输级别安全 (mTLS) 和访问控制列表。
通过分布式跟踪实现可观察性
服务到服务通信的访问日志
在大多数情况下,与应用程序容器一起运行的 sidecar 容器负责所有上述功能。我们不必专门设计应用程序来使用服务网格。此外,不需要额外的工具来监控具有服务网格功能的服务。
以下是一些主流的好用服务网格工具。
Istio最初由 Google 开发,现已开源。它提供了一种连接、管理和保护相互通信的微服务的方法。
Istio 的安全功能包括加密传输中的服务之间的所有通信以及为授权用户提供身份验证凭据。Istio 还提供诸如跨容器或机器的分布式跟踪等功能,而无需在单个节点内使用第三方软件代理。
Istio已 被 Adobe、百度和谷歌等许多公司用于生产,以下是一些 Istio 生产故事:
Hellofresh Learnings 在生产中运行 Istio:
https://engineering.hellofresh.com/everything-we-learned-running-istio-in-production-part-1-51efec69df65
Service Mesh In Production: An Istio Story:
https://blog.cult.fit/posts/service-mesh-in-production-an-istio-story
Linkerd是一个开源服务网格,可以在 Kubernetes 或 Mesos 集群上运行,专为管理大量微服务的大规模环境而设计。
Linkerd 还将提供监控、跟踪、路由、负载均衡等功能以及跨集群的自动部署升级。
Cilium 是用于容器和微服务的开源、轻量级网络和安全解决方案。它使用 Linux 内核的BPF(伯克利包过滤器)技术为容器和微服务提供透明度、可见性和安全性。Cilium 提供了一种灵活的方式来容器化和微服务化应用程序,而无需绑定到任何特定的编排解决方案。
Cilium 是一种无需更改任何代码即可提高容器化应用程序的安全性和网络的简单方法。Cilium 与 Docker、Kubernetes 和 Mesos 等流行的编排解决方案集成,并且可以与任何基于 Linux 的应用程序一起使用。
如果你正在寻找一种轻量级、易于使用的解决方案来保护和联网你的容器和微服务,Cilium 将是你的正确选择。
Consul connect 是 Hashicorp 的服务网格解决方案。
Consul 最初是为服务发现而设计的。但是,使用 consul connect,服务网格部署在 consul 之上,并提供服务发现、配置同步和故障检测。
Consul connect 可以在有或没有 Kubernetes 的情况下在生产环境中运行。
Traefik Mesh 是一个简单的服务网格解决方案,主要用于负载均衡。
Traefik Mesh 是流行的反向代理 Traefik 的插件,它有助于服务发现和服务之间的路由以平衡工作负载,它还提供 SSL 终止和 Web 套接字代理等功能。
Open Service Mesh (OSM) 是一种轻量级、可扩展的云原生服务网格,支持动态服务发现、监控和路由。
OSM 在所有级别都可插拔,以提供最适合你的功能:
服务发现:第四层 (IP) 或第七层 (URL)
监控:基于 Prometheus 的指标,后端支持 Graphite、InfluxDB 和 Elasticsearch
路由:HAProxy 作为服务之间的代理,通过集群中 pod 之间的请求负载平衡来提供高可用性。它还提供 SSL 终止和 Web 套接字代理等功能,因此如果它们运行在不安全的协议(如纯文本 TCP/UDP 连接)上,你不必自己担心这些事情。这有助于确保访问控制,仅允许来自授权 IP 的流量通过服务网格。
Nginx 服务网格是用于 Kubernetes 的轻量级服务网格,具有零信任环境,可在容器之间提供加密流量。
它使用由 Nginx Plus 提供支持的数据平面来管理容器之间的数据流量。Nginx 服务网格主要关注以下内容:
安全性:服务之间的 mTLS 加密流量。
流量管理:具有速率限制和断路器的服务之间的策略管理流量控制。
可视化:内置的 grafana 仪表板提供对 NGINX 和指标的可见性。
混合部署:遗留应用程序可以通过 Nginx 入口控制器与服务网格社区。
Kuma 服务网格最初由 Kong, Inc创建,现在是 CNCF 沙箱项目。它建立在 Envoy 代理之上。它可以作为 kubernetes 集群和虚拟机的服务网格。
以下是 Kuma 的主要特点:
通用控制平面
轻量级数据平面
多网格
mTLS 和 TLS 轮换
故障注入
流量追踪和流量指标
平台无关
透明代理
以下是其他基于 CNCF 的服务网格工具:
Meshery
Gloo Mesh
Grey Matter
Service Mesh Interface
Network Service Mesh
以下是一些云管理的服务网格服务:
AWS 应用网格
Anthos 服务网格
红帽的 OpenShift 服务网格
在我们选择合适的服务网格时,首先要深入挖掘服务网格的特性。我们应该确保能够使用服务网格工具提供的功能适应组织的需求。
其次,还需确认团队是否具备实施和管理该工具的技能。初始设置总是很容易,真正的麻烦在于它的生命周期管理。因此,应该选择适合我们项目需求的最佳选项。