什么是应用服务网格
什么是应用服务网格
应用服务网格(Application Service Mesh,简称ASM)提供非侵入式的微服务治理解决方案,支持完整的生命周期管理和流量治理,兼容Kubernetes和Istio生态,功能包括负载均衡、熔断、故障注入等多种治理能力。并内置金丝雀、蓝绿灰度发布流程,提供一站式自动化的发布管理。
什么是Istio
Istio是一个提供连接、保护、控制以及观测功能的开放平台,通过提供完整的非侵入式的微服务治理解决方案,能够很好的解决云原生服务的管理、网络连接以及安全管理等服务网络治理问题。
随着微服务的大量应用,其构成的分布式应用架构在运维、调试和安全管理等维度变得更加复杂,开发者需要面临更大的挑战,如:服务发现、负载均衡、故障恢复、指标收集和监控,以及金丝雀发布、蓝绿发布、限流、访问控制、端到端认证等。
在较高的层次上,Istio有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许集成到任何日志记录平台、遥测或策略系统的API。Istio的多样化功能使您能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
服务网格
服务网格(Service Mesh)通常用于描述构成应用程序的微服务网络以及应用之间的交互。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如蓝绿发布、金丝雀发布、限流、访问控制和端到端认证等。
为什么要使用Istio
Istio提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。
Kubernetes提供了部署、升级和有限的运行流量管理能力,但并不具备熔断、限流、调用链追踪等能力。Istio是基于Kubernetes构建的开放平台,它很好的补齐了Kubernetes在微服务治理上的诸多能力。
想要让服务支持Istio,只需要在您的环境中部署一个特殊的Sidecar代理,使用Istio控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:
- 实现HTTP、gRPC、WebSocket和TCP流量的自动负载均衡。
- 通过丰富的路由规则、重试和故障注入,可以对流量行为进行细粒度控制。
- 通过可插入的策略层和配置API,支持访问控制、速率限制和配额。
- 对出入集群入口和出口中所有流量自动度量指标、日志记录和追踪。
- 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。
Istio旨在实现可扩展性,满足各种部署需求。
产品架构
产品功能
灰度发布
- 基于请求内容灰度规则:支持基于请求内容灰度规则,可以配置Header、Cookie等多种请求信息。
- 基于流量比例灰度规则:支持基于流量比例灰度规则,根据权重比例分配流量。
- 金丝雀灰度流程:提供向导方式引导用户完成金丝雀灰度流程,包括灰度版本上线、观察灰度版本运行、配置灰度规则、观测访问情况、切分流量等。
- 蓝绿灰度流程:提供向导方式引导用户完成蓝绿灰度流程,包括灰度版本上线、观察灰度版本运行、观测访问情况、版本切换等。
流量治理
- 七层连接池管理:支持配置HTTP最大请求数、最大重试次数、最大等待请求数、每连接最大请求数以及连接最大空闲时间。
- 四层连接池管理:支持配置TCP最大连接数、连接超时时间、最大无响应次数、最短空闲时间以及健康检查间隔。
- 熔断:支持配置服务熔断规则,包括实例被驱逐前的连续错误数、检查周期、基础隔离时间以及最大隔离实例比例。
- 重试:支持配置HTTP重试次数、重试超时时间以及重试条件。
- 超时:支持配置HTTP请求超时时间。
- 负载均衡:支持配置随机调度、轮询调度、最少连接和一致性哈希多种负载均衡算法。
- HTTP头域:可以灵活添加、修改和删除指定HTTP头域,包括将HTTP请求转发到目标服务之前对Headers的操作,以及将HTTP响应回复给客户端前,对Headers的操作。
- 故障注入:支持配置延时故障和中断故障。
安全
- 对端认证:对端认证定义了流量如何通过隧道(或者不通过隧道)传输到当前服务的实例,当前支持配置默认模式(UNSET)、宽容模式(PERMISSIVE)和严格模式(STRICT)三种认证策略。
- 访问授权:访问授权用来实现对网格中服务的访问控制功能,即判断一个请求是否允许发送到当前的服务。
可观察性
- 应用访问拓扑:支持网格应用访问拓扑,体现服务间依赖。
- 服务运行监控:支持服务访问信息,包括服务和服务各个版本的QPS和延时等指标。
- 访问日志:支持收集和检索服务的访问日志。
- 调用链:支持非侵入调用链埋点,并可以通过检索调用链数据进行问题定界定位。
网格数据面服务框架
- Spring Cloud:支持Spring Cloud SDK开发的服务在网格上统一管理。
- Dubbo:支持Dubbo SDK开发的服务在网格上统一管理。
兼容性和扩展
- 社区版本兼容:API完全兼容Istio。
- 社区插件支持:支持Tracing、Prometheus、Kiali、Grafana。