服务网格Istio基础介绍

服务网格Istio基础介绍
十八岁Istio介绍
Istio是一个开源的服务网格(Service Mesh)产品,专为微服务架构设计,用于透明地管理服务间的通信、安全、监控和流量策略。Istio通过Sidecar拦截并控制服务间的所有流量,将复杂的微服务治理(如流量管理、安全策略)从业务代码中剥离,并下沉到基础设施层,使开发者更专注于业务逻辑,以提升开发效率。
Istio几乎无需更改任何代码就可以实现如下功能:
- 双向TLS加密
- HTTP、gRPC、WebSocket和TCP流量的自动负载均衡
- 错误重试、故障转移和故障注入等
- 访问控制、限流、认证、鉴权等
- 可观测性指标、链路追踪、日志等
- 集群内入口和出口的流量管理
Istio平台架构
Istio从逻辑上分为数据平面和控制平面:
- 控制平面:Control Plane负责管理和配置数据平面的流量策略,由管理员创建的Istio资源会解析成相关的配置下发到数据平面
- 数据平面:Data Plane负责拦截并处理所有入站(Inbound)和出站(0utbound)流量,用来执行由控制平面下发的策略比如路由、负载均衡、重试、熔断、TLS加密等,同时数据平面还可以收集流量指标、日志和追踪数据,并发送给监控系统。
数据平面在Istio 1.22版本后,分为了Sidecar和Ambient两种模式:
- Sidecar模式:此模式会为集群中启动的每个Pod都部署一个Envoy代理,或者为在虚拟机上运行的服务并行运行一个Envoy代理
- Ambient模式:此模式在每个节点上启动一个四层代理,也可以为每个命名空间启动一个Envoy代理实现七层功能代理
两种模式对比:
在生产环境还是推荐使用Sidecar模式。
Istio Sidecar架构
Istio控制平面组件介绍
在 Kubernetes 环境中,Istio 的控制平面正是以 Pod 的形式 运行在 istio-system 命名空间下的(通常是一个名为 istiod 的 Deployment)。
早期的 Istio(1.5 之前)将控制平面拆分成了多个独立的微服务 Pod。为了降低维护复杂度和资源消耗,现代 Istio 将这些功能整合进了一个统一的单体二进制程序 —— istiod 。
Istiod为Istio的控制平面,提供服务发现、配置、证书管理、加密通信和认证。早期的Istio控制平台并没有Istiod这个容器,而是由Mixer(新版本已废弃)、Pilot、Citadel共同组成,后来为了化Istio的架构,将其合并为Istiod,所以对于新版本的Istio(v1.5+),部署后仅能看到Istiod一类Pod。
🧭 Pilot(服务发现与流量管理):
- 监听 Kubernetes 的 Service、Endpoints 以及 Istio 的路由规则(如 VirtualService)。
- 将高层路由策略转化为 Envoy 能理解的配置,通过 xDS 协议 动态下发给各个数据平面代理。
- 主要用于监听APIServer,动态获取集群中Service和Endpoints信息,并将配置的路由规则、负载均衡策略转换为Envoy可理解的配置并下发至各个Sidecar中
🔐 Citadel(安全与身份凭证):
- 充当内置的证书颁发机构(CA)。
- 负责签发、轮换密钥与证书,为每个 Pod 分配 SPIFFE 身份标识,实现数据平面的双向 mTLS 加密通信。
- 主要用于提供强大的服务与服务之间的最终用户身份验证可用于升级服务网格中未加密的流量,实现双向TLS加密
📋 Galley(配置验证与分发):
- 监听用户提交的 Istio 自定义资源(CRD),负责语法的合法性校验与统一格式化。
- 负责配置管理的组件,用于验证配置信息的格式和正确性。Galley使用网格配置协议(Mesh Configuration Protocol)和其它组件进行配置的交互。
💉 Sidecar Injector(自动注入控制器):
- 充当 Kubernetes 的准入控制器(Webhook)。
- 当检测到带有特定标签的 Pod 创建时,自动在 Pod 中注入
istio-init(配置 iptables)和istio-proxy(Envoy 容器)。
Istio数据平面组件介绍
Istio的数据平面使用的是Envoy,Envoy是用C++开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy代理是唯一一个与数据平面流量交互的Istio组件,并以Sidecar的方式注入到网格中的每一个Pod中。
主要提供以下功能:
- 动态服务发现
- 负载均衡
- HTTP/2 & gRPC代理
- 熔断器
- 监控检查
- 基于百分比流量拆分的灰度发布
- 故障注入
- 丰富的度量指标
Istio核心资源介绍
DestinationRule资源
DestinationRule(简称 DR)是 Istio 流量管理中的核心 CRD 之一, DestinationRule(DR) 的作用就是 “到达目的地之后的策略控制”(负责定义流量到达目标服务后,具体如何负载均衡、如何分组、连接池大小、异常实例驱逐以及是否开启 TLS 加密)。
使用场景:
- 版本划分:根据pod的标签划分同一个服务的不同版本
- 负载均衡策略:支持配置各种负载均衡算法(例如:轮询,随机,最少请求/连接)
- 熔断器:支持配置最大连接数、熔断等
配置示例:
1 | apiVersion: networking.istio.io/v1beta1 |
VirtualService资源
VirtualService(虚拟服务,简称 VS) 是 Istio 流量管理中最核心、最频繁打交道的 CRD(自定义资源)。
如果把 DestinationRule(DR) 比作“到达目的地后的治理与约束(怎么分发、并发限制、熔断)”,那么 VirtualService(VS) 就是流量由谁接待、走哪条路线的“总导航调度器”。它定义了请求如何从客户端或网关被拦截、匹配、重写,并精准路由到具体的后端服务或版本子集(Subset)。
使用场景:
- 灰度发布:支持基于比例的流量分配
- A/B测试:支持基于请求头、URL、权重等条件的流量分配
- 重试:支持错误重试、故障注入、链接超时等策略
配置示例:
1 | apiVersion: networking.istio.io/v1beta1 |
Gateway资源
Gateway(网关资源) 是 Istio 流量管理中专门负责网络边缘流量准入的 CRD(自定义资源)。
在 Istio 的流量管理模型中,Gateway、VirtualService 和 DestinationRule 组成了最经典的三部曲:
- Gateway:负责“开门与安检”(只管在网关边缘监听哪些端口、协议、域名,以及配置 TLS 证书终止与透传)。
- VirtualService:负责“寻路与导流”(请求进门后,按 URI 路径、Header、权重分配到哪个服务)。
- DestinationRule:负责“到达后的治理”(请求到达目标服务后,做版本子集划分、负载均衡、连接池与熔断)。
核心设计哲学(关注点分离):Kubernetes 原生的 Ingress 资源将“端口监听、域名、TLS 证书”与“后端路由规则(路径映射)”杂糅在单个资源中;而 Istio 将这两层解耦——Gateway 专注 L4-L6 的边缘端口与安全,VirtualService 专注 L7 的应用路由。这使得运维人员管理网关和开发人员管理业务路由可以完全权限隔离。
应用场景:
- 端口监听:可以根据协议指定对外暴露的端口
- TLS:可以添加域名证书提供https访问
- 域名:可以根据域名进行路由分发
- 出口管控:可以将出口流量固定从EgressGateway的服务中代理出去
配置示例:
1 | apiVersion: networking.istio.io/v1beta1 |








