0

0

[Istio是什么?] 还不知道你就out了,一文40分钟快速理解

蓮花仙者

蓮花仙者

发布时间:2025-07-12 08:24:25

|

444人浏览过

|

来源于php中文网

原创

@toc

前言

这篇文章属于纯理论,所含内容如下,按需阅读:

Istio概念、服务网格、流量管理、istio架构(Envoy、Sidecar 、Istiod)虚拟服务(VirtualService)、路由规则、目标规则(DestinationRule)网关(Gateway)、网络弹性和测试(超时、重试、熔断器、故障注入)Istio是什么?Istio是一个开源的服务网格,透明的接入到分布式服务中。它也是一个平台,集成任何日志、遥测和策略系统的 API 接口。Istio 成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。Istio 有助于降低 DevOps 压力、开发团队的压力。服务网格是什么?组成微服务网络实现服务之间的交互应用场景服务发现、负载均衡、故障恢复、度量和监控A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证为什么使用Istio?

服务网格是通过sidecar(边车)代理服务实现,控制平面主要是对sidecar的配置和管理,这包括:

HTTP、gRPC、WebSocketTCP 流量自动负载均衡。通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。可插拔的策略层和配置 API,支持访问控制、速率限制和配额。集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录追踪。在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。

Istio还支持扩展,满足你部署需求!

流量管理介绍Istio流量路由规则可以很容易的控制服务之间的流量API调用。能实现A/B测试、金丝雀发布、基于流量百分比发布。开箱即用的故障恢复特性,有助于增强应用的健壮性,从而更好地应对被依赖的服务或网络发生故障的情况。Istio 的流量管理由Envoy代理服务提供。网格内服务发送和接收的所有流量都由Envoy 代理处理,让控制网格内的流量变得异常简单,不需要对服务做更改。

为了在网格中导流,Istio 需要知道 endpoint 在哪和属于哪个服务。为了定位到service registry(服务注册中心),Istio 会连接到一个服务发现系统。例如,如果您在 Kubernetes 集群上安装了 Istio,那么它将自动检测该集群中的服务和 endpoint(端点)。

使用此服务注册中心,Envoy 代理可以将流量定向到相关服务。大多数基于微服务的应用程序,每个服务的工作负载都有多个实例来处理流量,称为负载均衡池。默认情况下,Envoy 代理基于轮询调度在服务的负载均衡池内分发流量,按顺序请求发送给池中每个成员,一旦所有服务实例均接收过一次请求后,重新回到第一个池成员。

这些 API 也使用 Kubernetes 的自定义资源定义(CRDs)来声明,可以使用 YAML 进行配置

istio架构

Istio 服务网格 逻辑上分为数据平面控制平面

**数据平面**:Envoy代理被部署为sidecar,负责协调和控制微服务之间的通信,收集和报告所有网格流量的遥测数据。**控制平面**:管理并配置Envoy代理
[Istio是什么?] 还不知道你就out了,一文40分钟快速理解在这里插入图片描述
EnvoyC++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。

Envoy 代理被部署为服务的 Sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

动态服务发现负载均衡TLS 终端HTTP/2 与 gRPC 代理熔断器健康检查基于百分比流量分割的分阶段发布故障注入丰富的指标Sideca允许 Istio 可以执行策略决策,提取丰富的遥测数据,接着将这些数据发送到监视系统以提供整个网格行为的信息。Sidecar 代理还允许向 Istio 添加功能,不需要重新设计架构或重写代码。IstiodIstiod 提供服务发现、配置和证书管理。Istiod 将控制流量高级路由规则转换为 Envoy 特定的配置,并在运行时传播给 Sidecar。Istiod 安全通过内置的身份和凭证管理,实现了强大的服务对服务和终端用户认证。Istiod 充当证书授权(CA),生成证书以允许在数据平面中进行mTLS 通信。虚拟服务(VirtualService)配置请求流量到服务,基于连通性和服务发现能力。每个虚拟服务包含一组路由规则。可以实现负载均衡、基于不同版本流量百分比路由。为什么使用虚拟服务?

虚拟服务在增强 Istio 流量管理方面,发挥着至关重要的作用,通过对客户端请求与真实响应请求目标工作负载进行解耦来实现。

基于不同服务版本的流量百分比路由,实现A/B 测试、金丝雀发布

栗子代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: reviewsspec:  hosts:  - reviews  http:  - match:    - headers:        end-user:          exact: jason    route:    - destination:        host: reviews        subset: v2  - route:    - destination:        host: reviews        subset: v3</code>

**hosts字段**

虚拟服务的主机,客户端请求路由规则的目标地址。虚拟服务主机名可以是 IP 地址、DNS 名称,或者依赖于平台的一个简称(Kubernetes 服务的短名称)也可以使用通配符(“\*”)前缀路由规则http 字段包含虚拟服务的路由规则,用来描述匹配条件和路由行为,它们把 HTTP/1.1、HTTP2 和 gRPC等流量发送到hosts字段指定的目标

