什么是服务网格以及它与 Kubernetes 的比较


服务网格(例如开源项目 Istio)是一种控制应用程序不同部分如何共享数据的方法。与其他用于管理此通信的系统相比,服务网格是直接构建到应用程序中的专用基础设施层。此可见的基础设施层可以记录应用程序的不同部分如何(或不好地)交互,从而更容易优化通信并在应用程序增长时避免停机。

随着越来越多的组织采用微服务架构,管理这些服务之间复杂的交互变得越来越具有挑战性。服务网格和 Kubernetes 是以不同方式解决此问题的两种解决方案。本文将解释什么是服务网格以及它与 Kubernetes 的比较。

什么是服务网格?

服务网格是一个专用的基础设施层,用于管理微服务架构中服务之间的通信。它包括诸如流量管理、服务发现、负载均衡、安全性和可观察性等功能。服务网格通过在每个服务实例旁边插入一个代理(也称为 sidecar)来实现这一点,该代理管理服务之间的通信。

服务网格实现为一组与应用程序代码一起部署的代理。这些代理充当中介,拦截和管理服务之间所有传入和传出的流量。代理通常使用开源项目(如 Envoy、Linkerd 或 Istio)来实现。

使用服务网格,您可以将应用程序的业务逻辑与可观察性和网络和安全策略分离。您可以使用服务网格来连接、保护和监控您的微服务。

  • 连接  服务网格允许服务相互发现和通信。它提供了更有效的服务/端点之间流量和 API 调用的路由。

  • 安全  服务网格提供服务之间可靠的通信。服务网格可用于实施允许或拒绝连接的策略。例如,您可以配置系统以阻止在开发环境中运行的客户端服务访问生产服务。

  • 监控 服务网格使您的微服务系统可见。服务网格可以与现有的监控技术(如 Prometheus 和 Jaeger)配合使用。

    这些关键功能提供了对构成复杂云原生应用程序的分布式微服务完整网络的控制。

这些关键功能提供了对构成复杂云原生应用程序的分布式微服务完整网络的控制。

服务网格如何工作?

服务网格是用于管理微服务架构中服务之间通信的专用基础设施层。它通过提供高级流量管理功能(如负载均衡、服务发现、流量加密和可观察性)来提高微服务的性能和可靠性。

服务网格构建为一组与应用程序代码一起运行的代理。这些代理充当中介,拦截和管理服务之间所有传入和传出的流量。代理通常使用开源项目(如 Envoy、Linkerd 或 Istio)构建。

服务网格和 Kubernetes 如何交互?

如果您只是部署一个没有服务网格的基本 Kubernetes 集群,您将遇到以下问题:

  • 没有服务间安全性。

  • 跟踪服务延迟问题是一项艰巨的任务。

  • 负载均衡受到限制。

如您所见,服务网格填补了 Kubernetes 中的空白。换句话说,服务网格是 Kubernetes 的附加组件。

谁在构建服务网格解决方案?

三大服务网格提供商是:

  • Istio

  • Consul

  • Linkerd

让我们更深入地了解一下每个。

Istio

Istio 是一个基于 Kubernetes 的平台。Lyft 创建了 Istio,现在得到了 Google、IBM 和 Microsoft 的投资和支持。

Istio 使用 sidecar 加载的代理来分离其数据和控制平面。sidecar 存储信息以避免每次调用都必须返回到控制飞机。控制平面由 Kubernetes 集群作为 Pod 管理。这种配置在服务网格的任何区域中单个 Pod 发生故障时提供了更高的弹性。

Consul 

Consul Consul 是一个功能齐全的服务管理框架。Consul 最初是作为管理基于 Nomad 的服务的机制而创建的,现在已扩展到包括各种不同的数据中心和容器管理技术,包括 Kubernetes。

Linkerd

Linkerd 是另一个流行的服务网格,它运行在 Kubernetes 之上,并且由于 v2 中的重写,其架构与 Istio 的架构非常相似。区别在于 Linkerd 优先考虑简单性。

服务网格与 Kubernetes 的比较如何?

虽然 Kubernetes 是一个用于管理容器化应用程序的绝佳解决方案,但它没有提供与服务网格相同级别的网络和通信功能。尽管 Kubernetes 包括一些网络功能,例如负载均衡和服务发现,但它没有提供与服务网格相同级别的控制和灵活性。

另一方面,服务网格提供了一个专门的基础设施层来管理服务之间的通信,并具有高级功能,如流量管理、负载均衡、服务发现和安全。这使开发人员能够添加复杂的网络功能,而无需更改底层应用程序代码。

Kubernetes 和服务网格之间的另一个重要区别是,Kubernetes 专注于容器编排,而服务网格专注于服务之间的通信。Kubernetes 充当部署、扩展和管理容器化应用程序的平台,而服务网格充当管理这些应用程序之间通信的专用层。

后续步骤

服务网格不是可以独立设置和运行的解决方案。您的 DevOps 策略必须包含服务网格。您应该为后续步骤实施以下内容:

  • 您应该在云中运行解决方案。

  • 您的解决方案中应该使用容器(例如 Docker)。

  • 要管理您在云上的容器,您应该使用 Kubernetes。

完成这三个步骤后,您现在就拥有了运行服务网格的基础。Istio 在 AWS、Microsoft Azure、Google Cloud 和 IBM 上更易于设置。原因是每个供应商都在投资 Istio 的开发。此外,围绕 Istio 的 DevOps 社区比竞争技术更强大。话虽如此,服务网格市场仍处于起步阶段。其他具有更简单设置和更多功能的设备有很大的进入市场空间。

结论

最后,服务网格是用于管理分布式系统中服务之间通信的有效工具。虽然 Kubernetes 是一个强大的容器编排平台,但它缺乏服务网格的网络和通信功能。服务网格通过提供一个专门的基础设施层来协调服务之间的通信,使开发人员能够轻松地整合复杂的网络功能,而无需修改底层应用程序代码。无论您是在开发微服务架构还是大型分布式系统,服务网格都可以成为管理应用程序网络基础设施的绝佳工具。

更新于: 2023年4月27日

469 次查看

开启你的职业生涯

通过完成课程获得认证

开始
广告