摘要:在本次发布的 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 的信息。before release v1.0 # destination_service_name is `reviews` instead of `reviews-svc-waypoint kmesh_tcp_connections_closed_total{destination_app="reviews-svc-waypoint",destination_service="reviews-svc-waypoint"...} 14
当有多个服务共用一个waypoint的时候,这样的metrics会使用户感到困惑。但在v1.0.0版本中,Kmesh metrics的destination_service将始终记录最终destination信息。呈现的metrics为:
release v1.0 # destination_service_name is `reviews` instead of `reviews-svc-waypoint` kmesh_tcp_connections_closed_total{destination_app="reviews-svc-waypoint",destination_service_name="reviews"...} 14
这样修改,一条 metrics 就能够包含本次链接的 destination 信息和最终 destination 信息。使呈现的 metrics 更加合理易懂,提升了 Kmesh 可观测数据的整体清晰度和可用性。此外 Kmesh 还与 kiali 一起,为用户呈现清晰直观的服务拓扑图: 借助服务拓扑图,用户能够全面了解集群中各个服务之间的依赖关系和通信状态,从而更容易地监控和诊断网络状况。用户还可以识别潜在的性能瓶颈和故障点,进行优化和故障排除,提高整个系统的可靠性和性能。