一个路由规则包含了请求要流向哪个目标地址,具有 0 或多个匹配条件,取决于您的使用场景。

匹配条件

示例中的第一个路由规则有一个条件,因此以 match 字段开始。在本例中,您希望此路由应用于来自”jason“ 用户的所有请求,所以使用 headersend-userexact 字段选择适当的请求。

代码语言:shell复制
<code class="shell">- match:   - headers:       end-user:         exact: jason</code>
Destinationroute 部分的 destination 字段指符合此条件的流量的实际目标地址。与虚拟服务的 hosts 不同,destination的 host 必须是存在于 Istio 服务注册中心的实际目标地址,否则 Envoy 不知道该将请求发送到哪里。代码语言:shell复制
<code class="shell">route:- destination:    host: reviews    subset: v2</code>

destination 片段还指定了 Kubernetes 服务的子集,将符合此规则条件的请求转入其中,本例中子集名称是 v2。

路由规则优先级

路由规则按从上到下的顺序选择,虚拟服务中定义的第一条规则有最高优先级,不满足第一个路由规则的流量均流向一个默认的目标

本例中:第二条规则没有 match 条件,直接将流量导向 v3 子集。

代码语言:shell复制
<code class="shell">- route:  - destination:      host: reviews      subset: v3</code>
路由规则的更多内容

可以在流量端口、header 字段、URI 等内容上设置匹配条件

匹配条件:

[Istio是什么?] 还不知道你就out了,一文40分钟快速理解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
目标规则(DestinationRule)

可以将虚拟服务视为将流量如何路由到目标地址,然后目标规则来配置该目标的流量。虚拟服务路由规则之后,目标规则将应用于流量的“真实”目标地址。

简单来说:虚拟服务通过目标规则后,到达目标地址(服务)

应用场景:整个目的地服务或特定服务子集时定制 Envoy 的流量策略,负载均衡模型、TLS 安全模式或熔断器设置。

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata:  name: my-destination-rulespec:  host: my-svc  trafficPolicy:    loadBalancer:      simple: RANDOM  # 随机负载均衡器  subsets:  - name: v1    labels:      version: v1  - name: v2    labels:      version: v2    trafficPolicy:      loadBalancer:        simple: ROUND\_ROBIN   # 轮询负载均衡器  - name: v3    labels:      version: v3</code>

每个子集都是基于一个或多个 labels 定义的,标签应用于kubernetes集群中deployment控制器metadata字段来识别不同版本。

负载均衡选项

Istio 默认使用轮询的负载均衡策略,Istio 同时支持如下的负载均衡模型,可以在 DestinationRule 中为指定:

随机:请求以随机的方式转到池中的实例。权重:请求根据指定的百分比转到实例。最少请求:请求被转到最少被访问的实例。网关(Gateway)管理入站和出站流量,网关配置网格边界的独立 Envoy 代理,而不是服务工作负载的 sidecar 代理。Istio 网关可以配置 4-6 层的负载均衡属性,如对外暴露的端口、TLS 设置等网关主要用于管理进入的流量Istio 提供了预先配置的网关代理(istio-ingressgatewayistio-egressgateway)栗子代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:  name: ext-host-gwyspec:  selector:    istio: ingressgateway  # use istio default controlle  servers:  - port:      number: 443      name: https      protocol: HTTPS    hosts:    - ext-host.example.com    tls:      mode: SIMPLE      serverCertificate: /tmp/tls.crt      privateKey: /tmp/tls.key</code>

这个网关配置让 HTTPS 流量从 ext-host.example.com 通过 443 端口流入网格,但没有为请求指定任何路由规则。为想要工作的网关指定路由,您必须把网关绑定到虚拟服务上。

如下面的示例所示,使用虚拟服务的 gateways 字段进行设置:

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: virtual-svcspec:  hosts:  - ext-host.example.com  gateways:    - ext-host-gwy</code>

然后就可以为出口流量配置带有路由规则的虚拟服务。

Sideca

默认情况下,Istio 让每个 Envoy 代理都可以访问和它关联工作负载的所有端口的请求,然后转发到对应的工作负载。

可以使用 sidecar配置做:

微调Envoy 代理接受的端口和协议集限制Envoy 代理可以访问的服务集合

在较庞大的应用程序中限制 sidecar 可达性,配置每个代理能访问网格中的任意服务,可能会因为高内存使用量而影响网格的性能。

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

下载

可以指定将 sidecar 配置应用于特定命名空间中的所有工作负载,或者使用 workloadSelector 选择特定的工作负载

例如,下面的 sidecar 配置将 bookinfo 命名空间中的所有服务配置为,仅能访问运行在相同命名空间和 Istio 控制平面中的服务:

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: Sidecametadata:  name: default  namespace: bookinfospec:  egress:  - hosts:    - "./\*"    - "istio-system/\*"</code>
网络弹性和测试

