istio.io/content/zh/docs/overview/dataplane-modes/index.md

11 KiB
Raw Blame History

title description weight keywords owner test
Sidecar 还是 Ambient 了解 Istio 的两种数据平面模式以及您应该使用哪一种。 30
sidecar
ambient
istio/wg-docs-maintainers-english n/a

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

{{< gloss "data plane" >}}数据平面{{< /gloss >}}是一组代理,用于调解和控制微服务之间的所有网络通信。 它们还收集和报告所有网格流量的可观测数据。

{{< gloss "control plane" >}}控制平面{{< /gloss >}}管理和配置数据平面中的代理。

Istio 支持两种主要的{{< gloss "data plane mode">}}数据平面模式{{< /gloss >}}

  • Sidecar 模式,它会与您在集群中启动的每个 Pod 一起部署一个 Envoy 代理,或者与在虚拟机上运行的服务一同运行。
  • Ambient 模式,使用每个节点的四层代理,并且可选地使用每个命名空间的 Envoy 代理来实现七层功能。

您可以选择将某些命名空间或工作负载纳入任意模式。

Sidecar 模式 {#sidecar=mode}

Istio 自 2017 年首次发布以来就基于 Sidecar 模式构建。 Sidecar 模式易于理解且经过彻底的实战测试,但需要花费资源成本和运营开销。

  • 您部署的每个应用程序都有一个 Envoy 代理{{< gloss "injection" >}}被注入{{< /gloss >}}作为 Sidecar
  • 所有代理都可以处理四层和七层流量

Ambient 模式

Ambient 模式于 2022 年推出,旨在解决 Sidecar 模式用户报告的缺点。从 Istio 1.22 开始,它已准备好用于单集群用例的生产环境。

  • 所有流量都通过仅支持四层的节点代理进行代理
  • 应用程序可以选择通过 Envoy 代理进行路由,以获得七层功能

在 Sidecar 和 Ambient 之间进行选择

用户通常首先部署网格以实现零信任安全态势,然后根据需要选择性地启用 L7 功能。 Ambient 网格允许这些用户在不需要时完全绕过 L7 处理的成本。

Sidecar Ambient
流量管理 完整的 Istio 功能集 完整的 Istio 功能集(需要使用 waypoint
安全 完整的 Istio 功能集 完整的 Istio 功能集Ambient 模式下具备加密和 L4 鉴权。需要 waypoint 才能进行 L7 鉴权。
可观测性 完整的 Istio 功能集 完整的 Istio 功能集Ambient 模式下具备 L4 可观测;使用 waypoint 实现 L7 可观察性
可扩展性 完整的 Istio 功能集 完整的 Istio 功能集(需要使用 waypointα
向网格添加工作负载 标记命名空间并重新启动所有 Pod 以添加 Sidecar 标记命名空间 - 无需重启 Pod
增量部署 二进制Sidecar 是否已被注入 渐进式L4 始终开启L7 可通过配置添加
生命周期管理 代理由应用程序开发人员管理 平台管理员
资源利用 浪费;必须为每个单独的 Pod 的最坏情况配置 CPU 和内存资源 waypoint 代理可以像任何其他 Kubernetes 部署一样自动扩展。
具有多个副本的工作负载可以使用同一个 waypoint而不是每个副本都有自己的边车。
平均资源成本
平均延迟p90/p99 0.63ms-0.88ms Ambient0.16ms-0.20ms
waypoint0.40ms-0.50ms
L7 处理步骤 两步(源和目标 Sidecar 一步(目标 waypoint
大规模配置 需要对每个 Sidecar 的范围进行配置以削减配置量 无需自定义配置即可工作
支持“服务器优先”协议 需要配置
对 Kubernetes Job 的支持 由于 Sidecar 使用寿命长而变得复杂 透明支持
安全模型 最强:每个工作负载都有自己的密钥 强:每个节点代理仅具有该节点上工作负载的密钥
被入侵的应用程序 Pod
可访问网格密钥
可以 不可以
支持 稳定版,包括多集群 Beta 版,单集群
支持的平台 Kubernetes任意 CNI
虚拟机
Kubernetes任意 CNI

四层与七层功能

在七层处理协议的开销远远高于在四层处理网络数据包的开销。 对于给定的服务,如果您的要求可以在 L4 满足,则可以以更低的成本提供服务网格。

安全

L4 L7
加密 所有 Pod 之间的流量都使用 {{< gloss "mutual tls authentication" >}}mTLS{{< /gloss >}} 加密. 不适用Istio 中的服务身份基于 TLS。
服务到服务的身份验证 {{< gloss >}}SPIFFE{{< /gloss >}},通过 mTLS 证书。Istio 颁发一个短期 X.509 证书,该证书对 Pod 的服务帐户身份进行编码。 不适用Istio 中的服务身份基于 TLS。
服务到服务的鉴权 基于网络的鉴权,加上基于身份的策略,例如:
  • A 只能接受来自“10.2.0.0/16”的入站呼叫
  • A 可以调用 B。
完整政策,例如:
  • 只有使用包含 READ 范围的有效最终用户凭据A 才能在 B 上执行 GET /foo 操作。
最终用户身份验证 不适用;我们无法应用每个用户的设置。 JWT 的本地身份验证,支持通过 OAuth 和 OIDC 流进行远程身份验证。
最终用户鉴权 不适用;同上 可以扩展服务到服务的策略,以要求具有特定范围、发行者、主体、受众等的最终用户凭证
可以使用外部鉴权实现完整的用户到资源访问,允许根据外部服务的决策制定每个请求的策略,例如 OPA。

可观测性

L4 L7
日志记录 基本网络信息:网络 5 元组、发送/接收的字节数等。查看 Envoy 文档 完整的请求元数据日志记录,外加基本的网络信息。
链路追踪 目前还不行,但最终有可能通过 HBONE 实现。 Envoy 参与分布式链路跟踪。查看 Istio 链路追踪概述
指标 仅 TCP发送/接收的字节数、数据包数量等)。 L7 RED 指标:请求率、错误率、请求持续时间(延迟)。

流量管理

L4 L7
负载均衡 仅限连接级别。请参阅 TCP 流量转移任务 根据请求启用例如金丝雀部署、gRPC 流量等。查看 HTTP 流量转移任务
熔断 仅 TCP 除了 TCP 之外,还有 HTTP 设置
异常值检测 当连接建立/失败时。 请求成功/失败。
限流 仅在建立连接时对 L4 连接数据进行限流,具有全局和本地限流选项。 根据每个请求,L7 请求元数据的限流
超时 仅建立连接(通过断路设置来配置连接保持)。 根据要求。
重试 重试建立连接。 每次请求失败时重试。
故障注入 不适用;无法在 TCP 连接上配置故障注入。 完整的应用程序和连接级故障(超时、延迟、特定响应码)。
流量镜像 不适用;仅支持 HTTP 按百分比将请求镜像到多个后端

不支持的功能

以下功能在 Sidecar 模式下可用,但尚未在 Ambient 模式下实现:

  • Sidecar 与 waypoint 的互操作性
  • 多集群安装
  • 多网络支持
  • 虚拟机支持