湖州网站建设服务,推广软文怎么写,wordpress刷留言,常州网站建设系统系列文章 
Cilium 系列文章 
前言 
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用#xff0c;可以进一步提升 Cilium 的网络性能。具体调优项包括不限于#xff1a; 
启用本地路由 (Native Rou…系列文章 
Cilium 系列文章 
前言 
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用可以进一步提升 Cilium 的网络性能。具体调优项包括不限于 
启用本地路由 (Native Routing)完全替换 KubeProxyIP 地址伪装 (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 SizeLinux Kernel 优化和升级 CONFIG_PREEMPT_NONEy 其他 tuned network-* profiles, 如tuned-adm profile network-latency 或 network-throughputCPU 调为性能模式停止 irqbalance将网卡中断引脚指向特定 CPU  
在网络/网卡设备/OS 等条件满足的情况下我们尽可能多地启用这些调优选项相关优化项会在后续文章逐一更新。敬请期待。 
今天我们来将 Cilium 的 NodePort 实现从 SNAT 改为 DSR 以提升网络性能。 
测试环境 
Cilium 1.13.4K3s v1.26.6k3s1OS 3 台 Ubuntu 23.04 VM, Kernel 6.2, x86  
Direct Server Return (DSR) 
默认情况下Cilium 的 eBPF NodePort 实现以 SNAT 模式运行。也就是说当节点外部流量到达时如果节点确定负载平衡器、NodePort 或具有外部 IP 的服务的后端位于远程节点那么节点就会通过执行 SNAT 将请求重定向到代表自己的远程后端。这不需要额外更改 MTU。代价是来自后端的回复需要额外跳回节点在那里执行反向 SNAT 转换然后再将数据包直接返回给外部客户端。 
示例如下Cilium 的 eBPF NodePort 实现以 SNAT 模式运行 
$ kubectl -n kube-system exec ds/cilium -- cilium status --verbose
...
KubeProxyReplacement Details:Status:                 StrictSocket LB:              EnabledSocket LB Tracing:      EnabledSocket LB Coverage:     FullDevices:                eth0 192.168.2.3 (Direct Routing)Mode:                   SNAT 
SNAT 模式下NodePort 后端 pod 在其他节点入向流量 出向流量 该设置可通过 loadBalancer.mode Helm 选项更改为 dsr以便让 Cilium 的 eBPF NodePort 实现在 DSR 模式下运行。在这种模式下后端直接回复外部客户端而不需要额外的跳转也就是说后端通过使用服务 IP/port 作为源来回复。DSR 目前要求 Cilium 以本地路由模式部署也就是说它不能在任何一种隧道模式下工作。 
DSR 模式流量如下 DSR 模式的另一个优点是保留了客户端的源 IP因此可以在后端节点对其进行策略匹配。而在 SNAT 模式下则无法做到这一点。鉴于一个特定的后端可被多个服务使用后端需要知道它们需要回复的服务 IP/端口。 
请注意由于 Cilium 特定的 IP 选项可能会被底层网络结构丢弃因此 DSR 模式在某些公共云提供商环境中可能无法使用。如果后端位于与处理给定 NodePort 请求的节点相距较远的节点上在出现服务连接问题时首先要检查 NodePort 请求是否实际到达了包含后端的节点。如果不是则建议切换回默认 SNAT 模式作为一种解决方法。 
此外在某些实施源/目标 IP 地址检查的公共云提供商环境中如 AWS必须禁用检查才能使用 DSR 模式。 
启用 DSR 实施步骤 
在启用仅 DSR 模式的无 kube proxy 环境中上述 Helm 示例配置如下 
helm upgrade cilium cilium/cilium --version 1.13.4 \--namespace kube-system \--reuse-values \--set loadBalancer.modedsr Warning 前提是 启用本地路由Cilium 完全替换 KubeProxy 验证 
$ kubectl -n kube-system exec ds/cilium -- cilium status --verbose|grep DSRMode:                   DSR 
性能提升 
性能提升可以查看官方的 benchmark: ️️️ 
总结 
本文我们将 Cilium 的 NodePort 实现从 SNAT 模式切换为 DSR 的模式。相比 SNAT 模式DSR 在NodePort 后端 pod 在其他节点时优势明显 
网络少了至少一跳可以保留客户端的源 IP 
但是在公有云环境上需要注意启用的条件。 
至此性能调优已完成 
✔️ 启用本地路由 (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 驱动程序 
️参考文档 
DSR Mode - Kubernetes Without kube-proxy — Cilium 1.13.4 documentationCilium 1.10: WireGuard, BGP Support, Egress IP Gateway, New Cilium CLI, XDP Load Balancer, Alibaba Cloud Integration and more 三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.