diff --git a/content/zh/blog/2023/ambient-ebpf-redirection/index.md b/content/zh/blog/2023/ambient-ebpf-redirection/index.md index 7783490054..ba582f2eee 100644 --- a/content/zh/blog/2023/ambient-ebpf-redirection/index.md +++ b/content/zh/blog/2023/ambient-ebpf-redirection/index.md @@ -7,30 +7,43 @@ attribution: "丁少君 (Intel), 李纯 (Intel)" keywords: [istio,ambient,ztunnel,eBPF] --- -在 Istio [ambient](/zh/blog/2022/introducing-ambient-mesh/) 模式中,运行在每个 Kubernetes 工作节点上的 `istio-cni` 组件负责将应用程序流量重定向到该节点上的零信任隧道代理(ztunnel)。默认情况下,这依赖于 iptables 和 [Generic Network Virtualization Encapsulation (Geneve)](https://www.rfc-editor.org/rfc/rfc8926.html) 隧道来实现这种重定向。现在我们增加了基于 eBPF 的流量重定向方法的支持。 +在 Istio [Ambient](/zh/blog/2022/introducing-ambient-mesh/) 模式中,运行在每个 Kubernetes +工作节点上的 `istio-cni` 组件负责将应用程序流量重定向到该节点上的零信任隧道代理(ztunnel)。 +默认情况下,这依赖于 iptables 和 [Generic Network Virtualization Encapsulation (Geneve)](https://www.rfc-editor.org/rfc/rfc8926.html) +隧道来实现这种重定向。现在我们增加了基于 eBPF 的流量重定向方法的支持。 ## 为何采用 eBPF -虽然在实现 Istio ambient 模式重定向时需要考虑性能问题,但可编程性的考量也非常重要,以满足转发规则多样化和可定制化的要求。使用 eBPF,你可以利用内核中的额外上下文来绕过繁杂的路由,并快速简单地将数据包发送到最终目的地。 +虽然在实现 Istio Ambient 模式重定向时需要考虑性能问题,但对于可编程性的考量也非常重要, +以满足转发规则多样化和可定制化的要求。使用 eBPF, +你可以利用内核中的额外上下文来绕过繁杂的路由,并快速简单地将数据包发送到最终目的地。 -此外,与 iptables 相比,eBPF 对内核中数据包具有更深入的可见性以及额外的上下文操作,使更有效和灵活的管理数据流成为可能。 +此外,与 iptables 相比,eBPF 对内核中数据包具有更深入的可见性以及额外的上下文操作, +使更有效和灵活的管理数据流成为可能。 ## eBPF 流量重定向如何工作 -一个 eBPF 程序被预编译到 Istio CNI 组件中,这个 eBPF 程序会被加载到 [traffic control](https://man7.org/linux/man-pages/man8/tc-bpf.8.html) ingress 和 egress 的 hook 点上。`istio-cni` 会监听 Pod 事件,并在 Pod 加入或离开 Istio ambient 模式时将 eBPF 程序加载/卸载到 Pod 相关的网络接口上。 +一个 eBPF 程序被预编译到 Istio CNI 组件中,这个 eBPF 程序会被加载到 +[traffic control](https://man7.org/linux/man-pages/man8/tc-bpf.8.html) ingress +和 egress 的 hook 点上。`istio-cni` 会监听 Pod 事件,并在 Pod 加入或离开 Istio Ambient +模式时将 eBPF 程序加载/卸载到 Pod 相关的网络接口上。 -使用 eBPF 程序替代 iptables 模式消除了对于 Geneve 的封包/解包的需求,并使流量的转发可以在内核空间中自定义。这既提高了性能,又提供了额外的灵活性。 +使用 eBPF 程序替代 iptables 模式消除了对于 Geneve 的封包/解包的需求, +并使流量的转发可以在内核空间中自定义。这既提高了性能,又提供了额外的灵活性。 {{< image width="55%" link="ambient-ebpf.png" - caption="ambient eBPF architecture" + caption="Ambient eBPF 架构" >}} -所有进出应用程序 Pod 的流量都将被 eBPF 截获并重定向到相应的 ztunnel Pod。在 ztunnel 一侧,eBPF 程序将根据 connection 状态的查找结果执行对应的重定向操作。这提供了更有效的控制应用程序 Pod 和 ztunnel Pod 之间网络流量的方法。 +所有进出应用程序 Pod 的流量都将被 eBPF 截获并重定向到相应的 ztunnel Pod。 +在 ztunnel 一侧,eBPF 程序将根据 connection 状态的查找结果执行对应的重定向操作。 +这提供了更有效的控制应用程序 Pod 和 ztunnel Pod 之间网络流量的方法。 -## 在 ambient 模式下如何使用 eBPF +## 在 Ambient 模式下如何使用 eBPF -请按照[Istio Ambient Mesh 入门](/zh/blog/2022/get-started-ambient/)设置您的集群,但需以下一个小修改:在安装 Istio 时,请将 `values.cni.ambient.redirectMode` 配置参数设置为 `ebpf`。 +请按照 [Istio Ambient Mesh 入门](/zh/blog/2022/get-started-ambient/)设置您的集群, +但需以下一个小修改:在安装 Istio 时,请将 `values.cni.ambient.redirectMode` 配置参数设置为 `ebpf`。 {{< text bash >}} $ istioctl install --set profile=ambient --set values.cni.ambient.redirectMode="ebpf" @@ -44,7 +57,9 @@ ambient Writing ambient config: {"ztunnelReady":true,"redirectMode":"eBPF"} ## 性能提升 -使用 eBPF 重定向的延迟和吞吐量(QPS)比使用 iptables 稍好。以下测试是在一个 `kind` 集群中运行,其中 Fortio 客户端向在 ambient 模式下运行的 Fortio 服务器发送请求(eBPF 调试日志已禁用),并且两者都在同一 Kubernetes 工作节点上运行。 +使用 eBPF 重定向的延迟和吞吐量(QPS)比使用 iptables 稍好。以下测试是在一个 `kind` +集群中运行,其中 Fortio 客户端向在 Ambient 模式下运行的 Fortio 服务器发送请求 +(eBPF 调试日志已禁用),并且两者都在同一 Kubernetes 工作节点上运行。 {{< text bash >}} $ fortio load -uniform -t 60s -qps 0 -c http://:8080 @@ -60,8 +75,14 @@ $ fortio load -uniform -t 60s -qps 8000 -c http://