Sidecar 或 Ambient?

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

数据平面是一组代理,它们中介和控制微服务之间所有网络通信。它们还会收集并报告有关所有网格流量的遥测数据。

The control plane manages and configures the proxies in the data plane.

Istio 支持两种主要data plane modes

  • 边车模式,它在集群中启动的每个 Pod 旁边部署一个 Envoy 代理,或者与运行在 VM 上的服务并行运行。
  • 环境模式,它使用每个节点的第 4 层代理,以及可选的每个命名空间的 Envoy 代理用于第 7 层功能。

您可以选择将某些命名空间或工作负载加入到每种模式。

Sidecar 模式

Istio 从 2017 年首次发布以来一直基于边车模式构建。边车模式已被充分理解并经过了充分的实战测试,但会带来资源成本和操作开销。

  • 您部署的每个应用程序都包含一个 Envoy 代理injected 作为边车
  • 所有代理都可以处理第 4 层和第 7 层

Ambient 模式

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

  • 所有流量都通过仅限第 4 层的节点代理进行代理
  • 应用程序可以选择加入通过 Envoy 代理路由,以获得第 7 层功能

在 Sidecar 和 Ambient 之间选择

用户通常会部署网格以启用零信任安全策略作为第一步,然后根据需要选择性地启用 L7 功能。环境网格允许这些用户在不需要时完全绕过 L7 处理的成本。

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

第 4 层与第 7 层功能

在第 7 层处理协议的开销远远高于在第 4 层处理网络数据包的开销。对于给定的服务,如果您的需求可以在 L4 层满足,则可以以更低的成本交付服务网格。

安全

L4L7
加密Pod 之间的所有流量都使用mTLS 进行加密。N/A - Istio 中的服务身份基于 TLS。
服务到服务认证SPIFFE,通过 mTLS 证书。Istio 会颁发一个短期 X.509 证书,该证书会对 Pod 的服务帐户身份进行编码。N/A - Istio 中的服务身份基于 TLS。
服务到服务授权基于网络的授权,以及基于身份的策略,例如
  • A 可以接受来自“10.2.0.0/16”的入站调用;
  • A 可以调用 B。
完整的策略,例如
  • A 只能使用包含 READ 范围的有效最终用户凭据在 B 上执行 GET /foo。
最终用户认证N/A - 我们无法应用每个用户的设置。JWT 的本地认证,支持通过 OAuth 和 OIDC 流进行远程认证。
最终用户授权N/A - 请参见上文。服务到服务策略可以扩展为要求<a href="/latest/docs/reference/config/security/conditions/">具有特定范围、发行者、主体、受众等的最终用户凭据。
可以使用外部授权来实现完整的用户到资源访问,允许使用来自外部服务的请求级策略,例如 OPA。

可观察性

L4L7
日志记录基本网络信息:网络 5 元组、发送/接收的字节数等。<a href="https://envoy.k8s.ac.cn/docs/envoy/latest/configuration/observability/access_log/usage#command-operators">请参见 Envoy 文档</a>。<a href="https://envoy.k8s.ac.cn/docs/envoy/latest/configuration/observability/access_log/usage#command-operators">完整的请求元数据日志记录</a>,除了基本网络信息之外。
跟踪今天不行;最终可能与 HBONE 结合使用。Envoy 参与分布式跟踪。<a href="/latest/docs/tasks/observability/distributed-tracing/overview/">请参见 Istio 关于跟踪的概述</a>。
指标仅限 TCP(发送/接收的字节数、数据包数量等)。L7 RED 指标:请求率、错误率、请求持续时间(延迟)。

流量管理

L4L7
负载均衡仅限连接级别。<a href="/latest/docs/tasks/traffic-management/tcp-traffic-shifting/">请参见 TCP 流量切换任务</a>。每个请求,启用例如金丝雀部署、gRPC 流量等。<a href="/latest/docs/tasks/traffic-management/traffic-shifting/">请参见 HTTP 流量切换任务</a>。
断路器仅限 TCP.<a href="/latest/docs/reference/config/networking/destination-rule/#ConnectionPoolSettings-HTTPSettings">HTTP 设置</a>,除了 TCP 之外。
异常值检测在建立/失败连接时。在请求成功/失败时。
速率限制<a href="https://envoy.k8s.ac.cn/docs/envoy/latest/configuration/listeners/network_filters/rate_limit_filter#config-network-filters-rate-limit">仅限于在建立连接时对 L4 连接数据进行速率限制</a>,具有全局和本地速率限制选项。<a href="https://envoy.k8s.ac.cn/docs/envoy/latest/configuration/http/http_filters/rate_limit_filter#config-http-filters-rate-limit">对 L7 请求元数据进行速率限制</a>,每个请求一次。
超时仅限建立连接(连接保持活动通过断路器设置配置)。每个请求一次。
重试重试建立连接重试每个请求失败。
故障注入N/A - 无法在 TCP 连接上配置故障注入。完整的应用程序和连接级故障(<a href="/latest/docs/tasks/traffic-management/fault-injection/">超时、延迟、特定响应代码</a>)。
流量镜像N/A - 仅限 HTTP将请求按百分比镜像到多个后端.

不支持的功能

以下功能在边车模式下可用,但在环境模式下尚未实现

  • 边车到航标的互操作性
  • 多集群安装
  • 多网络支持
  • VM 支持
这些信息对您有帮助吗?
您对改进有任何建议吗?

感谢您的反馈!