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 层满足,则可以以更低的成本交付服务网格。
安全
L4 | L7 | |
---|---|---|
加密 | Pod 之间的所有流量都使用mTLS 进行加密。 | N/A - Istio 中的服务身份基于 TLS。 |
服务到服务认证 | SPIFFE,通过 mTLS 证书。Istio 会颁发一个短期 X.509 证书,该证书会对 Pod 的服务帐户身份进行编码。 | N/A - Istio 中的服务身份基于 TLS。 |
服务到服务授权 | 基于网络的授权,以及基于身份的策略,例如
| 完整的策略,例如
|
最终用户认证 | N/A - 我们无法应用每个用户的设置。 | JWT 的本地认证,支持通过 OAuth 和 OIDC 流进行远程认证。 |
最终用户授权 | N/A - 请参见上文。 | 服务到服务策略可以扩展为要求<a href="/latest/docs/reference/config/security/conditions/">具有特定范围、发行者、主体、受众等的最终用户凭据。 可以使用外部授权来实现完整的用户到资源访问,允许使用来自外部服务的请求级策略,例如 OPA。 |
可观察性
L4 | L7 | |
---|---|---|
日志记录 | 基本网络信息:网络 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 指标:请求率、错误率、请求持续时间(延迟)。 |
流量管理
L4 | L7 | |
---|---|---|
负载均衡 | 仅限连接级别。<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 支持