架构
Istio 服务网格在逻辑上分为数据平面和控制平面。
数据平面由一组部署为 Sidecar 的智能代理(Envoy)组成。这些代理调解和控制微服务之间的所有网络通信。它们还收集并报告所有网格流量的遥测数据。
控制平面管理和配置代理以路由流量。
下图显示了构成每个平面的不同组件
组件
以下部分将简要概述 Istio 的每个核心组件。
Envoy
Istio 使用了 Envoy 代理的扩展版本。Envoy 是一个用 C++ 开发的高性能代理,用于调解服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。
Envoy 代理部署为服务的 Sidecar,在逻辑上为服务添加了 Envoy 的许多内置功能,例如
- 动态服务发现
- 负载均衡
- TLS 终止
- HTTP/2 和 gRPC 代理
- 断路器
- 健康检查
- 基于百分比的流量拆分的阶段式发布
- 故障注入
- 丰富的指标
这种 Sidecar 部署允许 Istio 执行策略决策并提取丰富的遥测数据,这些数据可以发送到监控系统以提供有关整个网格行为的信息。
Sidecar 代理模型还允许您在不重新架构或重写代码的情况下,为现有部署添加 Istio 功能。
Envoy 代理启用的一些 Istio 功能和任务包括
流量控制功能:使用针对 HTTP、gRPC、WebSocket 和 TCP 流量的丰富路由规则,强制执行细粒度的流量控制。
网络弹性功能:设置重试、故障转移、断路器和故障注入。
安全性和身份验证功能:强制执行安全策略并通过配置 API 强制执行访问控制和速率限制。
基于 WebAssembly 的可插拔扩展模型,允许对网格流量进行自定义策略执行和遥测生成。
Istiod
Istiod 提供服务发现、配置和证书管理。
Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播到 Sidecar。它抽象了平台特定的服务发现机制,并将它们合成到任何符合 Envoy API 的 Sidecar 可以使用的标准格式。
Istio 可以支持 Kubernetes 或 VM 等多种环境的发现。
您可以使用 Istio 的 流量管理 API 指示 Istiod 优化 Envoy 配置,以便对服务网格中的流量进行更细粒度的控制。
Istiod 的 安全性 使得通过内置身份和凭据管理实现强大的服务到服务和最终用户身份验证。您可以使用 Istio 来升级服务网格中的未加密流量。使用 Istio,运营商可以根据服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来执行策略。此外,您可以使用 Istio 的授权功能 控制谁能访问您的服务。
Istiod 充当证书颁发机构 (CA),并生成证书以允许数据平面中的安全 mTLS 通信。