本文主要是对Istio Prelim 1.0(https://preliminary.istio.io/docs/)的翻译
Istio:一种开放式平台,用于连接,管理和保护微服务。 Istio提供了一种简单的方法,通过负载均衡,服务到服务认证,监控等创建已部署服务的网络,而无需对服务代码进行任何更改。您可以通过在整个环境中部署一个特殊的边车代理()来(sidecar proxy)添加Istio支持服务,该代理截取微服务之间的所有网络通信,使用Istio的控制平面功能进行配置和管理。
Istio目前支持在Kubernetes上部署服务,以及在Consul或Eureka注册的服务以及在单个VM上运行的服务。它负责所有服务之间的通信和协调,就像网络路由软件为 TCP/IP 流量所做的一样。
那么,Istio 是如何融入Kubernetes 生态系统的?Kubernetes 充当数据层,Istio 充当控制层。Kubernetes 承载应用程序流量、处理容器编排、部署和扩展。Istio 路由应用程序流量,处理策略执行,流量管理和负载均衡。它还处理遥测,如指标、日志和跟踪。Istio 是基于容器的基础设施中负责保护微服务和报告的部分。
为什么要用Istio?
Istio解决了开发者和运营商在面对单一应用程序向分布式微服务架构过渡时面临的许多挑战,服务网格(service mesh)通常用于描述构成这些应用程序的微服务网络以及它们之间的交互。随着服务网格的大小和复杂程度不断增加,可能会变得难以理解和管理。它的要求可以包括发现,负载平衡,故障恢复,度量和监控,以及更复杂的操作要求,如A / B测试,金丝雀版本,速率限制,访问控制和端到端身份验证。
Istio提供了一个完整的解决方案,通过对整个服务网格提供行为分析和操作控制来满足微服务应用程序的各种需求。 它在整个服务网络中统一提供许多关键功能:
-
Traffic Management:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
-
Service Identity and Security:在网格中提供具有可验证身份的服务,并提供保护服务流量的能力,因为流量通过不同程度的可信性网络流动。
-
Policy Enforcement:将组织策略应用于服务之间的交互,确保访问策略得到执行,资源在消费者之间公平分配。 通过配置网格来进行策略更改,而不是通过更改应用程序代码
-
Telemetry:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。
架构
Istio服务网格逻辑上分为数据平面和控制平面
-
数据层由一系列智能代理(Envoy)组成,这些智能代理部署为边车,用于调解和控制微服务之间的所有网络通信
-
控制层负责管理和配置代理以路由流量,并配置mixer以执行策略并收集telemetry。
Istio 为每项服务运行一个 Envoy 边车代理。Envoy 代理通过 GRPC 调用将入站请求转发至 Istio Mixer 服务。然后,Mixer 应用流量管理规则来聚合遥测元素。Mixer 是 Istio 的大脑。运维人员可以通过编写 YAML 文件来指定 Envoy 如何重定向流量,还可以指定将哪些遥测元素推送到监控系统和观测系统。我们可以在运行时根据具体情况应用相应的规则,无需重新启动任何 Istio 组件。
下图显示了组成每个平面的不同组件:
Envoy
Istio使用Envoy代理的扩展版本,Envoy是以C ++开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy的许多内置功能被istio发扬光大,例如动态服务发现,负载均衡,TLS终止,HTTP/2&gRPC代理,熔断器,健康检查,基于百分比流量拆分的分段推出,故障注入和丰富指标。
Envoy被部署为sidecar,和对应服务在同一个Kubernetes pod中。这允许Istio将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在Mixer中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。Sidecar代理模型还可以将Istio的功能添加到现有部署中,而无需重新构建或重写代码
Mixer
Mixer是一个独立于平台的组件,负责在整个服务网格中实施访问控制和使用策略,并收集来自Envoy代理和其他服务的遥测数据。代理提取请求级别属性,将其发送到mixer进行评估。 Mixer包含灵活的插件模型,可以与各种主机环境和基础设施后端进行交互,从这些细节中抽象出Envoy代理和Istio管理的服务。
Mixer提供三个核心功能:
-
前置条件检查(Precondition Checking):某一服务响应外部请求前,通过Envoy向Mixer发送Check请求,检查该请求是否满足一定的前提条件,包括白名单检查、ACL检查等。
-
配额管理(Quota Management):当多个请求发生资源竞争时,通过配额管理机制可以实现对资源的有效管理。
-
遥测报告上报(Telemetry Reporting):该服务处理完请求后,通过Envoy向Mixer上报日志、监控等数据。
Mixer适配器工作流程
-
Mixer server启动。
-
初始化adapter worker线程池。
-
初始化Mixer模板仓库。
-
初始化adapter builder表。
-
初始化runtime实例。
-
注册并启动gRPC server。
-
某一服务外部请求被envoy拦截,envoy根据请求生成指定的attributes,attributes作为参数之一向Mixer发起Check rpc请求。
-
Mixer 进行前置条件检查和配额检查,调用相应的adapter做处理,并返回相应结果。
-
Envoy分析结果,决定是否执行请求或拒绝请求。若可以执行请求则执行请求。请求完成后再向Mixer gRPC服务发起Report rpc请求,上报遥测数据。
-
Mixer后端的adapter基于遥测数据做进一步处理。
Pilot
Pilot为Envoy sidecars提供服务发现,为智能路由(例如A / B测试,金丝雀部署等)和弹性(超时,重试,断路器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于Envoy的配置,并在运行时将它们传播到边车。 Pilot将平台特定的服务发现机制抽象化并将其合成为符合Envoy数据平面API的任何边车可以使用的标准格式。这种松散耦合允许Istio在多个环境(例如Kubernetes,Consul / Nomad)上运行,同时保持用于流量管理的相同操作员界面。
Citadel
Citadel提供强大的服务到服务和最终用户身份验证,内置身份和凭证管理。它可用于升级服务网格中未加密的流量,并为运营商提供基于服务标识而不是网络控制强制执行策略的能力。从0.5版开始,Istio支持基于角色的访问控制,以控制谁可以访问您的服务。