Istio 简介

Istio 是什么?

  • 定义

Istio是一个开源服务网格,可以透明地分层部署在现有的分布式应用程序上。Istio强大的功能提供了一种统一且更高效的方式来保护、连接和监控服务。Istio 是实现负载均衡、服务到服务身份验证和监控的途径——只需更改很少或不需要更改服务代码。

  • 功能

简化服务间通信、增强系统的可观察性和安全性。

  1. 在集群中通过双向 TLS 加密、基于身份的强身份验证和授权实现安全的服务到服务通信

  2. HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡

  3. 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行精细控制

  4. 支持访问控制、速率限制和配额的可插拔策略层和配置 API;

  5. 集群内所有流量的自动指标、日志和跟踪,包括集群入口和出口。

为什么选择 Istio?

  • 简单而强大

Kubernetes 具有数百种功能和数十个 API,但您只需一个命令即可开始使用它。我们以相同的方式构建了 Istio。渐进式披露意味着您可以使用一小部分 API,并且仅在需要时转动更强大的旋钮。

而其他"simple service meshes"花了数年时间赶上 Istio 第一天就拥有的功能集。

  • Envoy 代理

Istio 继承了 Envoy 的所有功能和灵活性(流量管理与控制、监控跟踪、安全性和扩展等),包括使用 Istio 团队在 Envoy 中开发的 WebAssembly 的世界级可扩展性。

  • 其他

社区强大、定期发布安全补丁等。

Istio 的核心概念

Service Mesh(服务网格)

管理微服务之间的复杂通信。

Data Plane(数据平面)

数据平面是一组代理,用于调解和控制微服务之间的所有网络通信。它们还收集和报告所有网状流量的遥测数据。

Sidecar Mode(边车模式)

将 Sidecar Proxy(如:Envoy 代理) 与在集群中启动的每个 Pod 一起部署,或者与虚拟机上运行的服务一起运行。以捕获流量并提供可观察性和控制能力。

Ambient Mode(环境模式)

使用每个节点的第 4 层代理,以及可选的每个命名空间的 Envoy 代理来实现第 7 层功能。

Ztunnel(Zero Trust Tunnel):负责所有 L4 层的网络流量,将服务之间的流量进行加密和认证。它是一种“零信任”的隧道,确保服务间流量安全。所有 Pod 会自动将流量导向 Ztunnel。

Waypoint Proxy:可选的 L7 层代理,负责服务的 HTTP 路由、负载均衡、鉴权等操作。它的使用是可选的,只有在需要 L7 功能时才会启用。

Control Plane(控制平面)

控制平面管理和配置数据平面中的代理,如 Istiod。

Istio 的架构与组件

  • 架构

Istio 会拦截所有的网络流量,并且会在每个 pod 上以 sidecar 的形式注入一个智能代理,从而能够应用一组特定的规则。让所有特性生效的代理是由**数据平面(Data Plane)组成的,而数据平面是由控制平面(Control Plane)**动态配置的。

Istio 架构演进

Envoy Proxy

执行数据平面功能,为每个微服务分发的代理。Envoy 代理是唯一与数据平面流量交互的 Istio 组件

Envoy 是如何实现重试和断路器

流程说明:

  1. 服务 A 发送请求给服务 B 的第一个实例,不过调用失败了;
  2. Envoy Sidecar 会进行重试;(1)
  3. 失败的请求返回发起调用的代理;
  4. 开启断路器并在随后的请求中调用下一个服务。(2)

Istiod

控制平面的核心组件,Istiod 提供服务发现、配置和证书管理。负责配置和管理数据平面的 Envoy。

  • Pilot

负责 Istio 数据平面的 xDS 配置管理,具体包括:

服务、配置规则发现

为 Sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。通过提供通用的流量管理模型和服务发现适配器(Service Discovery Adapter),来对接不同平台的适配层。

xDS 配置下发

提供统一的 xDS API,供 Sidecar 调用。将路由规则等配置信息转换为 Sidecar 可以识别的信息,并下发给数据平面。

  • Citadel

负责安全证书的管理和发放,可以实现授权和认证等操作。

Citadel 并不是唯一的证书管理方式,Istio 当前支持 Citadel、Vault 和 Google 等多种证书管理方式,Citadel 是当前默认的证书管理方式

  • Galley

Galley 是 Istio 1.1 版本中新引入的配置管理组件,主要负责配置的验证、提取和处理等功能。其目的是将 Istio 和底层平台(如 Kubernetes)进行解耦。

在引入 Galley 之前,Istio 控制平面的各个组件需要分别对 Kubernetes 资源进行管理,包括资源的配置验证,监控资源配置变化,并针对配置变更采取相应的处理等。

其他组件

Gateway、VirtualService、DestinationRule 等。

Gateway控制外部流量进入服务网格的入口点,并负责协议、端口及 TLS 等基本设置。

VirtualService定义流量的路由规则,控制流量如何从 Gateway 或服务之间路由到特定的服务和服务版本。

DestinationRule定义路由目标的策略和配置,例如负载均衡、连接池、断路器及 mTLS 等,用于流量到达目标服务后进行更细粒度的控制。

Istio 的流量管理

核心流量管理功能

  • 概述

Istio 的流量管理模型源于和服务一起部署的 Envoy 代理。 网格内服务发送和接收的所有 data plane 流量都经由 Envoy 代理, 这让控制网格内的流量变得异常简单,而且不需要对服务做任何的更改。

流量路由

  • 概述

流量路由功能允许 Istio 根据流量属性(如请求路径、HTTP 头、Cookie 等)将流量引导至特定的服务版本。主要功能包括:

条件路由:可以基于请求内容(如路径、头信息、Cookie)或用户属性,将流量引导到不同的服务版本,实现路径分离和定制化服务体验。

权重路由:可以按比例将流量分配到多个服务版本,支持金丝雀发布、蓝绿部署等场景。

流量镜像:将一部分流量克隆到新的服务版本上,用于测试和监控,但不影响实际用户。

  • 示例

通过 VirtualService 配置 80% 的流量到 v1,20% 到 v2 版本



apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: weighted-routing
spec:
  hosts:
  - my-service
  http:
  - route:
    - destination:
        host: my-service
        subset: v1
      weight: 80
    - destination:
        host: my-service
        subset: v2
      weight: 20



负载均衡

  • 概述

Istio 支持如下的负载均衡模型, 可以在 DestinationRule 中为流向某个特定服务或服务子集的流量指定这些模型:

轮询 (Round Robin):将流量按顺序轮流分配给不同实例,简单高效(默认)。

最小连接数 (Least Connection):优先选择连接数最少的实例,适用于高并发环境。

随机选择 (Random):随机选择实例,避免热点服务。

权重(Weight):请求根据指定的百分比转发到池中的实例。<

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部