Istio被称作Kubernetes的最佳云原生拍档。从今天起,我们推出“Istio技术实践”系列专题,在本专题中,我们将通过技术文章 视频授课的方式,为大家详细阐述Istio微服务治理,及在企业级云平台中的解决方案和实践。同时,您还可以申请试用灵雀云基于原生Istio和Kubernetes的微服务产品ASM!
什么是Service Mesh?
Service Mesh译作“服务网格”,作为服务间通信的基础设施层,Willian Morgan(Linkerd 的CEO)是这样定义Service Mesh的:
服务网格是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。
Service Mesh 实际是处于 TCP/IP 之上的一个抽象层,它假设底层的 L3/L4 网络能够点对点地传输字节(当然,它也假设网络环境是不可靠的,所以 Service Mesh 必须具备处理网络故障的能力)。
Service Mesh 有如下几个特点:
- 多语言支持:
支持几乎所有的语言,可以自由选择编程语言;
- 业务开发变革
降低入门门槛,提高稳定性;
业务开发团队从框架依赖中解放出来,回归业务;
- 强化运维管理
对系统强大的管理和控制力;
微服务治理的功能不再和应用有关。
Service Mesh架构图
微服务体系带来的问题
实际上,微服务并非一好百好,本质上是以运维的复杂度为代价获得敏捷性。分布式和微服务系统会带来哪些挑战呢?
- 首当其冲是定位和调试困难。
当遇到bug或者性能问题,原来的方式基本都是逐级排查,从客户遇到问题的地方开始。因为一个深层次的微服务会引起一系列的上层微服务出现问题。如果发现两个服务之间的整体调用性能不好,这个时候哪怕你找到某一次性能差的日志或数据,基于这个数据和日志找出来的原因不一定是root cause。这种排查问题的方式就像烽火台,你只看到了最近的烽火台,并不知道起点在哪。
- 第二,测试时数据会有遗漏,缺少完整的测试数据。
最好的测试数据是线上的真实数据。但是线上的请求采集下来还需要独立开发相应的程序,整体实现很麻烦。另外,如果测试微服务的错误处理,对于QA的黑盒测试来说,这还需要一个可配置的错误生成器。这点对于测试也是一个独立的工作。
- 第三,缺少上线流程。
我们原来使用独立的微服务作为开关,来判断是否加载新功能。在新的功能代码外层加上调用该微服务的代码,根据返回值来判断是否执行新功能代码,上线完成后再把开关代码删掉,的确有点麻烦。上线前需要修改源码增加控制,上线完成后还需要在源码中删除这些逻辑。没有简单、无侵入的金丝雀和灰度发布的实现方式。
- 第四,微服务间的网络调用策略配置不灵活。
不同的客户环境需要使用不同的网络策略,例如重试,超时等等设置,如果对应的设置没有通过配置文件暴露出来,就只能对代码进行修改。而且这些代码在业务代码里,统一的维护和升级都需要独立的流程。
诸如以上这些问题还有很多,涉及到成百上千个服务的通信、管理、部署、版本、安全、故障转移、策略执行、遥测和监控等,要解决这些微服务架构带来的问题并非易事。而Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用的多样化需求,解决了开发人员和运维人员在向分布式微服务架构过渡时所面临的挑战。
什么是Istio?
Istio是目前受Google/IBM 等大厂支持和推进的 Service Mesh开源框架组合。官方对 Istio 的介绍:
An open platform to connect, secure, control and observe services.
翻译过来,就是”连接、安全加固、控制和观察服务的开放平台“。Istio提供一种简单的方式来建立已部署的服务的网络,具备负载均衡,服务到服务认证,监控等功能,而不需要改动任何服务代码。
Istio 允许连接、保护、控制和观测微服务,在较高的层次上,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志记录平台、遥测或策略系统的 API。Istio 的多样化功能集能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
- Istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构;
- Istio 使用 sidecar(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动;
- HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡;
- Istio 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;支持访问控制、速率限制和配额;
- Istio 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。
Istio系统架构
Istio 分为两个平面:数据平面和控制平面。
数据平面:
数据平面由一组 sidecar 的代理(Envoy)组成。这些代理调解和控制微服务之间的所有网络通信,并且与控制平面的 Mixer 通讯,接受调度策略。
控制平面:
控制平面通过管理和配置 Envoy 来管理流量。此外,控制平面配置 Mixers来实施路由策略并收集检测到的监控数据。
如上图,
- 数据平面由一组以 Sidecar 方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及 Mixer 之间所有的网络通信。
- 控制平面负责管理和配置代理来路由流量。此外,控制平面配置 Mixer 以实施策略和收集遥测数据。
- Pilot是整个架构中的抽象层,将对接K8S等资源调度器的步骤进行抽象并以适配器的形式展现,并和用户以及Sidecar交互。
- Galley负责资源配置为验证。
- Citadel用于生成身份,及密钥和证书管理。
- 核心功能包括流量控制、安全控制、可观测性、多平台支持、可定制化。
Istio 安全架构
Istio中80%的组件都参与到了安全的功能里面。
Istio 安全目标:
- 默认安全
- 深度防御
- 零信任网络
Istio 安全组件:
- 堡垒,管理密钥、证书
- Sidecar,实现安全通信
- Pilot,授权策略分发
- Mixer,管理授权和审计
如何使用Istio 解决微服务架构问题?
如何在你的微服务架构中引入 Istio, 并用它来解决微服务治理中的诸多难题?在灵雀云的微服务治理平台Alauda Service Mesh(简称:ASM)中我们设计了基于Istio的解决方案,提供应用生命周期管理和全面的微服务治理能力,及应用服务之间安 全、可靠、高效的通信。
“从小白到专家Istio技术实践”专题系统讲述Istio基本概念、基础架构及在企业级云平台中的实践。对微服务治理感兴趣的企业决策者、技术调研者、架构师、开发人员、运维人员,欢迎持续关注!