k8s-kube-proxy
kube-proxykube-proxy 是 K8s 服务于 Pod 网络的核心组件负责实现Service服务到Endpoint后端 Pod的流量转发与负载均衡。环境准备rootmaster30 ~13:52:52# kubectl create ns servicesrootmaster30 ~14:00:11# kubectl config set-context --current --namespace services工作模式类型kube-proxy 工作模式有以下几种模式地位性能适用场景特点iptables默认模式中服务数 1000小规模集群、环境稳定依赖内核 netfilter规则多时有性能损耗IPVS推荐模式极高服务数 10w中大规模生产环境基于内核 IPVS哈希表查找性能碾压 iptablesUserspace老旧/废弃低仅测试、兼容旧版全用户态转发性能最差K8s 1.25 已移除✅ 生产环境必选 IPVS 模式配合 Calico 网络插件性能与稳定性最佳。工作模式切换查看工作模式rootmaster30 ~14:34:00# kubectl get cm -n kube-system kube-proxy -o yaml|grep modemode: # mode值为空。# 查看pod/kube-proxy日志rootmaster30 ~14:35:03# kubectl get pods -n kube-system -l k8s-appkube-proxy -o namepod/kube-proxy-dhxmv pod/kube-proxy-jvd66 pod/kube-proxy-qvtxs rootmaster30 ~14:35:22# kubectl logs -n kube-system kube-proxy-dhxmv |grep UsinggI041513:03:28.3806431server.go:511]Using lenient decoding as strict decoding failederrI041513:03:28.3807961server_linux.go:69]Using iptables proxyI041513:03:28.4734061server_linux.go:165]Using iptables Proxier# 输出内容Using iptables proxy表明默认使用iptables修改工作模式# 步骤 1编辑 kube-proxy 配置 ConfigMaprootmaster30 ~14:00:37# kubectl edit cm -n kube-system kube-proxy# 找到并修改 mode 字段为相应的值例如ipvs。....metricsBindAddress:mode:ipvs....# 步骤 2重启 kube-proxy DaemonSetrootmaster30 ~14:17:44# kubectl rollout restart daemonset -n kube-system kube-proxy# 步骤 3验证模式切换rootmaster30 ~14:18:42# kubectl get pods -n kube-system -l k8s-appkube-proxy -o namepod/kube-proxy-dhxmv pod/kube-proxy-jvd66 pod/kube-proxy-qvtxs rootmaster30 ~14:19:13# kubectl logs -n kube-system kube-proxy-jvd66....I0811 06:18:10.1115991server_linux.go:233]Using ipvs Proxier....# 输出内容Using ipvs Proxier表明使用ipvsIPVS 模式IPVS 代理模式基于 netfilter 回调函数类似于 iptables 模式 但它使用哈希表作为底层数据结构在内核空间中生效。 这意味着 IPVS 模式下的 kube-proxy 比 iptables 模式下的 kube-proxy 重定向流量的延迟更低同步代理规则时性能也更好。 与其他代理模式相比IPVS 模式还支持更高的网络流量吞吐量。IPVS 为将流量均衡到后端 Pod 提供了更多选择rr轮询lc最少连接打开连接数最少dh目标地址哈希sh源地址哈希sed最短预期延迟nq最少队列工作原理kube-proxy 在宿主机内核中创建IPVS 虚拟服务器并将后端 Pod 作为Real Server注册。IPVS 基于哈希表存储转发规则查找效率为 O(1)。流量到达后IPVS 根据配置的调度算法直接将流量转发到后端 Pod绕过了复杂的 iptables 规则链。通信流程图访问 Service IP:Port哈希查找调度算法直接路由/隧道客户端 Pod宿主机网卡内核 IPVS 虚拟服务器选择最优后端 Pod后端 Pod IP:Port响应流量直接返回核心优势支持多种高级调度算法轮询 rr、加权轮询 wrr、最少连接 lc 等。性能与服务数量无关支持十万级服务规模。内置健康检查与 K8s Endpoint 联动。验证原理前置准备已安装 IPVS 依赖ipvsadm、ipset并加载内核模块。kube-proxy 已切换为 IPVS 模式。验证步骤1. 创建测试资源# 创建一个 nginx Deploymentrootmaster30 ~14:31:15# kubectl create deployment web --imagenginx --replicas3rootmaster30 ~14:31:31# kubectl get pods -o wide | awk {print $1,$6}NAME IP web-7c56dcdb9b-fgzdq10.224.26.147 web-7c56dcdb9b-qk97610.224.71.217 web-7c56dcdb9b-stb7n10.224.71.209# 设置 pod 主页内容为为自己的pod名称rootmaster30 ~14:31:37# \forpodin$(kubectl get pods-ocustom-columnsNAME:.metadata.name --no-headers)dokubectlexec$pod--bash-cecho$pod /usr/share/nginx/html/index.htmldone# 验证主页内容rootmaster30 ~14:32:07# curl http://10.224.26.147web-7c56dcdb9b-fgzdq rootmaster30 ~14:32:31# curl http://10.224.71.217web-7c56dcdb9b-qk976 rootmaster30 ~14:32:41# curl http://10.224.71.209web-7c56dcdb9b-stb7n# 创建Servicerootmaster30 ~14:32:49# kubectl expose deployment web --port80rootmaster30 ~14:33:04# kubectl get svc webNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE web ClusterIP10.110.237.125none80/TCP 11s2. 查看 IPVS 规则在任意集群节点执行这里在master30节点执行查看 kube-proxy 创建的 IPVS 虚拟服务# 列出虚拟服务器rootmaster30 ~14:33:15# ipvsadm -Lnt 10.110.237.125:80看到类似如下的记录其中10.110.237.125:80是 Service IP80是 Service Portrootmaster30 ~14:33:15# ipvsadm -Lnt 10.110.237.125:80Prot LocalAddress:Port Scheduler Flags -RemoteAddress:Port Forward Weight ActiveConn InActConn TCP10.110.237.125:80 rr -10.224.26.147:80 Masq100-10.224.71.209:80 Masq100-10.224.71.217:80 Masq100结论IPVS 已成功为 Service 创建了虚拟服务并绑定了所有后端 Pod。3. 验证负载均衡效果在集群内或外部访问 Service观察流量是否分发到不同 Pod# 连续访问 60 次rootmaster30 ~14:33:35# for i in {1..60}; do curl -s 10.110.237.125; done| sort | uniq -c20web-7c56dcdb9b-fgzdq20web-7c56dcdb9b-qk97620web-7c56dcdb9b-stb7n调度算法选择rr轮询简单均衡节点配置一致时使用wrr加权轮询最推荐适合通用业务、Web、API、网关。wrr 权重来源1. 与 Pod 的 resources.requests.cpu/memory 成正比2. ipvsadm命令临时设置只适合临时测试。lc最少连接适合长连接、WebSocket、游戏服务sh源地址哈希配合 Service sessionAffinity: ClientIP 使用更改调度算法rootmaster30:~# kubectl edit configmap kube-proxy -n kube-system......ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler:wrr....... mode:ipvs.......# 重启 kube-proxyrootmaster30:~# kubectl rollout restart ds kube-proxy -n kube-system最佳配置apiVersion:kubeproxy.config.k8s.io/v1alpha1kind:KubeProxyConfigurationmode:ipvs# IPVS 核心调优 ipvs:# 调度算法生产推荐rr / wrr / lc 三选一scheduler:rr# 会话保持时间秒0 表示关闭tcpTimeout:900tcpFinTimeout:120udpTimeout:300# 排除 127.0.0.1 负载均衡必须开启excludeCIDRs:-127.0.0.1/32# 严格arp避免集群访问异常必须开启strictARP:true# 性能优化 # 最大打开文件数高并发必调oomScoreAdj:-999# Iptables 规则优化iptables:minSyncPeriod:5ssyncPeriod:30s# 日志级别logging:format:textverbosity:2iptables 模式工作原理kube-proxy 默认工作模式是 iptables 模式。kube-proxy 监听 Service 和 Endpoint 变化在宿主机内核中动态生成iptables 规则链KUBE-SERVICES、KUBE-SEP-XXX 等。当流量进入宿主机时通过 netfilter 框架逐条匹配 iptables 规则实现 DNAT目标地址转换和负载均衡。通信流程图访问 Service IP:Port匹配 Service 规则DNAT 转换客户端 Pod宿主机网卡内核 iptables 规则链随机选择后端 Endpoint IP后端 Pod IP:Port响应流量原路返回核心缺点每增加一个 Service 或 Endpoint都会新增/修改 iptables 规则。当服务数量超过 1000 时规则链膨胀CPU 占用飙升延迟显著增加。验证原理前置准备kube-proxy 已切换为 iptables 模式。验证步骤1. 创建测试资源使用ipvs实验环境准备的资源。2. 查看防火墙规则步骤1获取防火墙规则。在任意集群节点执行这里在master30节点执行保存防火墙规则rootmaster30:~# iptables-save iptables.list步骤2分析 svc-nginx 规则。rootmaster30:~# cat iptables.list |grep 10.103.143.120-AKUBE-SERVICES-d10.103.143.120/32-ptcp-mcomment--commentservices/web cluster IP-mtcp--dport80-jKUBE-SVC-7D76YWGERGEPC4GC-AKUBE-SVC-7D76YWGERGEPC4GC!-s10.224.0.0/16-d10.103.143.120/32-ptcp-mcomment--commentservices/web cluster IP-mtcp--dport80-jKUBE-MARK-MASQ分析防火墙规则第一条防火墙规则在nat表KUBE-SERVICES服务总入口链中匹配目的 IP 为 10.103.143.120/32、协议 TCP、目的端口 80的报文通过注释标识为 services/web 的 ClusterIP 服务并跳转至该服务专属调度链 KUBE-SVC-7D76YWGERGEPC4GC。第二条防火墙规则则在服务专属链KUBE-SVC-7D76YWGERGEPC4GC中匹配源地址非 Pod 网段 10.224.0.0/16、目的 IP 10.103.143.120/32、协议 TCP、目的端口 80的报文注释标识为 services/web cluster IP并跳转至 KUBE-MARK-MASQ 进行 SNAT 标记。步骤3进一步追踪链路KUBE-SVC-7D76YWGERGEPC4GC。rootmaster30:~# cat iptables.list | grep KUBE-SVC-7D76YWGERGEPC4GC:KUBE-SVC-7D76YWGERGEPC4GC -[0:0]-AKUBE-SERVICES-d10.103.143.120/32-ptcp-mcomment--commentservices/web cluster IP-mtcp--dport80-jKUBE-SVC-7D76YWGERGEPC4GC-AKUBE-SVC-7D76YWGERGEPC4GC!-s10.224.0.0/16-d10.103.143.120/32-ptcp-mcomment--commentservices/web cluster IP-mtcp--dport80-jKUBE-MARK-MASQ-AKUBE-SVC-7D76YWGERGEPC4GC-mcomment--commentservices/web - 10.224.113.164:80-mstatistic--moderandom--probability0.33333333349-jKUBE-SEP-HYZM2VM7RCC7M2HX-AKUBE-SVC-7D76YWGERGEPC4GC-mcomment--commentservices/web - 10.224.113.165:80-mstatistic--moderandom--probability0.50000000000-jKUBE-SEP-CHPZVFCOFL4YLCYM-AKUBE-SVC-7D76YWGERGEPC4GC-mcomment--commentservices/web - 10.224.19.38:80-jKUBE-SEP-HM7RLUR2RXSQ3D6F分析防火墙规则**第一条防火墙规则**已分析过。**第二条防火墙规则**已分析过。**第三条防火墙规则**在服务调度链KUBE-SVC-7D76YWGERGEPC4GC中对所有协议与地址的访问报文以1/3 随机概率将其跳转至后端端点链KUBE-SEP-HYZM2VM7RCC7M2HX注释标识该端点对应 services/web 服务后端 10.224.113.164:80。**第四条防火墙规则**在服务调度链KUBE-SVC-7D76YWGERGEPC4GC中对未被前序规则匹配的报文以剩余流量 1/2 随机概率总概率 1/3跳转至后端端点链KUBE-SEP-CHPZVFCOFL4YLCYM注释标识对应 services/web 后端 10.224.113.165:80。**第五条防火墙规则**在服务调度链KUBE-SVC-7D76YWGERGEPC4GC中对未被前序概率规则匹配的报文无条件跳转总概率 1/3至后端端点链KUBE-SEP-HM7RLUR2RXSQ3D6F注释标识对应 services/web 后端 10.224.19.38:80。步骤4进一步追踪上面最后三条规则目标链路。rootmaster30:~# cat iptables.list | grep -e KUBE-SEP-HYZM2VM7RCC7M2HX -e KUBE-SEP-CHPZVFCOFL4YLCYM -e KUBE-SEP-HM7RLUR2RXSQ3D6F | grep DNAT-AKUBE-SEP-CHPZVFCOFL4YLCYM-ptcp-mcomment--commentservices/web-mtcp-jDNAT --to-destination10.224.113.165:80-AKUBE-SEP-HM7RLUR2RXSQ3D6F-ptcp-mcomment--commentservices/web-mtcp-jDNAT --to-destination10.224.19.38:80-AKUBE-SEP-HYZM2VM7RCC7M2HX-ptcp-mcomment--commentservices/web-mtcp-jDNAT --to-destination10.224.113.164:80分析防火墙规则第一条防火墙规则在后端端点链KUBE-SEP-HM7RLUR2RXSQ3D6F中匹配TCP 协议报文注释标识为 services/web 服务执行DNAT 目标地址转换将报文目的地址修改为10.224.19.38:80。第二条防火墙规则在后端端点链KUBE-SEP-HYZM2VM7RCC7M2HX中匹配TCP 协议报文注释标识为 services/web 服务执行DNAT 目标地址转换将报文目的地址修改为10.224.113.164:80。第三条防火墙规则在后端端点链KUBE-SEP-CHPZVFCOFL4YLCYM中匹配TCP 协议报文注释标识为 services/web 服务执行DNAT 目标地址转换将报文目的地址修改为10.224.113.165:80。3. 总结全链路流程图入口访问 ClusterIP分流进入KUBE-SERVICES服务调度进入KUBE-SVC-XXXSNAT 负载均衡端点转发进入KUBE-SEP-XXX最终到达后端 Pod客户端访问ClusterIP: 10.103.143.120:80PREROUTINGnat 表KUBE-SERVICES服务总入口KUBE-SVC-7D76YWGERGEPC4GCservices/web 专属调度链SNAT 标记非 Pod 网段流量→ KUBE-MARK-MASQ概率 1/3 负载均衡概率 1/3 负载均衡默认 1/3 负载均衡KUBE-SEP-HYZM2VM7RCC7M2HXKUBE-SEP-CHPZVFCOFL4YLCYMKUBE-SEP-HM7RLUR2RXSQ3D6FDNAT 转发→ Pod: 10.224.113.164:80DNAT 转发→ Pod: 10.224.113.165:80DNAT 转发→ Pod: 10.224.19.38:80环境清理rootmaster30:~# kubectl delete ns services

