--- title: Sidecar 还是 Ambient? description: 了解 Istio 的两种数据平面模式以及您应该使用哪一种。 weight: 30 keywords: [sidecar, ambient] owner: istio/wg-docs-maintainers-english test: 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-mode} Ambient 模式于 2022 年推出,旨在解决 Sidecar 模式用户报告的缺点。从 Istio 1.22 开始,它已准备好用于单集群用例的生产环境。 * 所有流量都通过仅支持四层的节点代理进行代理 * 应用程序可以选择通过 Envoy 代理进行路由,以获得七层功能 ## 在 Sidecar 和 Ambient 之间进行选择 {#choosing-between-sidecar-and-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 Ambient:0.16ms-0.20ms
waypoint:0.40ms-0.50ms
L7 处理步骤 两步(源和目标 Sidecar) 一步(目标 waypoint)
大规模配置 需要对每个 Sidecar 的范围进行配置以削减配置量 无需自定义配置即可工作
支持“服务器优先”协议 需要配置
对 Kubernetes Job 的支持 由于 Sidecar 使用寿命长而变得复杂 透明支持
安全模型 最强:每个工作负载都有自己的密钥 强:每个节点代理仅具有该节点上工作负载的密钥
被入侵的应用程序 Pod
可访问网格密钥
可以 不可以
支持 稳定版,包括多集群 Beta 版,单集群
支持的平台 Kubernetes(任意 CNI)
虚拟机
Kubernetes(任意 CNI)
## 四层与七层功能 {#layer-4-vs-layer-7-features} 在七层处理协议的开销远远高于在四层处理网络数据包的开销。 对于给定的服务,如果您的要求可以在 L4 满足,则可以以更低的成本提供服务网格。 ### 安全 {#security}
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。
### 可观测性 {#observability}
L4 L7
日志记录 基本网络信息:网络 5 元组、发送/接收的字节数等。查看 Envoy 文档 完整的请求元数据日志记录,外加基本的网络信息。
链路追踪 目前还不行,但最终有可能通过 HBONE 实现。 Envoy 参与分布式链路跟踪。查看 Istio 链路追踪概述
指标 仅 TCP(发送/接收的字节数、数据包数量等)。 L7 RED 指标:请求率、错误率、请求持续时间(延迟)。
### 流量管理 {#traffic-management}
L4 L7
负载均衡 仅限连接级别。请参阅 TCP 流量转移任务 根据请求,启用例如金丝雀部署、gRPC 流量等。查看 HTTP 流量转移任务
熔断 仅 TCP 除了 TCP 之外,还有 HTTP 设置
异常值检测 当连接建立/失败时。 请求成功/失败。
限流 仅在建立连接时对 L4 连接数据进行限流,具有全局和本地限流选项。 根据每个请求,L7 请求元数据的限流
超时 仅建立连接(通过断路设置来配置连接保持)。 根据要求。
重试 重试建立连接。 每次请求失败时重试。
故障注入 不适用;无法在 TCP 连接上配置故障注入。 完整的应用程序和连接级故障(超时、延迟、特定响应码)。
流量镜像 不适用;仅支持 HTTP 按百分比将请求镜像到多个后端
## 不支持的功能 {#unsupported-features} 以下功能在 Sidecar 模式下可用,但尚未在 Ambient 模式下实现: * Sidecar 与 waypoint 的互操作性 * 多集群安装 * 多网络支持 * 虚拟机支持