Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性
摘要:在本次发布的 v1.0 版本中,Kmesh 对东西向流量治理功能进行了重大改进,提升了整体网络流量管理的效率和安全性。
本文分享自华为云社区《Kmesh v1.0正式发布!稳定易用的高性能Sidecarless服务网格》,作者:云容器大未来。
2025 新年伊始,我们非常高兴地宣布Kmesh v1.0 版本[1]正式发布。在此,我们对 Kmesh 社区[2] 所有贡献者在过去三个月中的不懈努力和辛勤工作表示衷心的感谢。正是因为大家的共同努力,Kmesh 才能顺利推出这一重要版本。
在本次发布的 v1.0 版本中,Kmesh 对东西向流量治理功能进行了重大改进,提升了整体网络流量管理的效率和安全性。这些改进不仅优化了数据传输的稳定性,还为用户提供了更加丰富的流量治理能力。此外,我们还持续优化了 Kmesh 的易用性,使其更加友好和直观,方便用户快速上手和使用。
Kmesh v1.0 版本主要特性
加密通信
为保障节点间通信的安全,Kmesh 在 v1.0 版本引入了 IPsec 对节点间的流量进行加密,使流量传输过程中明文变密文,确保了节点间通讯的信息安全。整体架构图如下图所示:
IPSec 作为一种成熟、稳定且高度安全的加密协议,被广泛应用于各种网络环境。它不仅为节点间的通信提供加密,还支持对不同协议的数据进行加密。Kmesh 仅使用 IPSec 的加密功能,如上图所示,用户在 Kubernetes 中设置 IPsec 的预共享密钥之后,Kmesh 对这个密钥进行管理保证 IPsec 的正常通信。
此外为精细化控制 IPsec 的加密行为,Kmesh 通过 KmeshNodeInfo CRD 存储节点信息,借助 Kubernetes api-server 进行节点间的信息同步。确保集群节点间通讯的安全性。
借助 IPSec,Kmesh 不仅实现了节点间通信的加密功能,还确保了数据在传输过程中的机密性和完整性,从而有效防止数据被窃听、篡改或伪造。通过结合 Kubernetes 的灵活性和 CRD(自定义资源定义)的扩展能力,Kmesh 能够在复杂的集群环境中高效地管理加密密钥,并动态同步节点信息,进一步提升了整个系统的安全性和可靠性。
将 Authorization 策略执行下沉到 XDP 程序中
在 Kmesh v0.5.0 版本 中,Kmesh 已经将 authorization 的部分功能下沉到 XDP 程序中执行。在 v1.0.0 版本我们将更多的 authorization 能力下沉到 XDP 中,现已经支持基于 IP 的 authorization 处理。整体的处理流程图如下图所示:
Kmesh 将 authorization 的处理分成 policy、rule、clause 和 match 四步处理,将它们通过 tail-call 机制进行串联。整个 authorization 的处理会在 TCP 建链的的时候进行,如果通过鉴权,流量将通过协议栈发送到对应的 IP 地址;如果没通过鉴权,则会丢弃 SYN 包,阻止 TCP 链接建立。
通过将 authorization 下沉到 XDP 程序中,Kmesh 能够在网络数据包进入内核协议栈的最早阶段进行鉴权处理。这种方式不仅显著减少了用户态与内核态之间的上下文切换开销,还能够极大提升数据包处理的效率,从而实现高速、低延迟的鉴权。同时,这种设计确保了未通过鉴权的数据包在协议栈中被直接丢弃,有效降低了系统资源的消耗,进一步增强了系统的安全性和性能。Kmesh 在之后的版本计划中,会将更多的 authorization 功能下沉到 XDP Prog 当中,欢迎大家对相关的 authorization 提出自己的需求,以便社区制定迭代计划。
基于地域的负载均衡
在 v1.0.0 版本,Kmesh 具备了基于地域的负载均衡能力。基于地域的负载均衡是分布式系统中性能和可靠性的关键优化。通过将流量路由到地域优先级最高的服务实例,减少延迟,增加可用性。Kmesh 的基于地域的负载均衡的匹配示例如下所示:
图中的 1、2、3、4 表示 client 访问 service 的优先级。当访问服务时,会先根据 sub-zone,zone,region 的匹配程度先计算优先级,再确定访问哪个服务。通过在用户态存储的基于地域的优先级信息更新 service map 中的信息。bpf 程序根据 service map 中的优先级信息选择对应的 endpoint 建立链接。此外 Kmesh 在负载均衡策略更新期间会对 endpoint map 中的 endpoint_key 逐一进行更新,以确保更新期间服务的连续性。Kmesh 现提供 region、zone、subZone、nodeName 和 clusterID 五种不同粒度的地域负载均衡。使用户能够灵活的配置适合自己的负载均衡策略。
在有基于地域的负载均衡能力之后,Kmesh 能够更智能地将流量引导至地理位置最优的节点,从而减少延迟并提高服务性能。这样一来,用户请求可以更快速地得到响应,尤其对于跨地域的大型分布式应用来说,能够显著提升整体用户体验和网络性能。
可观测性优化
为提升 Kmesh 的易用性,在 v1.0 版本中对 Kmesh 的可观测性也进行了贴近用户需求的优化。
在 Metrics 中,Kmesh 优化了 metrics labels,将 destination_service 从原本的 socket 中的 destination 替换成本次请求最终的 destination 。原先经过 waypoint 的 source 访问 destination 的请求会分成 source->waypoint 和 waypoint->destination 两条 metrics 。使 destination 的信息都呈现为 waypoint 的信息。
当有多个服务共用一个 waypoint 的时候,这样的 metrics 会使用户感到困惑。但在 v1.0.0 版本中,Kmesh metrics 的 destination_service 将始终记录最终 destination 信息。呈现的 metrics 为:
这样修改,一条 metrics 就能够包含本次链接的 destination 信息和最终 destination 信息。使呈现的 metrics 更加合理易懂,提升了 Kmesh 可观测数据的整体清晰度和可用性。此外 Kmesh 还与 kiali 一起,为用户呈现清晰直观的服务拓扑图:
借助服务拓扑图,用户能够全面了解集群中各个服务之间的依赖关系和通信状态,从而更容易地监控和诊断网络状况。用户还可以识别潜在的性能瓶颈和故障点,进行优化和故障排除,提高整个系统的可靠性和性能。
全模式无中断重启
在 v1.0.0 版本, Kmesh 的 Kernel-Native 模式也提供了流量重启无中断的能力。可以在重启后优雅的加载 eBPF map 和 Prog,且不需要再重启后重新注册服务。实现了 Kmesh 全模式下重启不中断流量,不影响服务的目标。
与 Dual-Engine 模式一样,通过将 eBPF Prog 和 map pin 到内核目录中,使其与 kmesh-daemon 解耦,确保 eBPF map 和 Prog 在 Kmesh 关闭的时候也能够对流量进行治理。确保在 Kmesh 重启的这段时间中服务不中断。
如果在 Kmesh 重启的这段时间中有配置的更新,Kmesh 在重启之后,也会从 istiod 中获取最新的配置,确保在重启后的第一时间进行信息的同步。
相较于传统 Service Mesh 在重启过程中中断服务流量的情况,Kmesh 的设计避免了在重启期间对业务流量产生影响,确保了服务的连续性和稳定性,提供了更可靠高可用的系统,减少了服务中断的风险,提升了用户体验。此外在后续计划中,Kmesh 会支持无中断升级,确保在 Kmesh 升级的时候也能不干扰业务流量,解决困扰用户想使用网格新的功能又不敢升级网格的问题。
熔断与限流
注意:此特性仅适用于[Kernel-Native Mode]
Kmesh 在 v1.0.0 版本为 Kernel-Native 模式引入熔断和限流功能。在 Kernel-Native 模式保证低延迟高并发高负载的情况下,确保系统的稳定性和可靠性。Kmesh 的 Kernel-Native 模式追求极致的性能,但此前的功能较少,后续我们会在确保 Kernel-Native 模式性能的情况下,提供更为丰富的功能。
支持 Headless Service 和 ServiceEntry 和适配 istio 1.24
Kmesh v1.0.0 中已经适配了 Istio 1.24 版本,并且通过 e2e 测试保证了 Kmesh 在 Istio 1.24 版本中的稳定性。目前在 Kmesh 社区中通过 e2e 测试,确保 Kmesh 在 Istio 1.22, 1.23, 1.24 版本的稳定性。此外我们还与 Istio 1.24 版本的 Ambient Mesh 进行了性能方面的对比(当Kmesh遇上Ambient Mesh[3])总体来说。Kmesh 在时延和吞吐量两个维度上来说,相较于 Ambient Mesh 更胜一筹。
除了适配最新的 Istio 之外,Kmesh 还支持了 Headless Service 和 ServiceEntry 的部分能力。
致 谢
我们衷心感谢 Kmesh[4] 社区的所有贡献者,Kmesh v1.0.0 的成功发布是整个团队集体努力的证明。这不仅包括通过 OSPP 参与社区开发的学生,还包括来自华为、阿里、Tetrate 等公司的其他所有热心的开源开发者们。正是大家的共同努力,促使 Kmesh 社区蓬勃发展、欣欣向荣。
我们也热烈欢迎新的开发者和用户加入 Kmesh 社区。只有在大家的持续参与和支持下,我们才能不断创新和进步,共同推动 Kmesh 走向更加辉煌的未来。通过协作与分享,我们期待在 Kmesh 社区中实现更多技术突破和应用场景,为大家提供更加优秀的 Sidecarless 服务网格解决方案。
参考资料
[1]Kmesh v1.0 版本: https://github.com/kmesh-net/kmesh/releases/tag/v1.0.0
[2]Kmesh GitHub: https://github.com/kmesh-net/kmesh
[3]当 Kmesh 遇上 Ambient Mesh: https://bbs.huaweicloud.com/blogs/442565
[4]Kmesh Website: https://kmesh.net/en/
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/8089b823855873c9afb52531e】。文章转载请联系作者。
评论