Istio简述
Istio可以连接、保护、控制和观察服务,降低微服务治理的复杂性,并减轻开发团队的压力。它的多样化功能集使您能够成功高效地运行分布式微服务架构,透明地分层到现有的分布式应用程序上。
为什么要使用Istio
Istio提供了一种简单的方式为已经部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,只需要对服务的代码进行一点或不需要做任何改动。只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:
HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
- 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
- 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
- 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪。
- 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。
核心功能
- 流量管理
通过简单的规则配置和流量路由,可以控制服务之间的流量和 API 调用。Istio简化了断路器、超时和重试等服务级别属性的配置,并且可以轻松设置 A/B测试、金丝雀部署和基于百分比的流量分割的分阶段部署等重要任务。
通过更好地了解您的流量和开箱即用的故障恢复功能,您可以在问题出现之前先发现问题,使调用更可靠,并且使您的网络更加强大。
- 安全
Istio 的安全功能使开发人员可以专注于应用程序级别的安全性。Istio 提供底层安全通信信道,并大规模管理服务通信的认证、授权和加密。使用Istio,服务通信在默认情况下是安全的,它允许您跨多种协议和运行时一致地实施策略——所有这些都很少或根本不需要应用程序更改。
虽然 Istio 与平台无关,但将其与 Kubernetes(或基础架构)网络策略结合使用,其优势会更大,包括在网络和应用层保护 pod 间或服务间通信的能力。
- 可观察性
Istio 强大的追踪、监控和日志记录可让您深入了解服务的运行状态,通过 Istio 的监控功能,可以真正了解服务性能如何影响上游和下游的功能,而其自定义仪表板可以提供对所有服务性能的可视性,并让您了解该性能如何影响您的其他进程。
Istio的Mixer负责策略控制和遥测收集。它提供后端抽象和中介,将 Istio 的其余部分与各个基础架构后端的实现细节隔离开来,并为运维提供对网格和基础架构后端之间所有交互的细粒度控制。
平台支持
Istio 是独立于平台的,旨在运行在各种环境中,包括跨云、内部部署、Kubernetes、Mesos 等。Istio 目前支持:
- Kubernetes1.9以上
- 具有 Consul 的 Nomad
集成和定制
策略执行组件可以扩展和定制,以便与现有的 ACL、日志、监控、配额、审计等方案集成。
架构
Istio逻辑上分为数据层面和控制层面。
数据层面:由一组以sidecar方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务以及Mixer之间所有的网络通信。
控制层面:负责管理和配置代理来路由流量。此外它还配置Mixer以实施策略和收集数据。
下图显示了Istio的不同组件:
- Envoy
Istio使用Envoy代理的扩展版本,Envoy 是以 C++ 开发的高性能代理,用于调解服务的所有入站和出站数据,Istio中的Envoy主要功能如下:
- 动态的服务发现
- 负载均衡
- TLS终止
- Http/2&gRPC代理
- 熔断器
- 健康检查
- 流量拆分
- 故障注入
- 丰富的度量指标
Envoy被部署为sidecar,和对应的服务在同一个kubernetes pod 中。这样Istio就可以将大量的流量属性提取出来,而这些属性又可以在Mixer中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。
Sidecar代理模型还可以将Istio的功能添加到现有部署中,而无需重新构建或重写代码。
- Mixer
Mixer是一个独立于平台的组件,负责在服务上执行访问控制和使用策略,并从Envoy代理和其他服务中收集遥测数据。代理提取请求级属性,发送到Mixer进行评估。
- Pilot
Pilot为Envoy sidecar 提供服务发现功能,为智能路由(A/B测试,金丝雀部署等)和弹性(超时,熔断器,重试等)提供流量管理。它将控制流量行为的高级路由规则转换为特定的Envoy配置,并在运行时将它们传播给sidecar。
Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据层面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操作界面。
- Citadel
Citadel通过内置身份和凭证管理赋能强大的服务间和最终用户身份验证。可以升级服务中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。Istio 0.5版本以后支持基于角色的访问控制,来控制谁可以来访问该服务,而不是基于不稳定的三层或四层网络标识。
- Galley
Gally主要用于Istio的配置文件管理,如获取用户的配置信息,处理和分配配置信息。验证用户编写的Istio API配置信息等。
设计目标
以下目标对大规模流量和高性能地服务处理至关重要。
- 最大透明度
Istio尽可能的地方自动编程网络层,无需对已部署的应用程序代码进行任何改动。在 Kubernetes中,代理被注入到 pod 中,通过编写 iptables 规则来捕获流量。注入 sidecar 代理到 pod 中并且修改路由规则后,Istio 就能够调解所有流量。此外,为提供这些功能而增加的资源开销是很小的。
- 可扩展性
它允许用户扩展使用策略和控制来源,并将网络信号传播到其他系统进行分析。策略运行时支持标准扩展机制以便插入到其他服务中。此外,它允许扩展词汇表,以允许基于网格生成的新信号来执行策略。
- 可移植性
Istio 必须能够以最少的代价运行在任何云或预置环境中,将基于 Istio 的服务移植到新环境应该是轻而易举的。而使用 Istio 将一个服务同时部署到多个环境中也是可行的。
- 策略一致性
策略系统作为独特的服务来维护,具有自己的API,而不是将其放到代理/sidecar 中,这允许服务根据需要直接与其集成。