当前位置: 首页 > article >正文

保姆级教程:用`ipvsadm`和`iptables-save`命令,一步步拆解K8s Service的流量转发路径

深入拆解Kubernetes Service流量转发从命令行视角看ipvs与iptables的协同当你第一次在Kubernetes集群中创建一个Service时有没有好奇过这个虚拟IP背后究竟发生了什么为什么一个ClusterIP能够稳定地将流量路由到可能随时变化的Pod上今天我们就用ipvsadm和iptables-save这两把手术刀在真实的Minikube集群中解剖这个看似简单实则精妙的过程。1. 实验环境准备与基础概念在开始我们的探索之旅前让我们先搭建一个简单的实验环境。使用Minikube创建一个本地集群是最快捷的方式minikube start --driverdocker --network-plugincni --extra-configkube-proxy.modeipvs这个命令创建了一个使用ipvs模式的Kubernetes集群。为什么特别指定ipvs因为在生产环境中ipvs模式通常能提供更好的性能特别是当你有大量Service时。不过别担心我们也会探讨iptables模式的工作机制。几个核心概念需要明确ServiceKubernetes中的抽象为一组Pod提供稳定的访问入口EndpointService背后实际提供服务的Pod IP和端口集合kube-proxy运行在每个节点上的网络代理负责实现Service的虚拟IP机制让我们创建一个简单的Nginx Deployment和对应的ServiceapiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP应用这个配置后我们就有了一个完美的实验对象。现在让我们进入正题。2. 解剖iptables模式下的流量路径虽然我们创建集群时指定了ipvs模式但理解iptables模式仍然很重要因为ipvs模式实际上也依赖iptables完成部分功能。让我们先看看纯iptables模式下的转发机制。2.1 关键iptables链解析在iptables模式下kube-proxy会创建一系列自定义链来处理Service流量。这些链的名字通常以KUBE-SVC-和KUBE-SEP-开头。让我们看看它们的实际作用# 查看与我们的nginx-service相关的iptables规则 minikube ssh -- sudo iptables-save | grep -i nginx-service你会看到类似这样的输出具体哈希值会不同-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp -m comment --comment default/nginx-service: cluster IP -m tcp --dport 80 -j KUBE-SVC-2CMXP7HKUVJN7L6M -A KUBE-SVC-2CMXP7HKUVJN7L6M -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-XYZZY123456 -A KUBE-SVC-2CMXP7HKUVJN7L6M -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-ABCDEF789012 -A KUBE-SVC-2CMXP7HKUVJN7L6M -j KUBE-SEP-987654ZYXWVU这些规则的含义第一条规则将所有目标为Service ClusterIP(10.96.0.1)且端口为80的流量跳转到KUBE-SVC-*链后续规则实现了简单的负载均衡使用概率将流量分配到不同的KUBE-SEP-*链每个对应一个Pod2.2 深入Endpoint链每个KUBE-SEP-*链对应一个具体的Pod端点。让我们看看其中一个minikube ssh -- sudo iptables-save | grep KUBE-SEP-XYZZY123456输出可能类似-A KUBE-SEP-XYZZY123456 -s 10.244.0.5/32 -j KUBE-MARK-MASQ -A KUBE-SEP-XYZZY123456 -p tcp -m tcp -j DNAT --to-destination 10.244.0.5:80关键点第一条规则为来自Pod自身的流量打上标记用于后续的SNAT第二条规则执行DNAT将目标地址改为Pod的实际IP和端口2.3 iptables模式的性能考量虽然iptables模式简单可靠但它有一个明显的缺点随着Service和Pod数量的增加iptables规则会呈指数级增长。这是因为规则数量 ≈ Service数量 × 每个Service的Endpoint数量 × 节点数量当集群规模较大时比如超过1000个Serviceiptables的线性查找性能会成为瓶颈。这就是为什么Kubernetes引入了ipvs模式。3. ipvs模式下的流量转发机制现在让我们回到ipvs模式看看它是如何解决iptables的规模问题的。3.1 ipvs基础组件ipvs模式下kube-proxy会创建一个名为kube-ipvs0的虚拟接口并为每个Service分配一个IP地址minikube ssh -- ip addr show kube-ipvs0输出类似4: kube-ipvs0: BROADCAST,NOARP mtu 1500 qdisc noop state DOWN group default inet 10.96.0.1/32 scope global kube-ipvs0 valid_lft forever preferred_lft forever inet 10.96.0.10/32 scope global kube-ipvs0 valid_lft forever preferred_lft forever每个Service IP都绑定在这个接口上尽管接口状态是DOWN但这不影响ipvs的功能。3.2 使用ipvsadm查看规则ipvs的核心功能可以通过ipvsadm命令查看minikube ssh -- sudo ipvsadm -ln输出示例IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.96.0.1:80 rr - 10.244.0.5:80 Masq 1 0 0 - 10.244.0.6:80 Masq 1 0 0 - 10.244.0.7:80 Masq 1 0 0关键信息rr表示使用轮询(round-robin)调度算法三个后端Pod被列为真实服务器(Real Server)Masq表示使用IP伪装(MASQUERADE)即SNAT3.3 ipvs如何与iptables协同工作虽然ipvs接管了主要的负载均衡工作但iptables仍然在以下方面发挥作用包过滤实现网络策略和基本防火墙功能SNAT处理为来自Pod的流量做源地址转换查看相关的iptables规则minikube ssh -- sudo iptables-save | grep -i KUBE-MARK-MASQ你会看到类似这样的规则-A KUBE-POSTROUTING -m comment --comment kubernetes service traffic requiring SNAT -m mark --mark 0x4000/0x4000 -j MASQUERADE这条规则为所有被打上0x4000标记的流量执行MASQUERADESNAT。4. 实战追踪一个请求的完整旅程现在让我们实际追踪一个请求从Service到Pod的完整路径。我们将使用tcpdump和kubectl的端口转发功能。4.1 在Pod中启动tcpdump选择一个Pod并在其中启动tcpdump# 获取Pod列表 kubectl get pods -o wide # 在其中一个Pod中启动tcpdump kubectl exec -it nginx-deployment-xxxx -- tcpdump -i eth0 port 804.2 从外部发起请求在另一个终端中使用kubectl port-forward将Service端口映射到本地kubectl port-forward service/nginx-service 8080:80然后在第三个终端中访问这个服务curl http://localhost:80804.3 分析流量路径观察tcpdump的输出你会看到类似这样的记录10.244.0.1.60312 10.244.0.5.80: Flags [S], seq 123456789, win 64860, options [mss 1412,sackOK,TS val 987654321 ecr 0,nop,wscale 7], length 0关键点源IP是10.244.0.1通常是节点的IP目标IP是Pod的实际IP这表明DNAT已经成功将Service IP转换为Pod IP5. 性能优化与模式选择建议在实际生产环境中选择iptables还是ipvs模式需要考虑多个因素考虑因素iptables模式ipvs模式小规模集群简单可靠兼容性好优势不明显大规模集群规则数量多性能下降明显规则数量对性能影响小网络策略与NetworkPolicy集成更好需要额外iptables规则配合负载均衡算法仅支持随机和轮询支持多种算法(rr,lc,sh,dh等)调试复杂度规则直观但数量多规则简洁但需要结合ipvsadm和iptables个人经验分享在管理一个约500节点的生产集群时我们从iptables切换到ipvs后kube-proxy的CPU使用率下降了约40%特别是在Service数量超过2000后差异更加明显。不过要注意ipvs模式需要内核支持某些云主机的定制内核可能需要额外配置。

