9

基于Kubernetes的服务网格介绍

 4 years ago
source link: http://dockone.io/article/9619
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在Kubernetes和微服务之间,服务网格提供了重要的一层。

eUFRFbM.png!web

服务网格与Kubernetes和微服务结合的必要性

Kubernetes已经解决了容器编排的问题,对于云原生生态圈来说,剩下的问题是如何使微服务的交付更有效和更有弹性。这个问题可以通过服务网格技术来实现。

近年来,像Istio, Envoy and Linkerd这样的开源服务网格项目越来越受欢迎。本文主要探讨服务网格的基本原理,单个vanilla Kubernetes面临的挑战,并介绍了几种Kubernetes服务网格产品。

什么是服务网格?

服务网格是一个网络基础设施层,应用程序不同部分之间的通讯通过它来控制和可视化。现在的应用往往都是通过这种方式工作的。网络被分成不同的部分,每个部分都是一个服务,每个服务执行特定的业务功能。

一个服务可能需要从其它服务请求数据才能执行自身的功能。通常,有些服务会因为请求过量而超载,这就是服务网格有用的地方。服务网格通过把请求从一个服务路由到另外一个服务,来优化不同部分之间的通信。

服务网络组建包括:

  • 控制平面:主要负责代理配置,策略管理和TLS证书权限。控制平面搜集所有的网络度量数据。服务网格的一些实现也能够跟踪服务。
  • 数据平面:由轻量级代理组成。这些代理作为边车形式分布。代理包括Envoy或者NGINX。您可以使用数据平面去创建自己的Kubernetes服务网格。

普通vanilla Kubernetes面临的挑战及服务网格对此发挥的作用

当您使用一个普通的vanilla Kubernetes集群而不是服务网格时,你将遇到以下的问题:

服务器之间的安全通讯

普通vanilla Kubernetes并不对集群节点间的流量进行加密,因此,服务之间的通信并不安全。 您可以使用TLS证书使得Kubernetes服务之间的通信变得安全。

使用TLS意味着DevOps团队必须管理和更换证书。此外,您的开发团队必须将TLS证书集成到每个服务中。

服务网格会加密所有的网络流量,从而使您的团队节省了时间。服务网格将TLS边车插入到每个Kubernetes Pod中,通过控制平面为您进行证书的更换。

服务延迟追踪

单个vanilla Kubernetes集群故障排除并不是每次都会给您提供造成问题的根源。例如,对于延迟问题,您必须分析单个服务的数据。然而,这些数据可能与外部服务的通信无关。造成问题的原因,有可能与查询或者前端应用有关。

要解决这个问题,您必须监控代码的性能,分析错误并且跟踪应用程序中的每个服务请求。像Istio这样的服务网格平台提供了内置的分布式跟踪,并且不需要对代码进行检测。

服务网格使用代理边车通过出口和入口路由流量。然后边车添加请求头信息,方便请求跟踪,因此,您不需要分析代码就能获得所有请求的跟踪信息。

有限负载均衡

当前端需要处理更多流量时,如何更快的精确定位流量瓶颈并扩大前端规模?单纯的Kubernetes并不能提供解决方式。另一方面,服务网格提供了内置的度量标准,您可以利用这些度量来实现更先进的负载平衡。

不同的Kubernetes服务网格实现

下面的列表回顾了三种目前存在的Kubernetes服务网格产品。列表明确指出了选择不同服务网格产品时的重要差异。

Istio

Istio是一个开源的服务网格,主要用于管理多个服务代理。Istio由Google, IBM和Lyft联合研发。最开始仅针对Kubernetes部署,后又重新设计以支持所有的微服务平台。Istio默认与Envoy代理集成。Istio更关注可伸缩性、性能、可移植性和保持松散耦合组件的灵活性。

Istio的控制平面使用Go语言编写。操作人员使用控制平面来组合不同的管理策略,每个控制平面组件都被设计用于不同的应用程序,因此Istio可以与不同的底层数据平面配对使用。

Istio的主要功能包括:

  • 安全特性,包括RBAC、身份和密钥管理。
  • 高级限流、策略和配额
  • 支持HTTP/1.x、HTTP/2、GRPC、WebSockets和所有TCP流量
  • 故障注入
  • 多平台、混合部署

Linkerd

Linkerd是2016年2月发布的开源服务网格项目,是服务网格家族的第一个产品。平台的服务网格设计很强大且功能很丰富,可以运行在任何环境。Linkerd基于Finagle库,用Scala语言编写。它可以通过扩展,每秒管理数千个请求。

Linkerd的包由一个控制平面和一个代理数据平面组成。Linkerd还有一个由Buoyant支持的商业版。当前Linkerd版本包含服务网格接口(SMI)流量API,此API能够帮忙您自动化Canary部署和其它的高级交付方法。

Linkerd的主要功能包括:

  • 支持不同的平台,比如Kubernetes,Docker,Amazon ECS,DC/OS
  • 使用内置的服务发现抽象统一多个系统
  • 支持HTTP/1.x、HTTP/2、GRPC、WebSockets和所有TCP流量

AWS应用程序网格

AWS应用程序网格是一种服务网格解决方案,它简化了AWS中的微服务监控和管理,使您能够控制AWS服务(比如ECS、EKS、EC2)之间的通信和网络流量。此外,应用程序网格使您能够监视、跟踪和查看微服务日志记录。

您可以在应用程序中部署应用程序网格的数据平面,但控制平面由Amazon管理,用户无法访问它。

结论

希望本文能帮助您了解什么是服务网格,以及如何使用这些工具,也希望帮助您确定在哪里开始您的服务网格之旅。

评估服务网格选型需要全面研究,本文仅介绍了目前存在的三种方式。在决定一个解决方案之前,一定要尝试不同的选择,看看哪个最适合您的环境。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK