在 Istio 环境模式中使用 eBPF 进行流量重定向

一种将应用程序 Pod 流量重定向到每个节点 ztunnel 的替代方法。

2023 年 3 月 29 日 | 作者:Iris Ding - 英特尔,Chun Li - 英特尔

在 Istio 的全新 环境模式 中,运行在每个 Kubernetes 工作节点上的 istio-cni 组件负责将应用程序流量重定向到该节点上的零信任隧道 (ztunnel)。默认情况下,它依赖于 iptables 和 通用网络虚拟化封装 (Geneve) 覆盖隧道来实现这种重定向。我们现在已经添加了对基于 eBPF 的流量重定向方法的支持。

为什么选择 eBPF

虽然性能考虑在 Istio 环境模式重定向的实现中至关重要,但考虑易于编程也很重要,以便能够实现灵活和定制的要求。借助 eBPF,您可以利用内核中的附加上下文绕过复杂的路由,并简单地将数据包发送到最终目的地。

此外,与 iptables 相比,eBPF 能够更深入地洞察内核中的数据包,并提供额外的上下文,从而实现更高效、更灵活的数据流管理。

工作原理

一个 eBPF 程序已编译到 Istio CNI 组件中,该程序附加到 流量控制 入口和出口钩子。istio-cni 将监视 Pod 事件,并在 Pod 被移入或移出环境模式时将 eBPF 程序附加到或从其他相关网络接口分离。

使用 eBPF 程序(而不是 iptables)消除了封装任务(用于 Geneve)的必要性,从而允许在内核空间中定制路由任务。这在路由方面既能提高性能,又能增强灵活性。

ambient eBPF architecture
环境 eBPF 架构

进出应用程序 Pod 的所有流量都将被 eBPF 拦截并重定向到相应的 ztunnel Pod。在 ztunnel 端,将根据 eBPF 程序中的连接查找结果执行适当的重定向。这提供了对应用程序和 ztunnel 之间网络流量更有效的控制。

如何在 Istio 环境模式中启用 eBPF 重定向

按照 环境网格入门 中的说明设置您的集群,但有一个小变化:在您安装 Istio 时,将 values.cni.ambient.redirectMode 配置参数设置为 ebpf

$ istioctl install --set profile=ambient --set values.cni.ambient.redirectMode="ebpf"

检查 istio-cni 日志以确认 eBPF 重定向已开启

ambient Writing ambient config: {"ztunnelReady":true,"redirectMode":"eBPF"}

性能提升

eBPF 重定向的延迟和吞吐量 (QPS) 略好于使用 iptables。以下测试在 kind 集群中运行,Fortio 客户端向 Fortio 服务器发送请求,两者都运行在环境模式(eBPF 调试日志已禁用)下,并且在同一个 Kubernetes 工作节点上。

$ fortio load -uniform -t 60s -qps 0 -c <num_connections> http://<fortio-svc-name>:8080
Max QPS with varying number of connections
最大 QPS(连接数不同)
$ fortio load -uniform -t 60s -qps 8000 -c <num_connections> http://<fortio-svc-name>:8080
Latency (ms) for QPS 8000 with varying number of connections
P75 延迟(毫秒)对于 QPS 8000(连接数不同)

总结

eBPF 和 iptables 在流量重定向方面各有优劣。eBPF 是一种现代、灵活且强大的替代方案,它允许在规则创建方面进行更多定制,并提供更好的性能。但是,它确实需要一个现代内核版本(用于重定向情况的 4.20 或更高版本),而某些系统可能无法提供。另一方面,iptables 广泛使用并且与大多数 Linux 发行版兼容,即使是那些使用旧内核的系统也是如此。但是,它缺乏 eBPF 的灵活性和可扩展性,并且性能可能较低。

最终,在流量重定向中选择 eBPF 还是 iptables 将取决于系统的具体需求和要求,以及用户在使用每种工具方面的专业知识水平。一些用户可能更喜欢 iptables 的简单性和兼容性,而另一些用户可能需要 eBPF 的灵活性和性能。

还有很多工作要做,包括与各种 CNI 插件集成,以及对提高易用性的贡献将受到热烈欢迎。请加入我们,在 Istio Slack 上的 #ambient 频道中。

分享此文章