1.5 Istio服务网格

Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网格,并提供负载均衡、服务间认证以及监控等能力,关键的一点是并不需要修改太多服务就可以实现上述功能。Istio本身是一个开源项目,它提供了一致的方式用于连接、加固、管理和监控微服务,最初是由Google、IBM和Lyft创建的服务网络的开源实现。Istio可以帮助你以透明的方式为服务架构添加弹性和可观察性能力。使用Istio,应用程序不必知道它们是服务网格的一部分。每当应用程序与外界交互时,Istio将代表应用程序处理网络流量。这意味着如果你正在做微服务,Istio可以带来很多好处。

Istio主要提供以下功能:

·流量管理,控制服务之间调用的流量和API调用,使得调用更可靠,并使网络在恶劣情况下更加健壮。

·可观测性,获取服务之间的依赖,以及服务调用的流量走向,从而提供快速识别问题的能力。

·策略执行,控制服务的访问策略,不需要改动服务本身。

·服务身份和安全,为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

Istio第一个生产可用版本1.0于2018年7月31日正式发布,并于2019年3月发布版本1.1。之后,社区按照快速迭代的方式,在三个月内接连发布了10个小版本。截至本书完稿之际,社区已经发布了1.4版本。

Istio的数据平面默认使用Envoy代理,开箱即用,可帮助你配置应用程序以在其旁边部署服务代理的实例。Istio的控制平面由一些组件组成,这些组件为最终用户和运维人员提供运维API、代理的配置API、安全设置、策略声明以及其他更多功能。我们将在本书的后续部分介绍这些控制平面组件。

Istio最初是为在Kubernetes上运行而构建的,但却是从部署平台中立的角度实现代码的。这意味着你可以在Kubernetes、OpenShift、Mesos和Cloud Foundry等部署平台上利用基于Istio的服务网格,甚至可以在虚拟机、物理裸机上部署Istio环境。在后面的章节中,我们将展示Istio对于包括私有数据中心在内的云组合的混合部署来说有多强大。在本书中,我们将优先考虑在Kubernetes上进行部署,在后面更高级的章节中会引入虚拟机等环节。

Istio在希腊语中的意思是“启航”,而Kubernetes在希腊语中可以翻译为“舵手”或“驾驶员”。所以从一开始Istio就期望与Kubernetes很好地配合,高效地运行分布式微服务架构,并提供安全、连接和监控微服务的统一方法。

通过每个应用程序实例旁边的服务代理,应用程序不再需要具有特定于语言的弹性库来实现熔断、超时、重试、服务发现、负载均衡等功能。此外,服务代理还处理度量标准收集、分布式跟踪和日志收集等。

由于服务网格中的流量流经Istio服务代理,因此Istio在每个应用程序中都有控制点来影响和指导其网络行为。这允许服务运维人员可以控制路由流量,并通过金丝雀部署、暗启动(Dark Launch)、分级滚动和A/B测试来实现细粒度部署。我们将在后面的章节中探讨这些功能。