服务网格是什么?它与Kubernetes有何不同?
服务网格,例如开源项目Istio,是一种控制应用程序不同部分共享数据的方法。与管理此通信的其他系统相比,服务网格是直接构建在应用程序中的专用基础设施层。这个可见的基础设施层可以记录应用程序中不同部分的交互情况,从而更容易优化通信并避免应用程序增长时的停机时间。
随着越来越多的组织采用微服务架构,处理这些服务之间的复杂交互可能会成为一个重要的挑战。服务网格和Kubernetes是两种处理这个问题的解决方案。本文将解释什么是服务网格,以及如何与Kubernetes比较。
什么是服务网格?
服务网格是一种专门的基础设施层,用于管理微服务架构中的服务与服务之间的通信。它包括流量管理、服务发现、负载均衡、安全和可观察性等功能。服务网格通过在每个服务实例旁边插入代理(也称为sidecar)来实现这一点,从而管理服务之间的通信。
服务网格是由与应用程序代码一起部署的代理集合实现的。这些代理充当中间人,拦截和管理服务之间的所有传入和传出流量。代理通常使用开源项目Envoy、Linkerd或Istio实现。
使用服务网格,你可以将应用程序的业务逻辑与可观察性、网络和安全策略分离开来。你可以使用服务网格来连接、保障和监控你的微服务。
- 连接 - 服务网格允许服务相互发现和通信。这提供了更有效的流量路由和服务/端点之间的API调用。
-
保障 - 服务网格提供了可靠的服务之间通信。服务网格可用于执行允许或拒绝连接的策略。例如,你可以配置系统以防止在开发环境中运行的客户端服务访问生产服务。
-
监控 服务网格使您的微服务系统可见。服务网格可以与现有监视技术(如Prometheus和Jaeger)一起使用。
这些关键功能提供了对包含复杂云原生应用程序的分布式微服务网络的完全控制。
服务网格如何工作?
服务网格是一个专门的基础设施层,用于管理微服务架构中的服务与服务之间的通信。它通过提供高级流量管理功能,例如负载均衡、服务发现、流量加密和可观察性,来提高微服务的性能和可靠性。
服务网格是作为一组代理构建的,这些代理与应用程序代码一起运行。这些代理充当中间人,拦截和管理服务之间的所有传入和传出流量。代理通常使用开源项目Envoy、Linkerd或Istio建立。
服务网格和Kubernetes如何交互?
如果仅部署基本的Kubernetes集群而没有服务网格,你将会遇到以下问题 –
- 服务之间没有安全保障。
-
跟踪服务延迟问题是一个困难的任务。
-
负载均衡受到限制。
如你所见,服务网格填补了Kubernetes的空缺。换句话说,服务网格是Kubernetes的附加功能。
谁在构建服务网格解决方案?
三个最高的服务网格提供商是 –
- Istio
-
Linkerd
让我们详细了解每个。
Istio
Istio是一个基于Kubernetes的平台。Lyft创建了Istio,现在得到了Google、IBM和Microsoft的投资和支持。
Istio使用一个加载了sidecar的代理来分离其数据和控制平面。sidecar存储信息,以避免为每个调用返回到控制机。控制平面由Kubernetes集群的pod管理。这种配置在服务网格的任何地区单个pod故障时提供了更强大的容错性。
Consul
Consul Consul是一个功能齐全的服务管理框架。Consul最初是一种管理基于Nomad的服务的机制,现在已扩展到包括各种数据中心和容器管理技术,包括Kubernetes。
Linkerd
Linkerd是另一个常用的服务网格,运行在Kubernetes之上,其架构与Istio类似,得益于v2的重写。区别在于Linkerd优先考虑简单性。
服务网格与Kubernetes有何不同?
虽然Kubernetes是管理容器化应用程序的绝佳解决方案,但它不提供与服务网格相同级别的网络和通信功能。虽然Kubernetes包括一些网络功能,如负载均衡和服务发现,但它不提供与服务网格相同量级的控制和灵活性。
另一个Kubernetes和服务网格之间的重大区别是,Kubernetes专注于容器编排,而服务网格专注于服务与服务之间的通信。Kubernetes作为部署、扩展和管理容器化应用程序的平台,而服务网格作为专门管理这些应用程序之间通信的层。
下一步
服务网格不是可以独自设置和运行的解决方案。 您的DevOps策略必须包括服务网格。 您应该为下一步采取以下措施 –
- 你应该在云端运行解决方案。
-
应该在你的解决方案中使用容器(如Docker)。
-
要在云上管理容器,你应该使用 Kubernetes。
完成这三个步骤后,现在你已经有了运行服务网格的基础。在AWS、Microsoft Azure、Google Cloud和IBM中,使用Istio设置更为简单。这是因为每个供应商都在投资于Istio的开发。此外,Istio周围的DevOps社区比其他竞争技术更强大。话虽如此,服务网格市场仍处于萌芽阶段。其他设备有更简单的设置和更多的功能,它们进入市场的空间很大。
结论
最后,服务网格是管理分布式系统中服务之间通信的有效工具。虽然Kubernetes是强大的容器编排平台,但它缺乏服务网格的网络和通信能力。服务网格允许开发人员轻松地将复杂的网络功能纳入解决方案,而无需修改底层应用程序代码,提供了一个专用的基础设施层来协调服务之间的通信。服务网格可以成为管理您应用程序的网络基础设施的伟大工具,无论您是开发微服务架构还是大型分布式系统。