Istio
是服务网格,即ServiceMesh
的一种实现,服务网格通常用于描述构成应用程序的网络以及它们之间的交互。在从单体应用向分布式微服务架构转型的过程中,虽然从中获益良多,但是随着规模和复杂性的增长,服务网格越来越难以理解,给开发人员和运维人员带来的挑战快速增加。这些挑战包括:服务发现,负载均衡,故障恢复,指标收集,监控以及一些更加复杂的运维需求,例如:A/B测试
、金丝雀发布、限流、访问控制,端到端认证等。而 Istio
提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。
Istio
以非常简单的方式来为已部署的服务建立网络,对应用程序代码只需要进行一点或者不需要做任何改动,要想让服务支持Istio
,只需要在应用旁边部署一个 sidecar
代理,使用 Istio
的控制面进行功能配置和管理代理,拦截服务之间的所有网络通信,已达到:
HTTP
、gRPC
、WebSocket
和 TCP
流量的自动负载均衡;
- 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;
- 可插入的策略层和配置 API,支持访问控制、速率限制和配额;
- 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪;
- 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信;
综上,对 Istio
的核心功能可以总结为以下几点:
- 流量管理,通过简单的规则配置和流量路由,可以控制服务之间的流量和
API
调用。Istio
简化了断路器、超时和重试等服务级别属性的配置,并且可以轻松设置A/B
测试、金丝雀部署和基于百分比的流量分割的分阶段部署等重要任务;
- 安全,
Istio
的安全功能使开发人员可以专注于应用程序级别的安全性。Istio
提供底层安全通信信道,并大规模管理服务通信的认证、授权和加密。使用Istio
,服务通信在默认情况下是安全的,它允许您跨多种协议和运行时一致地实施策略——所有这些都很少或根本不需要应用程序更改;
- 可观察性,
Istio
强大的追踪、监控和日志记录可让开发或者运维人员深入了解服务网格部署。通过 Istio
的监控功能,可以真正了解服务性能如何影响上游和下游的功能,而其自定义仪表板可以提供对所有服务性能的可视性;
在架构上,Istio 服务网格逻辑上分为数据平面和控制平面,其中:
- 数据平面由一组以
sidecar
方式部署的智能代理(Envoy)组成。这些代理负责协调和控制微服务之间的所有网络通信。 它们还收集和报告所有网格流量的遥测数据;
- 控制平面 管理并配置代理来进行流量路由;
架构图如下图所示:
Envoy
:是用 C++
开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy
代理是唯一与数据平面流量交互的 Istio
组件。Envoy
被部署为服务的 Sidecar
,在逻辑上为服务增加了 Envoy
的许多内置特性,例如:动态服务发现,负载均衡,TLS
终端,HTTP/2
与 gRPC
代理,熔断器,健康检查,基于百分比流量分割的分阶段发布,故障注入,丰富的指标;
Sidecar
代理模型还允许您向现有的部署添加 Istio
功能,而不需要重新设计架构或重写代码。由 Envoy 代理启用的一些 Istio 的功能和任务包括:
- 流量控制功能:通过丰富的
HTTP
、gRPC
、WebSocket
和 TCP
流量路由规则来执行细粒度的流量控制;
- 网络弹性特性:重试设置、故障转移、熔断器和故障注入;
- 安全性和身份认证特性:执行安全性策略,并强制实行通过配置
API
定义的访问控制和速率限制;
- 基于
WebAssembly
的可插拔扩展模型,允许通过自定义策略执行和生成网格流量的遥测;
Istiod
将控制流量行为的高级路由规则转换为 Envoy
特定的配置, 并在运行时将其传播给 Sidecar
。Pilot
提取了特定平台的服务发现机制,并将其综合为一种标准格式,任何符合 Envoy API
的 Sidecar
都可以使用。以及通过内置的身份和凭证管理,实现了强大的服务对服务和终端用户认证,可以使用 Istio
来升级服务网格中未加密的流量,这样运营商可以基于服务身份而不是相对不稳定的第3
层或第4
层网络标识符来执行策略。Istiod
还可以充当证书授权(CA
),生成证书以允许在数据平面中进行安全的 mTLS
通信。