热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Istio核心功能

目录Istio核心功能一.流量控制1.1.路由和流量转移1.2.弹性功能1.3.调试能力1.3.1.故障注入1.3.2.流量镜像1.4.实现流量控制的自定义资源二.安全2.1认证2

目录
  • Istio 核心功能
    • 一. 流量控制
      • 1.1.路由和流量转移
      • 1.2.弹性功能
      • 1.3.调试能力
        • 1.3.1.故障注入
        • 1.3.2.流量镜像
      • 1.4. 实现流量控制的自定义资源
    • 二. 安全
      • 2.1 认证
      • 2.2 授权
    • 三. 可观察性

Istio 核心功能

一. 流量控制

微服务应用的最大的痛点就是处理服务间的通信, 而这一问题的核心其实就是 流量的管理

传统的微服务在金丝雀发布的路由功能在不借助于第三方框架,最简单的实现方法,就是在服务期间添加一个负载均衡(比如nginx)做代理, 通过修改配置的权重分配流量。

  • 缺点: 对流量的管理和基础设施绑定在一起, 难以维护

而使用 Istio就可以轻松的实现各种维度的流量控制。下图是典型的金丝雀发布策略:根据权重把 5% 的流量路由给新版本,如果服务正常,再逐渐转移更多的流量到新版本。

Istio 核心功能

Istio 的流量控制功能主要分为三个方面:

  • 请求路由和流量的转移
  • 弹性功能, 包括熔断,超时, 重试
  • 调试能力, 包括故障注入和流量镜像

1.1.路由和流量转移

Istion 为了控制服务请求,引入了服务版本(version)的概念,可以通过版本这一标签将服务进行区分。

  1. 版本的设置是非常灵活的,可以根据服务的迭代编号进行定义(如 v1、v2 版本);也可以根据部署环境进行定义(比如 dev、staging、production);或者是自定义的任何用于区分服务的某种标记

    如下图为Istio通过版本进行流浪控制

    Istio 核心功能
  2. 除了上面介绍的服务间流量控制外,还能控制与网格边界交互的流量。可以在系统的入口和出口处部署 Sidecar代理,让所有流入和流出的流量都由代理进行转发。

    Istio 核心功能
  3. Istio 还能设置流量策略。比如可以对连接池相关的属性进行设置,通过修改最大连接等参数,实现对请求负载的控制

  4. 还可以对负载均衡策略进行设置,在轮询、随机、最少访问等方式之间进行切换。

  5. 还能设置异常探测策略,将满足异常条件的实例从负载均衡池中摘除,以保证服务的稳定性。

1.2.弹性功能

目前支持超时、重试和熔断

  1. 超时就是设置一个等待时间,当上游服务的响应时间超过这个时间上限,就不再等待直接返回,就是所谓的快速失败。超时主要的目的是控制故障的范围,避免故障进行扩散。路由配置里添加 timeout 就可以实现
  2. 重试一般是用来解决网络抖动时通信失败的问题。因为网络的原因,或者上游服务临时出现问题时,可以通过重试来提高系统的可用性。 路由配置中添加 retry关键字可以实现
  3. 熔断,它是一种非常有用的过载保护手段,可以避免服务的级联失败。熔断一共有三个状态,
    • 当上游服务可以返回正常时,熔断开关处于关闭状态;

    • 一旦失败的请求数超过了失败计数器设定的上限,就切换到打开状态,让服务快速失败;

    • 熔断还有一个半开状态,通过一个超时时钟,在一定时间后切换到半开状态,让请求尝试去访问上游服务,看看服务是否已经恢复正常。如果服务恢复就关闭熔断,否则再次切换为打开状态。

    • 熔断需要在自定义资源 DestinationRuleTrafficPolicy 里进行设置。

1.3.调试能力

调试的能力,包括故障注入和流量镜像。对流量进行调试可以让系统具有更好的容错能力,也方便我们在问题排查时通过调试来快速定位原因所在

1.3.1.故障注入

故障注入就是 在系统中认为设置一些故障,来测试系统的稳定性和系统恢复的能力

  • 比如 给某个服务注入一个延迟,使其长时间无响应,然后检测调用方是否能处理这种超市而自身不受影响

支持两种类型的故障: 延迟和中断

  1. 延迟就是模拟网络延迟或服务过载的情况

  2. 中断时模拟上游服务崩溃的情况,以HTTP的错误码和TCP链接失败来表现。

  3. 故障注入很方便,在路由配置中添加fault关键字即可。

1.3.2.流量镜像

通过复制一份请求并把它发送到镜像服务,从而实现流量的复制功能。

流量镜像的主要应用场景有以下几种:

  1. 最主要的就是进行线上问题排查。一般情况下,因为系统环境,特别是数据环境、用户使用习惯等问题,我们很难在开发环境中模拟出真实的生产环境中出现的棘手问题,同时生产环境也不能记录太过详细的日志,因此很难定位到问题。流量镜像,我们就可以把真实的请求发送到镜像服务,再打开 debug 日志来查看详细的信息。
  2. 通过它来观察生产环境的请求处理能力,比如在镜像服务进行压力测试。
  3. 也可以将复制的请求信息用于数据分析。

现起来也非常简单,只需要在路由配置中通添加mirror关键字即可。