除了网格导流外,Istio 还提供了故障恢复和故障注入功能,您可以在运行时动态配置这些功能。使用这些特性可以让您的应用程序运行稳定,确保服务网格能够容忍故障节点,并防止局部故障级联影响到其他节点。

超时

超时是 Envoy 代理等待来自给服务答复的时间,确保服务不会因为等待答复而无限期的挂起。HTTP 请求的默认超时时间15 秒,这意味着如果服务在 15 秒内没有响应,调用将失败。

为了找到最佳超时设置,Istio 允许使用虚拟服务,按服务轻松地动态调整超时,而不必修改您的业务代码。

栗子:

一个虚拟服务,对 ratings 服务的 v1 子集的调用,指定 10 秒超时时间

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: ratingsspec:  hosts:  - ratings  http:  - route:    - destination:        host: ratings        subset: v1    timeout: 10s</code>
重试

服务为初始调用失败Envoy 代理尝试连接服务的最大次数。确保调用不会因为临时过载的服务或网络等问题而永久失败。

重试之间的间隔(25ms+)是可变的,HTTP 请求的默认重试行为是在返回错误之前重试两次

应用场景:与超时一样,Istio 默认的重试行为在延迟方面可能不适合您的应用程序需求(对失败的服务进行过多的重试会降低速度)或可用性。

栗子

配置了在初始调用失败后,最多重试 3 次来连接到服务子集,每个重试都有 2 秒的超时。

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: ratingsspec:  hosts:  - ratings  http:  - route:    - destination:        host: ratings        subset: v1    retries:      attempts: 3      perTryTimeout: 2s</code>
熔断器

熔断器中,设置一个对服务中单个主机调用的限制,例如并发连接的数量或对该主机调用失败的次数。一旦限制被触发,熔断器就会“跳闸”并停止连接到该主机。

作用:使用熔断模式可以快速失败而不必让客户端尝试连接到过载或有故障的主机。

熔断适用于在负载均衡池中的“真实”网格目标地址,可以在目标规则中配置熔断器阈值,让配置适用于服务中的每个主机。

栗子:

将 v1 子集的reviews服务工作负载的并发连接数限制为 100:

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata:  name: reviewsspec:  host: reviews  subsets:  - name: v1    labels:      version: v1    trafficPolicy:      connectionPool:        tcp:          maxConnections: 100</code>
故障注入

是什么:可以使用 Istio 的故障注入机制来为整个应用程序测试故障恢复能力

为什么使用:故障注入是一种将错误引入系统以确保系统能够承受并从错误条件中恢复的测试方法。

作用:使用故障注入特别有用,能确保故障恢复策略不至于不兼容或者太严格,这会导致关键服务不可用。

可以注入两种故障,都使用虚拟服务配置:

延迟:延迟是时间故障。它们模拟增加的网络延迟或一个超载的上游服务。终止:终止是崩溃失败。他们模仿上游服务的失败。终止通常以 HTTP 错误码或 TCP 连接失败的形式出现。

栗子:

千分之一访问ratings 服务的请求,配置了一个 5 秒的延迟:

代码语言:shell复制
<code class="shell">apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: ratingsspec:  hosts:  - ratings  http:  - fault:      delay:        percentage:          value: 0.1        fixedDelay: 5s    route:    - destination:        host: ratings        subset: v1</code>
和您的应用程序一起运行

Istio 故障恢复功能对应用程序来说是完全透明的。在返回响应之前,应用程序不知道 Envoy sidecar 代理是否正在处理被调用服务的故障。这意味着,如果在应用程序代码中设置了故障恢复策略,那么您需要记住这两个策略都是独立工作的,否则会发生冲突。

例如,假设您设置了两个超时,一个在虚拟服务中配置,另一个在应用程序中配置。应用程序为服务的 API 调用设置了 2 秒超时。而您在虚拟服务中配置了一个 3 秒超时和重试。在这种情况下,应用程序的超时会先生效,因此 Envoy 的超时和重试尝试会失效。

虽然 Istio 故障恢复特性提高了网格中服务的可靠性和可用性,但应用程序必须处理故障或错误并采取适当的回退操作。例如,当负载均衡中的所有实例都失败时,Envoy 返回一个HTTP 503代码。应用程序必须实现回退逻辑来处理HTTP 503错误代码。

总结

这篇花费了不少精力,还望博友们支持支持新人!!!

后期会发布一篇实际操作,期待大家持续关注!!!

学习不走弯路,关注v「yeTechLog」

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

407

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

504 gateway timeout怎么解决
504 gateway timeout怎么解决

504 gateway timeout的解决办法:1、检查服务器负载;2、优化查询和代码;3、增加超时限制;4、检查代理服务器;5、检查网络连接;6、使用负载均衡;7、监控和日志;8、故障排除;9、增加缓存;10、分析请求。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

608

2023.11.27

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

236

2023.12.07

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1946

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

656

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2399

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.2万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号