了解谷歌的Istio开源项目如何管理连接微服务网络的复杂性。
微服务架构解决了一些问题但引入了其他问题。将应用程序划分为独立服务可简化开发,更新和扩展。同时,它提供了更多连接和安全的移动组件。管理所有网络服务,负载平衡,流量管理,身份验证和授权等,可能变得非常复杂。
Kubernetes集群中的服务之间存在网络空间的统称:service mesh。Googlede 项目Istio就是提供一种方法来管理群集的service mesh,避免其变成滕枝一样的混乱。
什么是service mesh?
对于任何一组网络应用程序,都会出现大量常见的行为。例如,负载平衡,很少有一组网络服务不需要这样做的情况。同样,能够A/B测试不同的服务组合,或跨服务链设置端到端身份验证。这些行为统称为service mesh。
管理service mesh不应该留给服务本身。他们中没有人能够胜任这种自上而下的工作,而且这也不应该是他们的工作。最好在服务和它们所访问的网络之间有一个独立的系统。这个系统将提供两项关键功能:
- 使服务本身不必处理管理网络流量负载平衡,路由,重试等的细节。
- 为管理员提供一个抽象层,可以轻松地在集群策略控制,度量和日志记录,服务发现,通过TLS进行安全的服务间通信等方面制定有关网络流量的高级决策。
Istio service mesh组件
通过为集群,数据平面和控制平面提供两个基本架构,Istio可用作service mesh。
数据平面处理网格中服务之间的网络流量。所有这些流量都被网络代理系统截获并重定向。在Istio的案例中,代理由一个名为Envoy的开源项目提供。数据平面中的第二个组件Mixer从Envoy收集遥测和统计数据以及服务到服务流量。
控制平面Istio的核心管理和保护数据平面。它配置了Envoy代理和混合器,它们为服务实施网络策略,例如谁可以与谁通话以及何时通话。控制平面还为数据平面及其所有行为提供编程抽象层。
Istio Pilot
Istio Pilot采用控制平面提供的流量行为规则,并根据本地管理的方式将它们转换为Envoy应用的配置。Pilot将允许Istio使用除Kubernetes之外的不同编排系统,但在它们之间表现一致。
Istio Citadel
Citadel控制服务之间的身份验证和身份管理。
IstioGallery
Gallery为Istio采用用户指定的配置,并将它们转换为其他控制平面组件的有效配置。 这是允许Istio透明地使用不同编排系统的另一个元素。
Istio service mesh功能
Istio提供的第一个也是最有价值的好处是抽象,一种处理服务网络复杂性的方法。可以通过命令Istio以编程方式对网格进行任何更改。连接到网格的服务不需要从内部重新编程以遵循新的网络策略或配额,并且它们之间的网络空间也不需要直接触摸。
此外,Istio允许对群集的网络配置执行非破坏性或暂时性更改。如果想要全新或部分推出新的网络布局,或者A/B测试当前配置的新配置,Istio允许以自上而下的方式执行此操作。如果这些更改结果不健康,也可以回滚这些更改。
第三个优点是可观察性。Istio提供有关容器和群集节点之间发生的事情的详细统计信息和报告。如果出现无法预料的问题,如果某些事情不符合政策,或者所做的更改会产生相反的效果,将能够在短时间内找到相关信息。
Istio还提供了实现在服务网格中看到的常见模式的方法。一个例子是断路器模式,如果后端报告故障并且无法及时满足请求,则可以防止服务被请求轰炸。Istio提供断路器模式作为其标准政策执行库的一部分。
最后,尽管Istio与Kubernetes最直接和最深入地工作,但它的设计与平台无关。Istio插入了Kubernetes自身所依赖的开放标准。Istio也可以在单个系统上独立工作,或者在Mesos和Nomad等其他编排系统上工作。
如何开始使用Istio
如果已经拥有Kubernetes的经验,那么学习Istio的一个好方法就是采用Kubernetes集群,而不是已经投入生产的集群! 并通过Helm图表安装Istio。然后,可以部署一个示例应用程序,演示常见的Istio功能,如智能流量管理和遥测。在为应用程序集群上的服务网格任务部署之前,这应该提供一些基础的Istio经验。
Red Hat已经将Istio作为公司Kubernetes支持的OpenShift项目的一部分进行投入,它提供的教程将引导你完成常见的Istio部署和管理方案。