Sidecar 还是 Ambient?
Istio 服务网格在逻辑上分为数据平面和控制平面。
数据平面是一组代理,用于调解和控制微服务之间的所有网络通信。 这些代理还可以收集和报告所有网格流量的可观测数据。
控制平面管理和配置数据平面中的这些代理。
Istio 支持两种主要的数据平面模式:
- Sidecar 模式,此模式会为集群中启动的每个 Pod 都部署一个 Envoy 代理, 或者与在虚拟机上运行的服务并行运行一个 Envoy 代理。
- Ambient 模式,此模式在每个节点上使用四层代理, 另外可以选择为每个命名空间使用一个 Envoy 代理来实现七层功能。
您可以选择将某些命名空间或工作负载纳入任一模式。
Sidecar 模式 {#sidecar=mode}
Istio 自 2017 年首次发布以来就基于 Sidecar 模式构建。 Sidecar 模式易于理解且经过彻底的实战测试,但需要花费资源成本和运营开销。
- 您部署的每个应用都有一个 Envoy 代理被注入作为 Sidecar
- 所有代理都可以处理四层和七层流量
Ambient 模式
Ambient 模式于 2022 年推出,旨在解决 Sidecar 模式用户报告的缺点。 从 Istio 1.22 开始,它在单集群使用场景就达到生产就绪状态。
- 所有流量都通过仅支持四层的节点代理进行代理
- 应用可以选择通过 Envoy 代理进行路由,以获得七层功能
在 Sidecar 和 Ambient 之间做出选择
用户通常首先部署网格以实现零信任安全态势,然后根据需要选择性地启用 L7 功能。 Ambient 网格允许这些用户在不需要 L7 功能时完全绕过 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 Deployment 一样自动扩缩容。 有多个副本的工作负载可以使用同一个 waypoint,而不是每个副本都有自己的 Sidecar。 |
平均资源成本 | 大 | 小 |
平均延迟(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) |
四层与七层功能
在七层处理协议的开销远远高于在四层处理网络数据包的开销。 对于给定的服务,如果您的要求可以在 L4 被满足,则可以以明显更低的成本交付服务网格。
安全
L4 | L7 | |
---|---|---|
加密 | 所有 Pod 之间的流量都使用 mTLS 加密。 | 不适用;Istio 中的服务身份基于 TLS。 |
服务到服务的身份验证 | 通过 mTLS 证书执行 SPIFFE。Istio 颁发一个短期 X.509 证书,对 Pod 的服务帐户身份进行编码。 | 不适用;Istio 中的服务身份基于 TLS。 |
服务到服务的鉴权 | 基于网络的鉴权,加上基于身份的策略,例如:
| 完整政策,例如:
|
最终用户身份验证 | 不适用;我们无法应用每个用户的设置。 | 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 的互操作性
- 多集群安装
- 多网络支持
- 虚拟机支持