前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Istio ambient 模式中使用 eBPF 进行流量重定向

Istio ambient 模式中使用 eBPF 进行流量重定向

作者头像
灵雀云
发布2023-09-07 18:58:09
3070
发布2023-09-07 18:58:09
举报

作者:丁少君 - Intel,李纯 - Intel

在 Istio ambient[1] 模式中,运行在每个 Kubernetes 工作节点上的 istio-cni 组件负责将应用程序流量重定向到该节点上的零信任隧道代理(ztunnel)。默认情况下,这依赖于 iptables 和 Generic Network Virtualization Encapsulation (Geneve)[2] 隧道来实现这种重定向。现在我们增加了基于 eBPF 的流量重定向方法的支持。

为何采用 eBPF

虽然在实现 Istio ambient 模式重定向时需要考虑性能问题,但可编程性的考量也非常重要,以满足转发规则多样化和可定制化的要求。使用 eBPF,你可以利用内核中的额外上下文来绕过繁杂的路由,并快速简单地将数据包发送到最终目的地。

此外,与 iptables 相比,eBPF 对内核中数据包具有更深入的可见性以及额外的上下文操作,使更有效和灵活的管理数据流成为可能。

eBPF 流量重定向如何工作

一个 eBPF 程序被预编译到 Istio CNI 组件中,这个 eBPF 程序会被加载到 traffic control[3] ingress 和 egress 的 hook 点上。istio-cni 会监听 Pod 事件,并在 Pod 加入或离开 Istio ambient 模式时将 eBPF 程序加载/卸载到 Pod 相关的网络接口上。

使用 eBPF 程序替代 iptables 模式消除了对于 Geneve 的封包/解包的需求,并使流量的转发可以在内核空间中自定义。这既提高了性能,又提供了额外的灵活性。

ambient eBPF architecture

所有进出应用程序 Pod 的流量都将被 eBPF 截获并重定向到相应的 ztunnel Pod。在 ztunnel 一侧,eBPF 程序将根据 connection 状态的查找结果执行对应的重定向操作。这提供了更有效的控制应用程序 Pod 和 ztunnel Pod 之间网络流量的方法。

在 ambient 模式下如何使用 eBPF

请按照Istio Ambient Mesh 入门[4]设置您的集群,但需以下一个小修改:在安装 Istio 时,请将 values.cni.ambient.redirectMode 配置参数设置为 ebpf

代码语言:javascript
复制
$ istioctl install --set profile=ambient --set values.cni.ambient.redirectMode="ebpf"

检查 istio-cni 的日志以确认 eBPF 重定向是否已启用:

代码语言:javascript
复制
ambient Writing ambient config: {"ztunnelReady":true,"redirectMode":"eBPF"}

性能提升

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

代码语言:javascript
复制
$ fortio load -uniform -t 60s -qps 0 -c <num_connections> http://<fortio-svc-name>:8080

Max QPS, with varying number of connections

代码语言:javascript
复制
$ fortio load -uniform -t 60s -qps 8000 -c <num_connections> http://<fortio-svc-name>:8080

P75 Latency (ms) for QPS 8000 with varying number of connections

总结

在流量重定向方面,eBPF 和 iptables 都有其优缺点。eBPF 是一种现代、灵活和强大的替代方案,允许在规则创建方面进行更多的自定义,并提供更好的性能。但是,它需要一个较新的内核版本(4.20 或更高版本),这使得 eBPF 在一些系统上可能并不可用。另一方面,iptables 被广泛使用,并且与大多数 Linux 发行版兼容,即使是那些使用较旧内核的发行版也可以兼容。但是,它缺乏 eBPF 的灵活性和可扩展性,并且可能具有较低的性能。

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

目前,仍有许多工作需要完成,包括与各种 CNI 插件的集成,非常欢迎大家一同贡献以改善其易用性。请加入我们在 Istio slack[5] 上的 #ambient 频道与我们一起交流。

参考资料

[1]

ambient: https://istio.io/latest/zh/blog/2022/introducing-ambient-mesh/

[2]

Generic Network Virtualization Encapsulation (Geneve): https://www.rfc-editor.org/rfc/rfc8926.html

[3]

traffic control: https://man7.org/linux/man-pages/man8/tc-bpf.8.html

[4]

Istio Ambient Mesh 入门: https://istio.io/latest/zh/blog/2022/get-started-ambient/

[5]

Istio slack: https://slack.istio.io/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为何采用 eBPF
  • eBPF 流量重定向如何工作
  • 在 ambient 模式下如何使用 eBPF
  • 性能提升
  • 总结
    • 参考资料
    相关产品与服务
    服务网格
    服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档