相关新闻

Windows系统Node.js安装配置全攻略:从版本管理到环境优化

Windows系统Node.js安装配置全攻略:从版本管理到环境优化

1. 项目概述:为什么Windows上的Node.js安装值得单独聊聊 如果你刚开始接触前端或者后端开发,Node.js大概率是你绕不开的一个技术栈。很多教程会告诉你“去官网下载安装包,一路Next就行”,听起来简单,但实际动手时&…

2026/10/30 8:15:19 阅读更多 →
论文AI率0%黑科技!降AI率网站留学生亲测:Turnitin查重秒变“人类原创“

论文AI率0%黑科技!降AI率网站留学生亲测:Turnitin查重秒变“人类原创“

写论文用AI确实省心又高效,尤其是面对海量资料和紧迫的截止日期时,简直就像开挂一样。但千万别高兴太早,现在不少高校对AI痕迹的检测比查重还严格,Turnitin一查,轻则被打回重写,重则直接挂科影响毕业。AI生…

2026/10/29 7:02:28 阅读更多 →
论文大纲逻辑理不清,有哪些专业的AI论文写作工具推荐?

论文大纲逻辑理不清,有哪些专业的AI论文写作工具推荐?

毕业季一到,不少同学卡在开题报告这第一关:选题定不下来、研究背景和意义分不清、文献综述无从下手、研究方法和技术路线逻辑混乱,对着空白文档熬上几周也写不出完整框架。尤其是零基础、在职读研、跨专业的学生,对高校开题规范一…

2026/10/29 23:01:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/30 0:01:36 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/29 8:45:01 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/29 9:52:56 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/30 0:01:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/29 9:51:34 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/29 8:44:28 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 17:01:10 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 9:42:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 0:01:33 阅读更多 →