在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)

简介: 在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)

Intenseye,我们 follow(跟随) trends(趋势) & hype(最被炒作) 的技术,并在使用时应用最佳实践。我们在用 ScalaGoPython 等编写的 Kubernetes 上运行了数百个 pod,其中大多数使用 gRPC


微信图片_20220612144057.png


gRPC 是一种现代开源高性能远程过程调用 (RPC) 框架,它使用 HTTP/2 进行传输。HTTP/2 支持通过单个 TCP 连接发出多个请求以减少往返次数。这就是问题出现的地方;负载均衡。建立连接后,所有请求都将固定到单个目标 Pod。因此,我们不会有平衡的负载。我们需要一个 L7 感知负载均衡器,而不是 L4。稍后您可以从这里阅读问题的详细信息。


https://linkerd.io/2018/11/14/grpc-load-balancing-on-kubernetes-without-tears


微信图片_20220612144128.png


我们正在为另一个问题寻求解决方案;微服务之间的安全传输。我们有数十个组件,总共运行数百个 Pod。在它们之间一一配置 TLS 令人生畏,而且会很耗时。


微信图片_20220612144140.png


我们还需要一个监控系统和来自所有这些组件和微服务的流量指标(traffic metrics)。我们想观察成功/失败(success/failure)率、PodRPS、谁与谁交谈的频率等。


我们有这三个问题的单一解决方案:Service Mesh

什么是 Service Mesh?


服务网格是一种工具,通过在平台层而不是应用程序层插入这些功能,为应用程序添加可观察性(observability)、安全性(security)和可靠性(reliability)功能。

(servicemesh.es)



服务网格通常作为与应用程序代码一起部署的一组可扩展的网络代理来实现;一种称为边车的模式。这些代理处理微服务之间的通信,并允许控制流量并获得整个系统的洞察力。Service Mesh 提供了很棒的功能,例如流量指标(traffic metrics)、熔断(circuit breaking)、mTLS、流量拆分(traffic split)、重试和超时(retry & timeout)、A/B 路由(routing)等。


微信图片_20220612144203.png

source: servicemesh.es

我们开始挖掘服务网格的细节并评估对我们很重要的功能,我们如何从中受益等。由于服务网格会影响延迟和资源消耗,因此也必须衡量这些缺点。由于我们有 500 多个 Pod,因此资源成本将是 500 x sidecar。另外,我们在与时间赛跑,所以延迟应该是最小的。


经过一些研究和 PoC,我们决定在 IstioConsulLinkerd2 之间使用 Linkerd2。我必须说,servicemesh.es 帮助我们获得了有关服务网格的知识并比较了它们之间的功能。


微信图片_20220612144234.png


除了我们正在寻求的功能之外,与 IstioConsul 相比,我们选择 Linkerd23 个原因。(L7 LBmTLStraffic metrics 等):


  • 轻量级(低 CPU 和内存消耗)
  • 低延迟
  • 延迟感知 LB


Istio 有很多不错的功能(感谢 Envoy 代理),但我们并不需要所有这些功能。与 Linkerd2 相比,它的 sidecar 代理 CPU 和内存消耗也很高。Consul 使用相同的 sidecar 代理,因此我们也将其删除。这里详细解释了为什么 Linkerd2 使用它自己的代理而不是 Envoy。另外,Linkerd2 非常好用。Istio 的文档实在太多了。


https://linkerd.io/2020/12/03/why-linkerd-doesnt-use-envoy/


Linkerd和“Cardi B”押韵。

“d”要分开发音,如“Linker-DEE”。

https://linkerd.io/faq/index.html#how-do-i-pronounce-linkerd


解决方案



问题 1:gRPC 负载平衡


微信图片_20220612144301.png


without mesh / with mesh

正如您在图中所见,有些 pods 像替罪羊,有些像树懒。网格后,一切都很好。


微信图片_20220612144312.gif

问题 2:mTLS


微信图片_20220612144328.png


感谢 Linkerd2 的 mTLS 功能,我们像 Thanos(灭霸) 一样,像弹指一样保护了微服务之间的内部通信。 Linkerd224 小时自动轮换一次证书。您也可以使用 cert-manager 来轮换颁发者证书和私钥。


问题 3:流量监控


微信图片_20220612144348.png


Linkerd2 与 Prometheus 和 Grafana 捆绑在一起,但您可以自带实例并通过官方文档对其进行配置。我们遵循文档并开始使用我们现有的实例。现在我们从每个网格化的 pod 中获得了很好的指标,并且我们对集群有了更好的可观察性。


结论


感谢 Linkerd2,我们解决了我们的问题,从此过上了幸福的生活。 文档非常清晰,入门页面很容易理解(+ 他们有演示应用程序。)当然,并非一切都是光明的。我们在网格划分 pod 时或网格后遇到的问题很少,但我们也解决了这些问题。甚至我们在 GitHub 上打开了一个问题并得到了帮助。


微信图片_20220612144413.jpg



所以这篇文章是我们服务网格之旅的第一部分,它是关于“什么是服务网格以及我们为什么选择 Linkerd2?” 在第二部分,我们将讨论我们面临的问题以及我们如何解决这些问题。

相关文章
|
6月前
|
Kubernetes 网络协议 数据库
在Service Mesh内访问网格外的服务
阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。
98 0
|
运维 监控 安全
什么是service mesh?
什么是service mesh?
Service Mesh 的实现,Google 的 Istio
Service Mesh 的实现,Google 的 Istio
96 0
|
负载均衡 Kubernetes Cloud Native
对 Service Mesh 望而却步?可能都没理解这一点
Service Mesh 发展已经有 6-7年的时间,很多人对 Service Mesh 只停留在知道的水平上,特别是很多技术人第一次接触到 Service Mesh,看到服务网格的解释,看到 Istio 的架构,对这门技术仍然云里雾里。实际上,劝退大多数人的不是技术,而是概念本身。
201 0
对 Service Mesh 望而却步?可能都没理解这一点
|
Kubernetes 测试技术 应用服务中间件
Kubernetes的service mesh – 第五部分:DogFood环境,Ingress和Edge路由
概述 在这篇文章中,我们将向您展示如何使用Linkerd实现的Service Mesh来处理Kubernetes上的入口流量,在Service Mesh中的每个实例上分发流量。我们还将通过一个完整的例子来介绍Linkerd的高级路由功能:如何将特定的请求路由到较新版本的应用实例上,比如用于内部测试的、预发布的应用版本。
1357 0
|
Kubernetes 监控 Devops
Service Mesh 介绍| 学习笔记
快速学习 Service Mesh 介绍
|
消息中间件 人工智能 Prometheus
在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)
在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)
149 0
在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)
|
负载均衡 监控 网络协议
Service Mesh之Sidecar
时间总是给你意外,在使用微服务架构吗?还在考虑使用哪种微服务架构呢?要准备大干一场,学习spring cloud吗? 还在纠结这些问题时,这些技术都将要被淘汰了,下一代微服务Service Mesh出现了
281 0
Service Mesh之Sidecar
|
Cloud Native 前端开发 Dubbo
到底谁才需要Service Mesh?(二)
到底谁才需要Service Mesh?(二)
133 0
到底谁才需要Service Mesh?(二)
|
监控 Cloud Native 网络协议
到底谁才需要Service Mesh?(一)
到底谁才需要Service Mesh?(一)
175 0
到底谁才需要Service Mesh?(一)