1.2 Istio简介 |
|
Istio出自希腊语,表示“航行”的意思,官方图标为一个白色的小帆船。使用Istio可以让服务间的通信更简单、更安全,控制服务更容易,观测服务更方便。
Istio是由Google、IBM、Lyft公司主导开发的影响力最大的开源服务网格实现,使用Go语言编码,由于Go语言的性能较好,使得Istio性能不错。这个项目由众多代码贡献者完成。
Istio能有效减少部署的复杂性,可以方便地将Istio应用到已有的分布式应用系统架构中,Istio包含的API可以方便地集成任何日志平台、监控平台、数据收集平台和访问策略系统。Istio有丰富的功能,可以帮助开发者更加高效地运行一个分布式微服务架构,并提供一个统一的方式来保护、连接、监控微服务。Istio提供了一个完整的解决方案,可以满足多样化的分布式微服务的需求。
1.Istio的主要功能特性
Istio可以让你轻松部署一个服务网格,而不需要在服务代码中做任何改变。只需要在你的环境中部署一个特殊的代理用来拦截所有微服务间的网络通信,就可以通过控制平面配置和管理Istio。Istio的功能特性如下:
·HTTP、gRPC、WebSocket、TCP流量的自动负载均衡。
·细粒度的流量路由控制,包含丰富的路由控制、重试、故障转移和故障注入。
·可插拔的访问控制策略层,支持ACL、请求速率限制和请求配额。
·集群内度量指标,日志和调用链的自动收集,管理集群的入口、出口流量。
·使用基于身份的认证和授权方式来管理服务间通信的安全。
由于Istio提供了足够多的可扩展性,这也使得Istio能满足多样化的需求。基于Istio你完全可以搭建出一套适合自己公司基础设施层的服务网格。
2.Istio的设计目标
Istio的架构设计中有几个关键目标,这些目标对于系统应对大规模流量和高性能地进行服务处理至关重要:
· 最大化透明: 为了让Istio被更广泛采用,运维和开发人员只需要付出很少的代价就可以从中受益。为此Istio将自己自动注入所有的网络路径的服务中。Istio使用Sidecar代理来捕获流量,不需要对已部署的应用程序代码进行任何改动。在Kubernetes中,代理被注入Pod中,通过编写iptables规则来捕获流量。注入Sidecar代理到Pod中并且修改路由规则后,Istio就能够拦截所有流量。这个原则也适用于性能,所有组件和API在设计时都必须考虑性能和规模。
· 增量: 随着运维人员和开发人员越来越依赖Istio,系统必然会一起成长。Istio会继续添加新功能,但是最重要的是扩展策略系统的能力,集成其他策略和控制来源,并将网格行为信号传播到其他系统进行分析。策略运行时支持标准扩展机制以便插入其他服务中。
· 可移植性: Istio必须支持以最小的代价在任何云和本机环境上运行。将Istio上的服务进行迁移也是可行的。
· 策略一致性: 在服务间的API调用中,策略的应用使得可以对网格间行为进行全面的控制,但对于不需要在API级别表达的资源来说,对资源应用策略也同样重要。例如,将配额应用到ML训练任务消耗的CPU数量上,比将配额应用到启动这个工作的调用上更为有用。因此,策略系统作为独特的服务来维护,具有自己的API,而不是将其放到Sidecar代理中,这容许服务根据需要直接与其集成。