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

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

前言

将 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
BASH

总结

本文我们调优 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 驱动程序)

📚️参考文档


相关文章
|
15天前
|
监控 网络协议 安全
Linux网络状态查看与防火墙管理
Linux网络状态查看与防火墙管理
37 0
|
3月前
|
Kubernetes 网络协议 Linux
Cilium 系列 -6- 从地址伪装从 IPtables 切换为 eBPF
Cilium 系列 -6- 从地址伪装从 IPtables 切换为 eBPF
|
5月前
|
安全 网络协议 网络安全
网络扫描与网络监听
网络扫描与网络监听
91 0
|
网络协议
Metasploit -- 主机探测模块
Metasploit -- 主机探测模块
72 0
Metasploit -- 主机探测模块
|
网络协议 安全 Linux
nmap扫描端口命令详解linux网络探测之网络安全
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。 Nmap 常被跟评估系统漏洞软件 [Nessus](https://ba
nmap扫描端口命令详解linux网络探测之网络安全
|
机器学习/深度学习 网络协议 Linux
Linux网络管理之tcpdump命令 – 监听网络流量
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。
640 0
Linux网络管理之tcpdump命令 – 监听网络流量
|
弹性计算 Kubernetes 网络协议
k8s网络诊断之被丢弃的SYN--linux数据包的接收过程(k8s+flannel+ ipvs)
某客户反馈,ECS上自建nginx server 通过proxy_pass 反向代理 云上k8s集群 nodeport类型的svc,存在大量1s的延迟请求的问题,在nginx所在的ecs上,使用netstat可以看到syn_sent状态的connection,如下图所示,但是在pod所在的worker节点上是看不到syn_RECV状态的connection(nodeport上也无)
1011 0
|
Linux 网络安全
iptables防火墙工作原理及简单配置访问策略
iptables只是管理包过滤规则的工具,可以添加或删除包过滤的规则,真正执行包过滤规则的是netfilter netfilter是Linux核心中的一个通用架构,内部提供一些列的表,每个表由若干条链组成,每条链由一条或多条规则组成,也就是我们常说的四表五链 四表
134 0
|
算法 网络协议 Linux
Netfilter 连接跟踪与状态检测的实现
内核版本:2.6.12 本文只是一部份,详细分析了连接跟踪的基本实现,对于ALG部份,还没有写,在整理笔记,欢迎大家提意见,批评指正。 1.什么是连接跟踪 连接跟踪(CONNTRACK),顾名思义,就是跟踪并且记录连接状态。Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项(Connection entry)。此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态。连接跟踪是防火墙模块的状态检测的基础,同时也是地址转换中实现SNAT和DNAT的前提。 那么Netfilter又是如何生成连接记录项的呢?每一个数据,都有“来源”与“目的”主机,发起连接的主机称为“来
281 0