1.4. 实现流量控制的自定义资源

实现流量控制的用户自定义资源(CRD)主要有以下几个:

  • VirtualService:用于网格内路由的设置;

  • DestinationRule:定义路由的目标服务和流量策略;

  • ServiceEntry:注册外部服务到网格内,并对其流量进行管理;

  • Ingress、Egress gateway:控制进出网格的流量;

通过这些自定义资源,实现了对网格内部、网格外部、进出网格边界的流量的全面的控制。也就是说所有和网格产生交互的流量都可以被 Istio 所控制,其设计思路堪称完美。下图是这几种资源的示意图。

Istio 核心功能

二. 安全

安全对于微服务这样的分布式系统非常重要。

与单体应用在进程内进行通信不同, 网络成为了服务间通信的组件, 这使得它对安全有了跟迫切的要求。

  1. 比如为了抵御外来的攻击, 需要对流量进行加密
  2. 为了保证服务间通信的可靠性,需要使用mTLS的方式进行交互
  3. 为控制不同身份访问,需要设置不同粒度的授权策略

Istio 中的安全架构是由多个组件协同完成的。

  • Citadel 是负责安全的主要组件,用于密钥和整数的管理
  • Pilot 会将安全策略配置发送给Envoy代理
  • Envoy执行安全策略来实现访问控制

安全策略架构和运作流程如下

Istio 核心功能

Istio 提供的安全功能主要分为认证 和 授权。

2.1 认证

Istio 提供两种类型认证:

  • 对等认证(Peer authentication):用于服务到服务的认证。这种方式是通过双向 TLS(mTLS)来实现的,即客户端和服务端都要验证彼此的合法性。 Istio中提供了内置的密钥和证书管理机制,可以自动进行密钥和证书的生成,分发和轮换,而无需修改业务代码。
  • 请求认证(Request authentication):也叫最终用户认证, 验证终端用户或客户端。 Istio 使用目前业界流行的JWT(JSON Web Token) 作为实现方案

IstiomTLS 提供了一种宽容模式的配置方法,使得服务可以同时支持纯文本和mTLS流量。用户可以先用非加密的流量确保服务间的连通性,然后再逐渐迁移到 mTLS,这种方式极大的降低了迁移和调试的成本。

还提供了多种粒度的认证策略,可以支持网格级别、命名空间级别和工作负载级别的认证,用户可以灵活的配置各种级别的策略和组合。

2.2 授权

Istio 的授权策略可以为网络中的服务提供不统计被的访问控制。 比如网络比如网格级别、命名空间级别和工作负载级别。授权策略支持 ALLOWDENY 动作,每个Envoy都代理都运行一个授权引擎,当请求到达代理时,授权引擎根据当前策略评估请求的上下文,并返回授权结果 ALLOWDENY。 授权功能没有显示的开关进行配置,默认就是启动状态,只需要将配置好的授权策略应用到对应的工作负载就可以进行访问控制了。

授权策略通过自定义资源AuthorizationPolicy来配置。除了定义策略指定的目标(网格、命名空间、工作负载)和动作(容许、拒绝)外,Istio 还提供了丰富的策略匹配规则,比如可以设置来源、目标、路径、请求头、方法等条件,甚至还支持自定义匹配条件,其灵活性可以极大的满足用户需求。

三. 可观察性

可观察性的作用

  1. 及时反馈异常或者风险使得开发人员可以及时关注、修复和解决问题(告警);
  2. 出现问题时,能够帮助快速定位问题根源并解决问题,以减少服务损失(减损);
  3. 收集并分析数据,以帮助开发人员不断调整和改善服务(持续优化)

Istio一共提供了三种不同类型的数据从不同的角度支撑起其可观察性:

  • 指标(Metrics):可以用于查看某一段时间范围内系统状态的变化情况, 甚至可以预测未来一段时间系统的行为。Istio中有四类不同的监控标识(响应延迟、流量大小、错误数量、饱和度)生成了一系列观测不同服务的监控指标,用于记录和展示网格中服务状态。

  • 日志(Access Logs):日志是软件系统中记录软件执行状态及内部事件最为常用也最为有效的工具。日志包含了系统状态更多的细节部分。在分布式系统中,日志是定位复杂问题的关键手段;同时,由于每个事件都会产生一条对应的日志,所以日志也往往被用于计费系统,作为数据源。对接 ELK 等日志分析系统后,可以快速的筛选出具有特定特征的日志以分析系统中某些特定的或者需要关注的事件

  • 分布式追踪(Distributed Traces):通过额外数据(Span ID等特殊标记)记录不同组件中事件之间的关联,并由外部数据分析系统重新构造出事件的完整事件链路以及因果关系。在服务网格的一次请求之中,Istio 会为途径的所有服务生成分布式追踪数据并上报,通过 Zipkin 等追踪系统重构服务调用链,开发人员可以借此了解网格内服务的依赖和调用流程,构建整个网格的服务拓扑。


推荐阅读
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • Spring 切面配置中的切点表达式详解
    本文介绍了如何在Spring框架中使用AspectJ风格的切面配置,详细解释了切点表达式的语法和常见示例,帮助开发者更好地理解和应用Spring AOP。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
author-avatar
霞霞123321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有