相关文章:

保姆级教程:用`ipvsadm`和`iptables-save`命令,一步步拆解K8s Service的流量转发路径

深入拆解Kubernetes Service流量转发:从命令行视角看ipvs与iptables的协同 当你第一次在Kubernetes集群中创建一个Service时,有没有好奇过这个虚拟IP背后究竟发生了什么?为什么一个ClusterIP能够稳定地将流量路由到可能随时变化的Pod上&#…...

2025最权威的五大AI科研助手横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一键论文生成器是智能写作辅助系统,运用自然语言处理和深度学习技术,…...

3步掌握Krita AI绘画:面向初学者的完整指南

3步掌握Krita AI绘画:面向初学者的完整指南 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcode.com/gh_mi…...

LinkSwift:八大网盘直链解析工具终极指南,一键解锁高速下载新体验

LinkSwift:八大网盘直链解析工具终极指南,一键解锁高速下载新体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘…...

3步实战精通Photoshop AVIF插件:让你的图像体积减少60%的终极指南

3步实战精通Photoshop AVIF插件:让你的图像体积减少60%的终极指南 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 你是否曾经因为网站图片加载太慢而…...

DeepGEMM 核心技术解析:批次不变性、确定性与 FP8 优化的统一

核心主张: DeepGEMM 的价值不是更高的 FLOPS,而是将效率、确定性、批次不变性三者统一——这才是大规模分布式训练真正需要的。 适读人群: 大模型架构师、Infra 工程师、关注 AI 底层优化的技术决策者 阅读时长: 约 18 分钟 核心收益: 理解 GEMM 优化的工程维度,掌握批次…...

