前言

最近几个月在帮助公司某工厂的 IT项目实施微服务治理建设,并且对公司内部进行了一系列的微服务治理培训,因此对 Istio 服务网格架构的技术进行了总结。

简介

Istio 是一个开源的服务网格平台,用于连接、管理和保护微服务。它提供了流量管理、安全性、可观测性等核心功能,而无需更改应用程序代码。本文将通过一系列架构图来详细解释 Istio 的工作原理和关键组件。

Istio 通过 ServiceEntry 接入外部服务的架构

Istio 整体架构

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

  • 数据平面:由一组以 sidecar 方式部署的智能代理(Envoy)组成,这些代理负责协调和控制微服务之间的所有网络通信。
  • 控制平面:负责管理和配置代理来路由流量,以及实施策略和收集遥测数据。

Istiod 作为控制平面的核心组件,集成了多个功能,包括服务发现、配置管理和证书管理等。

通过 ServiceEntry 资源,Istio 能够将外部服务纳入到服务网格中进行管理:

  • ServiceEntry 允许将外部依赖添加到 Istio 的内部服务注册表中
  • 这使得网格内部的服务能够访问和使用这些外部服务
  • 网格管理员可以为这些外部服务配置流量路由、安全策略和遥测收集
  • 这种方式使 Istio 的功能扩展到了集群外部,实现了统一的治理模型

Istiod 工作流程

Istiod 工作流程

上图展示了 Istiod 的工作流程:

  1. Istiod 从 Kubernetes API 服务器获取服务注册信息
  2. Istiod 为服务生成配置
  3. Istiod 将配置分发给各个 Envoy 代理
  4. Envoy 代理根据配置处理服务之间的通信

这种设计使得流量控制和策略执行与业务逻辑完全分离,允许服务网格透明地添加这些功能而无需修改应用代码。

Istiod 模块组成

Istiod 模块组成

Istiod 内部由多个模块组成:

  • Pilot:提供服务发现、流量管理和路由规则配置
  • Citadel:负责证书颁发和密钥管理
  • Galley:负责配置验证、摄入、处理和分发
  • Mixer (已废弃):在较新版本中,其功能已被集成到 Envoy 代理中

这种统一的控制平面设计简化了 Istio 的部署和操作。

Istio 服务发现

Istio 服务发现

Istio 的服务发现机制:

  1. Kubernetes 服务被注册到服务注册表中
  2. Istiod 监听服务注册表的变化
  3. Envoy 代理通过 xDS API 从 Istiod 接收服务信息
  4. Envoy 代理根据这些信息构建路由表并处理流量

服务发现使得服务网格能够动态适应环境中的变化,如新服务的部署或现有服务的更新。

Sidecar 注入流程

Sidecar 注入流程

Sidecar 注入是将 Envoy 代理添加到应用程序 Pod 中的过程:

  1. 用户创建 Kubernetes 部署
  2. 通过准入控制器 Webhook,Istio 拦截 Pod 创建请求
  3. Istio 修改 Pod 规范,注入 Envoy sidecar 容器
  4. 修改后的 Pod(包含应用容器和 Envoy sidecar)被部署到集群中

注入可以是自动的(通过命名空间标签启用)或手动的(使用 istioctl kube-inject 命令)。

Envoy 代理工作序列

Envoy 代理工作序列

当服务间通信发生时,Envoy 代理:

  1. 拦截进出服务的所有入站和出站流量
  2. 应用路由规则、策略执行和流量转移
  3. 收集详细的遥测数据
  4. 提供认证、授权和加密功能

这种边车代理模式使 Istio 能够提供一致的流量管理和安全能力,而不管底层平台或语言是什么。

Istio Ingress Gateway

Istio Ingress Gateway

Istio Ingress Gateway 控制进入服务网格的流量:

  1. 外部流量首先到达 Ingress Gateway
  2. Gateway 资源定义要公开的端口和协议
  3. VirtualService 资源定义如何路由请求到内部服务
  4. Ingress Gateway 应用相关策略并路由流量到目标服务

与 Kubernetes Ingress 不同,Istio Gateway 提供了更丰富的流量管理功能,包括高级路由、流量分割和细粒度的安全控制。

总结

Istio 通过其强大的控制平面和数据平面架构,为微服务提供了丰富的功能,包括流量管理、安全性和可观察性。本文介绍的架构图展示了 Istio 的各个组件如何协同工作,以实现无侵入式的服务网格管理。通过深入理解这些架构,开发人员和运维人员可以更有效地使用 Istio 来管理和保护他们的微服务应用。