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的完美支持使得它在云原生下成为服务治理的宠儿。
标签:服务,Kubernetes,Envoy,Istio,流量,网格,初识,一点 From: https://blog.51cto.com/key3feng/5910095