初步了解 Istio
Istio 是由 IBM、Google 和 Lyft 开发的服务网格开源的。它可以透明地接入分布式应用程序,并提供服务网格的三大优点——流量管理、安全性和可观察性。
Istio 支持各种微服务的部署环境,例如本地部署、云托管、Kubernetes 容器以及虚拟机上运行的服务程序。虽然 Istio 支持多种平台,但通常情况下还是与 Kubernetes 平台上部署的微服务一起使用。
从根本上讲,Istio 的工作原理是以 Sidcar 的形式将 Envoy 的扩展版本作为代理部署到每个微服务中。Istio 的组件较多,部署起来很复杂,在早期曾大受诟病,经过几次迭代后,已经只有控制面和数据面。
数据面
Istio 的数据面主要包括 Envoy 代理的扩展版本。Envoy 是一个开源的 Sidecar 模式的服务代理,可以将网络问题与应用程序分离开来。在部署了 Istio 的 Kubernetes 集群中,由于应用程序发送和接收的流量会被劫持到 Envoy 代理中,因此 Envoy 代理可以做到对应用程序的无侵入式接入。
Envoy 的核心是在 OSI 模型的 L3 和 L4 层运行的网络代理,它通过使用可插入的网络过滤器来执行连接处理。此外,Envoy 支持对 HTTP 的流量附加 L7 层过滤器,而且 Envoy 对 HTTP/HTTP2 和 gRPC 传输提供了非常好的支持。
Istio 作为服务网格,提供的许多功能实际上是由 Envoy 代理实现的,Envoy 代理内置的基础模块启用后就可以支持以下功能。
流量控制:Envoy 针对 HTTP/HTTP2、gRPC、WebSocket 和 TCP 流量,具备丰富路由规则和流量控制能力。
高级流量治理功能:Envoy 针对限速、限流、熔断、故障注入和自动重试等功能具备开箱即用的特性。
安全性:Envoy 可以实施安全策略,也可以对微服务之间的通信做访问控制。支持微服务之间通信的双向 TLS(Transport Layer Security,安全传输层)认证。
控制面
控制面负责管理和配置数据面中的 Envoy 代理。在 Istio 架构中,控制面的核心组件是 Istiod,Istiod 负责将高级路由规则和流量治理规则转换为特定于 Envoy 的配置,并在运行过程中下发给 Sidecar 容器。基于 Kubernetes 的可扩展性(可以自定义 CRD 和控制器),这些配置都被抽象为 Kubernetes 中的自定义资源并存储到 ETCD 中。
从根本上说,Istiod 仍使用与先前各个组件相同的代码和 API。例如,Pilot 负责抽象特定于平台的服务发现机制,并将其合成为 Sidecar 可以使用的标准格式。因此,Istio 可以支持针对多个环境(例如 Kubernetes 或虚拟机)的服务发现。
此外,Istiod 还提供安全性支持,通过内置的身份和凭据管理,实现了强大的服务到服务之间的最终用户身份验证。借助 Istiod,我们可以基于服务身份来实施安全策略,该过程也充当证书颁发机构并生成证书,以促进数据面中的 TLS 通信。
Istio 使用强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程、应用程序感知的网络。Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来标准且通用的流量治理、遥测和安全策略。
无侵入的流量治理
Istio 的流量路由规则让我们可以轻松控制服务之间的流量和 API 调用。Istio 简化了断路器、超时和重试等服务级别属性的配置,可以轻松实现一些流量治理功能,例如 AB 测试、基于百分比流量的部署。Istio 还提供了开箱即用的可靠性功能,可以帮助应用更灵活地应对相关服务或网络的故障。
Istio 的流量管理模型依赖于和服务一起部署的代理。我们的服务网格发送和接收的所有流量(数据面流量)通过 Envoy 进行代理,从而轻松引导和控制网格周围的流量,无须对服务进行任何更改。
时刻了解服务调用情况
Istio 为网格内的所有服务通信生成详细的遥测数据。这种遥测提供了服务行为的可观察性,使我们能够对应用程序进行故障排除、维护和优化,而不会给服务研发人员带来额外的负担。通过 Istio,我们可以全面了解受监控的服务如何与其他服务和 Istio 组件本身进行交互。
Istio 生成以下类型的遥测数据以提供服务网格整体的可观察性。
指标:Istio 根据监控的 4 个黄金信号(延迟、流量、错误和饱和)生成一组服务指标,还提供了网络控制面的详细指标,以及一组基于这些指标构建的默认网格监控仪表板。
分布式追踪:Istio 为每个服务生成分布式链路数据,让我们可以详细了解网格内的调用流和服务依赖关系。
访问日志:当流量流入网格内的服务时,Istio 可以生成每个请求的完整记录,包括源和目标元数据。
安全策略
将单体应用分解为原子服务有多种好处,包括更好的敏捷性、可扩展性、服务重用能力等。然而,微服务也有特殊的安全需求。
为了防御中间人攻击,微服务需要流量加密。
为了提供灵活的服务访问控制,需要双向 TLS 和细粒度的访问策略。
为了确定谁在什么时间做了什么,需要配置审计工具。I
Istio Security 提供了一个全面的安全解决方案。Istio 安全功能可以减少针对数据、端点、通信和平台的内部威胁和外部威胁。
Istio 安全功能提供强大的 TLS 加密策略以及身份验证、授权和审计工具来保护服务和数据安全。Istio 安全的目标如下。
默认安全:无须更改应用程序代码和基础架构。
纵深防御:与现有安全系统集成,提供多层防御。
零信任网络:在不信任的网络上构建安全解决方案。
在服务治理方面,Istio 提供了流量治理、遥测和安全三大能力。仅有这三大能力并不足以让它如此风靡,对应用程序的无侵入式接入和对 Kubernetes 的完美支持使得它在云原生下成为服务治理的宠儿。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/dbf623f4809a7598fb2b9c9b7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论