在近期整理服务网格数据平面的几种部署模式时,我关注到了徐中虎在 KubeCon China 2024 的分享《Istio 数据平面的新选择:全新性能体验的架构创新》。该分享介绍了 Kmesh,它利用 eBPF 和内核增强技术,消除了 Sidecar,并提出了双引擎模式,是一种创新性的服务网格解决方案。去年我已听闻 Kmesh,借此契机我深入研究了 Kmesh,撰写此博客与大家分享。
像 Istio 这样的服务网格已成为管理复杂微服务架构的核心,提供流量管理、安全性和可观测性等功能。Sidecar 模型,即在每个服务实例旁运行一个代理,已成为主要方法。虽然功能有效,但这种架构引入了显著的延迟和资源开销。
延迟开销:增加 Sidecar 代理会导致网络跳数和上下文切换增加,每次服务调用引入额外 2 至 3 毫秒 的延迟。对于对延迟敏感的应用,这种延迟是不可接受的。
资源消耗:每个 Sidecar 都会消耗 CPU 和内存资源。在拥有数千个服务的大规模部署中,累积的资源开销巨大,虽然可以通过一定的技术手段进行优化,但依然降低了部署密度并增加了运营成本。
Istio 的性能测量显示,即使没有流量分发,仍存在约 3 毫秒的固有延迟开销。随着连接数量的增长,延迟相应增加,这突显了 Sidecar 模型在高性能应用中的低效。
已经提出了多种解决方案来缓解 Sidecar 架构的缺点:
这些解决方案虽然创新,但并未完全解决 Sidecar 架构固有的延迟和资源开销问题。
更多详细信息可以参考我的另一篇文章:数据平面的几种部署模式。
Kmesh 通过将流量治理直接集成到操作系统内核,定义了一种新的服务网格数据平面。利用 eBPF(扩展伯克利数据包过滤器)和内核增强,Kmesh 提供高性能、低延迟和资源高效的服务网格能力。
下图展示了 Kmesh 的架构。
核心组件:
Kmesh-Daemon:每个节点的管理组件,负责:
eBPF 编排:在内核级实现流量拦截和管理,支持:
Waypoint Proxy(双引擎模式下可选):处理高级 L7 流量治理,可按命名空间或服务进行部署。
该分享中指出 Kmesh 具有以下优势,尤其是性能和资源利用率上:
高性能:
低资源开销:
高可用性:
安全隔离:
灵活的治理模型:
无缝兼容性:
通过上文中对 Kmesh 的介绍,你会发现它与 Istio Ambient 模式及 Cilium mesh 有很多相似性,下表将从多个维度对比它们之间的区别。
比较维度 | Kmesh | Istio Ambient 模式 | Cilium Mesh |
---|---|---|---|
流量拦截与处理方式 | • 内核级处理: 利用 eBPF 和内核增强,将流量治理直接集成到操作系统内核中。 •模式选择: • 内核原生模式: L4 和 L7 流量全部在内核中处理,无需用户空间代理。 • 双引擎模式: L4 在内核中处理,L7 由 Waypoint Proxy 处理。 |
• 用户空间处理: 引入 ztunnel 和 Waypoint Proxy,在用户空间进行流量拦截和管理。 • 无 Sidecar 架构: 消除了 Sidecar,但增加了新的用户空间组件。 |
• 混合处理: 结合 eBPF 和 Envoy。 • L4 流量: 在内核中使用 eBPF 处理。 • L7 流量: 由用户空间的 Envoy 代理处理。 |
性能与延迟 | • 高性能: 内核级处理,减少上下文切换和数据拷贝。 • 延迟降低: 转发延迟降低超过 60%。 • 低延迟启动: 应用启动时间提高 40%。 |
• 性能改进但仍有延迟: 比传统 Sidecar 架构有所提升,但用户空间处理和增加的网络跳数仍带来延迟。 | • L4 性能优异: L4 流量内核处理,高效。 • L7 存在开销: L7 流量通过 Envoy,增加网络跳数和潜在延迟。 |
架构复杂度 | • 内核依赖: 需要特定内核版本或增强,部署复杂度增加。 • 组件简洁: 内核处理,减少对用户空间组件的依赖。 |
• 新增组件: 引入 ztunnel 和 Waypoint Proxy,架构更复杂。 • Istio 生态: 继承 Istio 的复杂性。 |
• 双重组件: 需要管理 eBPF 和 Envoy。 • L7 复杂性: 处理 L7 流量时架构更复杂。 • CNI 集成: 简化部分网络配置。 |
安全性与隔离 | • 内核级安全: 利用 BPF 虚拟机和 cgroup 隔离,提供高安全保障。 • mTLS 内核支持: 内核实现双向 TLS,加密性能高。 |
• 用户空间安全: 通过用户空间组件实现安全功能,可能增加攻击面。 • 丰富策略支持: 继承 Istio 的安全策略和配置能力。 |
• eBPF 安全特性: 利用 eBPF 的安全模型。 • 隔离挑战: 治理故障隔离需额外考虑。 |
兼容性与集成 | • Istio 控制平面: 集成 Istio 控制平面,支持 xDS 协议,兼容 Istio API 和 Gateway API。 • Kubernetes 原生: 无缝运行在 Kubernetes 上。 |
• 完全兼容: 作为 Istio 的一部分,完全兼容 Istio API 和生态系统。 | • CNI 角色: 作为 Kubernetes 的 CNI 插件,提供网络和服务网格功能。 • 网络策略: 提供强大的网络策略和安全功能。 |
部署与运维考虑 | • 内核要求: 需修改内核或使用特定版本,注意兼容性。 • 性能优先: 适合追求极致性能的场景。 |
• 易于迁移: 为 Istio 用户提供无 Sidecar 替代方案,便于过渡。 • 复杂性管理: 需管理新增用户空间组件。 |
• 现有 Cilium 用户: 已使用 Cilium 时,集成服务网格功能简单。 • 学习曲线: 需熟悉 eBPF 与 Envoy 的结合。 |
总结:
Kmesh:通过将流量治理下沉到内核,实现高性能和低延迟,适用于对性能和资源效率要求极高的应用。但需要特定的内核支持,部署时需考虑兼容性。
Istio Ambient Mesh:消除了 Sidecar,改进了性能,保留了 Istio 的丰富功能,但用户空间处理可能带来新的复杂性和延迟。
Cilium Mesh:利用 eBPF 提高 L4 性能,但 L7 流量处理依赖 Envoy,可能增加复杂性和延迟。适合已经使用 Cilium 的环境,提供强大的网络策略和安全功能。
Kmesh 提供两种运行模式,以满足不同的部署需求:
概述:
优势:
考虑因素:
概述:
优势:
与 Ambient Mesh 的比较:
eBPF(扩展伯克利数据包过滤器) 是一种强大的技术,允许安全高效地将自定义代码注入到 Linux 内核。Kmesh 利用 eBPF 来:
在内核原生模式中:
在双引擎模式中:
测试设置:
结果:
解读:
Kmesh 通过将流量管理移入内核,代表了服务网格技术的范式转变。利用 eBPF 和内核增强,它解决了传统 Sidecar 架构中延迟和资源开销的关键问题。Kmesh 为现代云原生应用提供了灵活、高性能的解决方案,特别适用于需要低延迟和高吞吐量的场景。
主要收获:
最后更新于 2024/12/05