WinBtrfs v1.9深度解析:如何在Windows上构建企业级Btrfs存储解决方案

WinBtrfs v1.9深度解析:如何在Windows上构建企业级Btrfs存储解决方案 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs WinBtrfs v1.9作为Windows平台最成熟的开源Btrfs驱动程…...

3步解锁Nintendo Switch无限潜能:大气层系统完整指南

3步解锁Nintendo Switch无限潜能:大气层系统完整指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否想让自己的Nintendo Switch拥有更多可能性?大气层&#…...

终极指南:5分钟掌握微信聊天记录解密,找回丢失的珍贵数据

终极指南:5分钟掌握微信聊天记录解密,找回丢失的珍贵数据 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为手机故障、系统重装或误操作,导致那些珍贵的微…...

OpenSpeedy终极指南:免费开源游戏变速工具完整教程

OpenSpeedy终极指南:免费开源游戏变速工具完整教程 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款完全免费且开源的游戏变速工具,专…...

两小时速成:如何用快马AI将你的小程序创意快速变为可运行原型

作为一个16岁的中学生,我最近用InsCode(快马)平台在两小时内就做出了一个学习计划管理小程序。整个过程比想象中简单多了,特别适合像我这样刚接触编程的新手。下面分享我的快速原型开发经验: 明确需求很关键 在开始前,我先用纸笔列…...

全栈项目模板:现代Web应用开发的瑞士军刀与最佳实践

1. 项目概述:一个全栈开发者的“瑞士军刀”在当今快节奏的软件开发领域,无论是独立开发者还是小型团队,启动一个新项目时最耗时的往往不是核心业务逻辑的编写,而是那些重复性的基础搭建工作:前后端框架选型、环境配置、…...

大语言模型驱动参数化设计:ChatGPT与Grasshopper集成实战

1. 项目概述:当参数化设计遇上大语言模型 如果你是一名建筑师、设计师,或者任何在Rhino和Grasshopper环境中工作的创意人士,那么你肯定对“参数化设计”这个概念不陌生。通过定义一系列参数和逻辑关系,我们可以创建出能够响应变化…...

【2026高频交易基础设施白皮书节选】:C++内存池必须支持的4项新特性——PCIe Gen6 DMA直通、TSX-E增强、RAS校验及冷热页动态迁移

更多请点击: https://intelliparadigm.com 第一章:2026高频交易内存池演进全景图 2026年,全球头部量化机构已普遍将内存池(Memory Pool)从传统 slab 分配器升级为面向低延迟场景的零拷贝、NUMA-aware、硬件卸载协同型…...

高效鼠标连点器实战指南:5步配置方案提升工作效率300%

高效鼠标连点器实战指南:5步配置方案提升工作效率300% 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...

观察 Taotoken 在多模型切换时的延迟表现与稳定性

观察 Taotoken 在多模型切换时的延迟表现与稳定性 1. 多模型切换的基本体验 在实际开发项目中,我们经常需要根据任务特性切换不同的大模型。通过 Taotoken 平台,可以在不修改代码的情况下快速切换模型。具体操作是在控制台的模型广场选择目标模型&…...

OpenWrt网易云音乐解锁插件终极指南:3分钟告别灰色歌单

OpenWrt网易云音乐解锁插件终极指南:3分钟告别灰色歌单 【免费下载链接】luci-app-unblockneteasemusic [OpenWrt] 解除网易云音乐播放限制 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-unblockneteasemusic 还在为网易云音乐里那些灰色的"无…...

STM32F103驱动国产高精度ADC芯片CS1238:从硬件连接到HAL库代码的完整避坑指南

