Cilium系列-8-绕过 IPTables 连接跟踪

cilium,系列,绕过,iptables,连接,跟踪 · 浏览次数 : 82

小编点评

## Cilium 网络性能调优指南 文章介绍了如何通过各种调优项提升 Cilium 网络性能,最终实现 100% 的本地路由效率。 **主要调优项:** * **启用本地路由 (Native Routing):** 将 KubeProxyIP 替换为本地路由,避免 IP 地址伪装。 * **完全替换 KubeProxy (Masquerading):** 使用 eBPF 实现 iptables 规则,完全取代 KubeProxy 中的规则。 * **启用 Kubernetes NodePort 实现在 DSR 模式下运行绕过 iptables 连接跟踪 (Bypass iptables Connection Tracking):** 绕过 iptables 连接跟踪,降低成本。 * **禁用 Hubble (可选):** 可以禁用 Hubble,但建议在性能测试中观察其影响。 * **调整 MTU 为巨型帧 (jumbo frames):** 设置 MTU 为巨型帧,可以提高网络效率。 * **启用带宽管理器 (Bandwidth Manager):** 管理网络带宽,可以降低网络延迟。 * **启用 Pod 的 BBR 拥塞控制 (Bandwidth Reservation):** 为容器提供拥塞控制,防止资源抢占。 * **启用 XDP 加速 (eXtensible Distribution Policy):** 使用 XDP 加速网络连接,提高性能。 * **调整 eBPF Map Size:** 使用 eBPF Map Size 设置自定义大小,提升性能。 **优化结果:** * 100% 的本地路由效率。 * 性能提升 30% 或以上。 * 降低了 iptables 连接跟踪成本。 **注意事项:** * 某些优化项可能需要特定的内核版本,请确保内核版本满足要求。 * 建议在实际环境中测试优化效果,以确定最佳配置。 **参考资料:** * Bypass iptables Connection Tracking - Tuning Guide — Cilium 1.13.4 documentation

正文

系列文章

前言

将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:

  • 启用本地路由(Native Routing)
  • 完全替换 KubeProxy
  • IP 地址伪装(Masquerading)切换为基于 eBPF 的模式
  • Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行
  • 绕过 iptables 连接跟踪(Bypass iptables Connection Tracking)
  • 主机路由(Host Routing)切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)
  • 启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19)
  • 禁用 Hubble(但是不建议, 可观察性比一点点的性能提升更重要)
  • 修改 MTU 为巨型帧(jumbo frames) (需要网络条件允许)
  • 启用带宽管理器(Bandwidth Manager) (需要 Kernel >= 5.1)
  • 启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)
  • 启用 XDP 加速 (需要 支持本地 XDP 驱动程序)
  • (高级用户可选)调整 eBPF Map Size
  • Linux Kernel 优化和升级
    • CONFIG_PREEMPT_NONE=y
  • 其他:
    • tuned network-* profiles, 如: tuned-adm profile network-latencynetwork-throughput
    • CPU 调为性能模式
    • 停止 irqbalance,将网卡中断引脚指向特定 CPU

在网络/网卡设备/OS等条件满足的情况下, 我们尽可能多地启用这些调优选项, 相关优化项会在后续文章逐一更新. 敬请期待.

今天我们来调优 Cilium, 设置绕过 IPTables 连接跟踪以提升网络性能.

测试环境

  • Cilium 1.13.4
  • K3s v1.26.6+k3s1
  • OS
    • 3 台 Ubuntu 23.04 VM, Kernel 6.2, x86

绕过 IPTables 连接跟踪

在无法使用 eBPF 主机路由(Host-Routing)的情况下,网络数据包仍需在主机命名空间中穿越常规网络堆栈,iptables 会增加大量成本。通过禁用所有 Pod 流量的连接跟踪(connection tracking)要求,从而绕过 iptables 连接跟踪器(iptables connection tracker),可将这种遍历成本降至最低。

需求

  • 内核 >= 4.19.57, >= 5.1.16, >= 5.2
  • 直接路由(Direct-routing)配置
  • 基于 eBPF 的 kube-proxy 替换
  • 基于 eBPF 的伪装(masquerading)或无伪装

实施步骤

helm upgrade cilium cilium/cilium --version 1.13.4 \
  --namespace kube-system \
  --reuse-values \
  --set installNoConntrackIptablesRules=true

总结

本文我们调优 Cilium, 设置绕过 IPTables 连接跟踪以提升网络性能.

至此,性能调优已完成:

  • ✔️ 启用本地路由 (Native Routing)
  • ✔️ 完全替换 KubeProxy
  • ✔️ IP 地址伪装 (Masquerading) 切换为基于 eBPF 的模式
  • ✔️ Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行
  • ✔️ 绕过 iptables 连接跟踪 (Bypass iptables Connection Tracking)
  • 主机路由 (Host Routing) 切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)
  • 启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19)
  • 修改 MTU 为巨型帧 (jumbo frames) (需要网络条件允许)
  • 启用带宽管理器 (Bandwidth Manager) (需要 Kernel >= 5.1)
  • 启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)
  • 启用 XDP 加速 (需要 支持本地 XDP 驱动程序)

📚️参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

与Cilium系列-8-绕过 IPTables 连接跟踪相似的内容:

Cilium系列-8-绕过 IPTables 连接跟踪

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提

Cilium系列-1-Cilium特色 功能及适用场景

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## Cilium 简介 Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 **eBPF** 提供动力。

Cilium 系列-2-Cilium 快速安装

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 在本章中,我们将直接将 Cilium 安装到 Kubernetes 集群中。 在实验中,我们用到的组件及版本为: * Cilium 1.13.4 * K3s v1.26.6

Cilium 系列-3-Cilium 的基本组件和重要概念

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 安装完了,我们看看 Cilium 有哪些组件和重要概念。 ## Cilium 组件 如上所述,安装 Cilium 时,会安装几个运行组件(有些是可选组件), 它们各是什么用

Cilium系列-4-Cilium本地路由

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 在[前文](https://ewhisper.cn/posts/7030/)中我们提到, `cilium install` 默认安装后, Cilium 功能启用和禁用情况如

Cilium系列-5-Cilium替换KubeProxy

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提

Cilium系列-6-从地址伪装从IPtables切换为eBPF

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提

Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用,可以进一步提升

Cilium系列-9-主机路由切换为基于 BPF 的模式

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提

Cilium系列-10-启用 IPv6 BIG TCP和启用巨帧

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提