Kmesh v0.1.0 版本发布

💡 原文中文,约4200字,阅读约需10分钟。
📝

内容提要

华为云社区发布了Kmesh v0.1.0版本,是业内首个内核级云原生流量治理引擎,通过基础软件创新帮助用户构筑高性能的通信基础设施。Kmesh基于eBPF+可编程内核技术,实现了内核级sidecarless网格数据面,提供高性能、低开销、安全隔离和平滑兼容等关键能力。Kmesh支持一键部署、基于namespace使能、无缝连通Istio Sidecar、自动对接服务网格控制面等特性。性能测试显示Kmesh转发时延和CPU开销明显降低。Kmesh还具备内核级流量编排运行时、XDS规则管理和流量治理编排实现等关键技术。

🔎

延伸解读

内核级数据面如何提升性能

Kmesh 将流量治理下沉到操作系统内核,数据路径无需经过代理层,使网格内服务通信从代理架构的三跳变为一跳。性能测试显示,其转发时延相比 Istio Sidecar 模式降低 50% 以上,接近 K8s 原生转发时延;相同 QPS 下 CPU 开销也明显低于 Sidecar 模式,基本与 K8s 原生一致。这种设计大幅降低了网格基础设施的资源开销。

与现有服务网格的兼容性

Kmesh 支持与 Istiod 等遵循 XDS 协议的控制面对接,并可与现有 Sidecar 网格协同工作。在已有 Sidecar 的网格环境中启用 Kmesh 后,指定 namespace 下新创建的 Pod 流量会自动被 Kmesh 接管,不再经过 Sidecar 代理。此外,Kmesh 支持按 namespace 使能流量接管,类似 Istio 的标签方式,便于渐进式迁移。

内核依赖与运行模式

Kmesh 的完整治理能力依赖内核增强补丁,当前 openEuler 23.03 版本已原生支持。对于其他操作系统,需要基于增强 patch 构建内核才能使用完整功能。不过,Kmesh 提供了兼容运行模式,可在无增强补丁的内核版本上运行,根据 OS 内核能力自适应使能特性,降低了试用门槛,但可能无法发挥全部性能优势。

关键技术实现要点

Kmesh 通过伪建链和延迟建链机制,将链路建立推迟到业务报文发送阶段,在内核中完成流量编排后再建链转发。XDS 规则管理采用 map-in-map 结构解决层次化模型存储,将 XDS 模型转换为 eBPF map 数据。流量治理编排则基于 eBPF Tail Calls 特性,将复杂治理过程拆分为多个独立 eBPF 程序,具备较好的扩展性。

❓

Q&A

Kmesh 是什么?它主要解决什么问题?

Kmesh 是业内首个内核级云原生流量治理引擎,基于 eBPF 和可编程内核技术,将流量治理下沉到操作系统内核,实现内核级 sidecarless 网格数据面。它主要解决传统服务网格中 Sidecar 代理带来的转发时延高、资源开销大的问题,为应用提供高性能、低开销的通信基础设施。

Kmesh v0.1.0 有哪些关键特性?

Kmesh v0.1.0 的关键特性包括:一键部署(通过 yaml 部署)、基于 namespace 使能流量接管、无缝连通 Istio Sidecar(新 Pod 流量自动被 Kmesh 接管)、自动对接服务网格控制面(支持 Istiod 及遵循 XDS 协议的控制面)、TCP/HTTP1.1 基础流量治理(头域匹配、路由、灰度、负载均衡)、兼容运行模式(在无增强补丁的内核上以兼容模式运行)。

Kmesh 相比 Istio Sidecar 模式在性能上有什么优势?

根据性能测试,Kmesh 的转发时延相比 Istio Sidecar 模式降低 50%+,基本接近 K8s 原生转发时延;在相同 QPS 下,Kmesh 的 CPU 开销也明显低于 Istio Sidecar 模式,基本与 K8s 原生 CPU 开销一致。这得益于其内核级 sidecarless 数据面,服务通信路径从三跳变为一跳。

Kmesh 的主要组件有哪些?各自负责什么?

Kmesh 的主要部件包括:kmesh-controller(负责生命周期管理、XDS 协议对接、观测运维)、kmesh-api(接口层,包括 XDS 转换后的编排 API 和观测运维通道)、kmesh-runtime(内核中实现 L4~L7 流量编排的运行时,7 层能力依赖内核增强)、kmesh-orchestration(基于 eBPF 实现 L4~L7 流量编排,如路由、灰度、负载均衡)、kmesh-probe(观测运维探针,提供端到端观测能力)。

Kmesh 如何实现内核级流量编排?

Kmesh 采用伪建链和延迟建链技术:在 pre_connect 阶段挂载 bpf 程序,若目标地址在 xds listener 范围内,则通过 bpf_setsockopt 将 socket 的 tcp proto hook 重载到 kmesh_defer 内核模块;在 connect/send hook 中,首次 connect 时设置 bpf_defer_connect 标记不真正握手,在 send 时触发 connect,并调用 bpf 程序完成流量治理,然后基于调整后的五元组和报文建链发送。整个治理过程无需经过代理层。

Kmesh 支持哪些流量治理功能?

Kmesh v0.1.0 支持 TCP 流量转发,支持 HTTP1.1 头域匹配、路由、灰度等治理功能,并支持随机和轮询负载均衡算法。此外,它支持基于 namespace 使能流量接管,可与 Istio Sidecar 协同工作,并自动对接遵循 XDS 协议的控制面。

Kmesh 对运行环境有什么要求?

Kmesh 支持兼容运行模式,可根据 OS 内核能力自适应使能特性,在无增强补丁的内核版本上也能以兼容模式运行。但要使用完整的治理能力,当前 openEuler 23.03 版本已原生支持,其他操作系统需要基于增强的 patch 构建内核。

🏷️

标签

➡️

继续阅读