Istio和服务网格的未来

通过Istio推广“服务网格”的概念并不是一件容易的事。在我们深入了解Istio的详细信息之前,让我们简要介绍一下服务网格是什么。

我们都知道与单体架构相关的固有挑战,显而易见的解决方案是将它们分解为微服务,虽然这简化了单个服务,但连接、监控和保护数百甚至数千个微服务并不简单,直到最近,解决方案还是使用自定义脚本、库,负责管理这些分布式系统的专用工程师将它们串联在一起,这降低了许多前沿技术的发展速度并增加了维护成本,这就是服务网格的用武之地。

服务网格提供了一种透明且与语言无关的方式,可灵活轻松地自动化网络,安全和遥测功能,实质上,它将服务的开发和运营分离,因此,如果你是开发人员,则可立即部署新服务以及对现有服务进行更改,而无需担心这将如何影响分布式系统的操作属性。同样,运维人员可以无缝地修改服务之间的操作控制,而无需重新部署或修改其源代码,服务与其底层网络之间的这一层基础设施通常被称为服务网格。

在Google中,我们使用分布式平台来构建服务,由可以处理各种内部和外部协议的代理提供支持,这些代理由控制面板支持,该平台是在开发人员和运营人员之间提供中间抽象层,并让我们跨多种语言和平台地管理服务,该体系结构经过严格的测试,可以处理高可扩展性,低延迟,并为Google上运行的每项服务提供丰富的功能。

早在2016年,我们就决定建立一个用于管理微服务的开源项目,该项目在很多方面模仿我们在Google中使用的内容,我们决定将其称为“ Istio ”。为什么这个名字?因为希腊语中的Istio意味着“帆”,而Istio开始是与Kubernetes一起使用的解决方案,在希腊语中意为“舵手”或“飞行员”。值得注意的是,Istio与部署环境无关,并且旨在帮助管理跨多个环境运行的服务。

大约在我们启动Istio项目的同时,IBM发布了一个名为Amalgam8的开源项目,这是一个基于内容的微服务路由解决方案,基于NGINX,他们意识到与我们的用例和产品愿景的重叠,IBM同意成为我们的合作伙伴并搁置Amalgam8,支持与Lyft's Envoy一起建立Istio 。

Istio如何运作?
从广义上讲,Istio服务网格分为
1)以Envoy代理构建的数据平面,它拦截流量并控制服务之间的通信; 2)在运行时通过提供策略实施,遥测收集和证书轮换支持服务的控制平面。

[img index=1]

1.代理
Envoy是一个用C ++的高性能的开源分布式代理,Envoy作为边车部署,拦截所有传入和传出的流量,以应用网络策略并与Istio的控制平面集成,Istio利用Envoy的许多内置功能,例如发现和负载平衡,流量分配,故障注入,断路器和分阶段部署。

2.Pilot
作为控制平面的一个组成部分,Pilot管理代理配置并将服务通信策略分发给Istio网格中的所有Envoy实例。它可以采用高级规则(如推出策略),将它们转换为低级Envoy配置,并将它们推送到边车,无需停机或重新部署。虽然Pilot与底层平台无关,但运营人员可以使用特定于平台的适配器将服务发现信息推送到Pilot。

3.Mixer
Mixer将丰富的基础设施后端系统生态系统集成到Istio中,它通过可插拔的适配器集使用标准配置模型实现,该模型允许Istio轻松与现有服务集成。适配器扩展了Mixer的功能,并公开了用于监视,记录,跟踪,配额管理等的专用接口。适配器按需加载,并在运行时根据操作员配置使用。

4.Citadel堡垒
Citadel(以前称为Istio Auth)通过网格执行服务到服务通信的证书签名和轮换,提供相互身份验证和相互授权。Envoy在每次呼叫时使用Citadel证书透明地注入相互TLS,从而使用身份和凭证自动管理来保护和加密你的流量。正如Istio中的主题一样,身份验证和授权可以配置为最少到没有服务代码更改,并且可以跨多个集群和平台无缝地工作。

为什么要使用Istio?
Istio是高度模块化的,可用于各种用例。虽然涵盖每一个好处超出了本文的范围,但让我一瞥它如何简化netops,secops和devops的日常生活。

1.弹性
Istio可以保护应用程序免受网络故障和由此引起的级联故障的影响。如果你是网络运维人员,则可以使用故障注入等功能系统地测试应用程序的弹性,以注入延迟并隔离故障。如果要将流量从一个版本的服务迁移到另一个版本,则可以通过基于权重的流量路由逐步部署来降低风险。或者甚至更好,可以将实时流量镜像到新部署,以观察它在执行实际迁移之前的行为方式。还可以使用Istio Gateway对传入和传出流量进行负载平衡,并应用路由规则(如超时,重试和断路)以减少潜在故障并从中恢复。

2.安全
Istio的主要用处之一是保护异构部署之间的服务间通信。实质上,安全运营商现在可以统一且大规模地启用流量加密,锁定对服务的访问而不破坏其他服务,确保相互身份验证,使用ACL将服务列入白名单,授权服务到服务通信并分析应用程序的安全状态。他们可以跨服务,命名空间或网格范围实现这些策略。所有这些功能都可以减少对防火墙层的需求,并简化安全操作员的工作。

3.观测
能够可视化基础架构中发生的事情是微服务环境面临的主要挑战之一。直到最近,单个服务必须进行广泛的检测,才能对服务交付进行端到端的监控。除非你有一个专门的团队愿意调整每一个二进制文件,否则整个系统的整体视图和故障排除瓶颈可能非常麻烦。

使用Istio,可以获得关键指标的可视化以及跟踪服务中请求流的能力,从而能够执行基于应用程序指标启用自动缩放的操作。虽然Istio支持Prometheus,Stackdriver,Zipkin和Jaeger等众多产品,但它是后端不可知的。因此,如果你找不到所需内容,可以随时编写适配器并将其与Istio集成。

Istio and the Future of Service Meshes