STM32F103驱动国产高精度ADC芯片CS1238:从硬件连接到HAL库代码的完整避坑指南 在嵌入式测量系统中,24位ADC芯片正逐渐成为高精度采集的标准配置。CS1238作为国产双路24位Σ-Δ型ADC,以其优异的性价比和灵活的配置选项,成为替代HX7…...

AirPodsDesktop:在Windows上解锁苹果耳机完整功能的终极解决方案

AirPodsDesktop:在Windows上解锁苹果耳机完整功能的终极解决方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop 对…...

为Nodejs后端服务配置Taotoken实现稳定的大模型调用

为Nodejs后端服务配置Taotoken实现稳定的大模型调用 1. 准备工作 在开始配置之前,请确保您已经拥有一个有效的Taotoken API Key。您可以在Taotoken控制台的API Key管理页面创建新的密钥。同时,建议您提前在模型广场查看并记录下您计划使用的模型ID&…...

AI客户端选型指南:从开源工具到本地部署的完整实践

1. 项目概述:一个AI客户端的“Awesome”清单如果你最近在折腾各种AI应用,特别是那些需要自己部署、对接不同大模型API的客户端工具,那你大概率和我一样,经历过一段“选择困难症”时期。市面上工具层出不穷,有开源的、闭…...

FreeRTOS小车实战:手把手教你用STM32的TIM编码器模式,精准读取电机转速

FreeRTOS智能小车开发:基于STM32编码器模式的高精度电机测速实战 在智能小车开发中,电机转速的精确测量是实现精准运动控制的基础。传统的光电编码器或霍尔传感器方案往往存在精度不足或响应速度慢的问题。本文将深入探讨如何利用STM32定时器的编码器接口…...

Python正则表达式报错SRE module mismatch?别慌,5分钟教你用pip和venv彻底解决

Python正则表达式报错SRE module mismatch?别慌,5分钟教你用pip和venv彻底解决 遇到"SRE module mismatch"报错时,很多开发者会陷入困惑——明明代码昨天还能运行,怎么今天就突然报错了?这种问题通常发生在同…...

如何快速配置Onekey:Steam游戏清单下载的终极一键式解决方案

如何快速配置Onekey:Steam游戏清单下载的终极一键式解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏解锁工具配置而烦恼吗?Onekey作为一款…...

大语言模型自洽性研究:从评测基准到Self-Consistency等核心方法解析

1. 项目概述:一份关于大语言模型“自洽性”的宝藏清单如果你正在研究大语言模型,特别是关注它们的推理能力、可靠性和幻觉问题,那么“自洽性”这个概念你一定绕不开。简单来说,自洽性衡量的是一个模型在面对同一问题的不同表述、不…...

深入Sensor底层:手把手解析PDAF像素点、Gainmap与DCC校准的完整流程

深入Sensor底层:手把手解析PDAF像素点、Gainmap与DCC校准的完整流程 在移动影像技术快速迭代的今天,相位检测自动对焦(PDAF)已成为旗舰智能手机的标配功能。但鲜为人知的是,这项技术的工程实现背后隐藏着大量精密校准环…...

终极指南:如何用StreamFX打造专业级OBS直播工作室

终极指南:如何用StreamFX打造专业级OBS直播工作室 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom sh…...

终极解决方案:如何快速修复YuukiPS Launcher启动器的9个常见问题

终极解决方案:如何快速修复YuukiPS Launcher启动器的9个常见问题 【免费下载链接】Launcher-PC 项目地址: https://gitcode.com/gh_mirrors/la/Launcher-PC YuukiPS Launcher是一款功能强大的动漫游戏启动器,能够自动检测游戏、下载补丁、支持多…...

别再只盯着GPU-Z了!用CUDA-Z在Linux下给你的N卡做个深度体检(附gpu-burn压力测试教程)

别再只盯着GPU-Z了!用CUDA-Z在Linux下给你的N卡做个深度体检(附gpu-burn压力测试教程) 当你在Linux服务器上部署深度学习模型时,是否遇到过GPU利用率忽高忽低的情况?或者在进行大规模矩阵运算时,总感觉显卡…...

qmcdump终极指南:轻松解密QQ音乐加密文件,实现跨平台音频自由转换

qmcdump终极指南:轻松解密QQ音乐加密文件,实现跨平台音频自由转换 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors…...