kubenetes--kube-proxy实现负载均衡

news2024/11/16 12:04:31

一、Linux网络收包

要了解kube-proxy如何实现负载均衡,要先了解Linux网络收包机制,kube-proxy利用Linux的内核实现的负载均衡。

在TCP/IP网络分层模型里,整个协议栈被分成了物理层、链路层、网络层,传输层和应用层。物理层对应的是网卡和网线,应用层对应的是我们常见的Nginx,FTP等等各种应用。Linux实现的是链路层、网络层和传输层这三层。内核对更上层的应用层提供socket接口来供用户进程访问。我们用Linux的视角来看到的TCP/IP网络分层模型是下面这个样子的。
在这里插入图片描述

从硬件的视角看:

在这里插入图片描述
当网卡上收到数据以后,首先会以DMA的方式把网卡上收到的帧写到内存里。再向CPU发起一个中断,以通知CPU有数据到达。当CPU收到中断请求后,会去调用网络驱动注册的中断处理函数。 网卡的中断处理函数并不做过多工作,发出软中断请求,然后尽快释放CPU。ksoftirqd检测到有软中断请求到达,调用poll开始轮询收包,收到后交由各级协议栈处理。最后数据包会被放到用户socket的接收队列中。

二、Netfilter 框架

Netfilter 是 Linux 内核数据包处理框架。该框架在Linux处理数据包的关键流程中定义了一系列Hook钩子点(如PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING),并在这些钩子点中注册一系列函数对数据包进行处理。换句话说,这些函数的处理结果决定了这些网络数据包的“命运”。
在这里插入图片描述

  1. PREROUTING:数据包进入路由表之前。
  2. INPUT:通过路由表后目的地为本机。
  3. FORWARD:通过路由表后,目的地不为本机。
  4. OUTPUT:由本机产生,向外发送。
  5. POSTROUTIONG:发送到网卡接口之前。

Netfilter在网络层上拦截和处理来自网络的数据包,根据配置的规则进行过滤和操作,然后将数据包交由上层协议栈进行进一步的处理和传递。

三、Iptables

Netfilter是Linux内核中的一个框架,而iptables是一个用户空间的工具,用于配置和操作Netfilter的规则。iptables利用Netfilter的hook函数,根据配置的规则来处理网络数据包。通过这种方式,Netfilter和iptables共同协作实现了Linux中的网络过滤和操作功能。
在这里插入图片描述

四、kube-proxy工作原理

在这里插入图片描述
kube-proxy利用iptables命令生成一些规则,来达到dnat的作用。

4.1 iptables示例

在这里插入图片描述
在这里插入图片描述

定义了一个service和分别对应三个pod,并通过命令查看本机iptable配置规则:

iptables-save -t nat

在这里插入图片描述
配置的意思是:
有一条KUBE-SERVICES的规则,如果数据包的目标ip是10.105.164.239,那么转到KUBE-SVC-WWRFY3PZ7W3FGMQW规则。
KUBE-SVC-WWRFY3PZ7W3FGMQW以33%的概率转到192.168.166.164:80,以50%概率转到192.168.166.165:80,如果概率都没有命中,最后以100%的概率转到192.168.166.167:80.iptable规则是自上而下执行的。
那么KUBE-SERVICES规则又是加在哪里的呢
在这里插入图片描述
可以看到配到了PREROUTING和OUTPUT这两个hook点。也就是说所有进入和发出主机的数据包都要经过这个规则。
还有一个需要注意的是,service ip 10.105.164.239是一个虚ip,主机上并没有一个设备去响应,是ping不通的
但是,iptable有很明显的问题,一个是负载均衡的策略需要用很多的规则去堆叠起来,还有一个是按照概率去命中执行注定转发的效率不会很高,如果集群比较大,pod数量较多,这种问题就更明显了。

4.2 IPVS

在这里插入图片描述
需要注意的是,Netfilter的IPVS模式没有PREROUTING这个hook点,只有LOCAL_IN、LOCAL_OUT和FORWARD这三个hook点。
也就是说经过路由判决的时候,数据包的目的ip还是service ip,不像iptable那样,在经过PREROUTING的时候就把数据包的目标ip换成了pod的ip,所以service ip必须挂在主机的某个设备上,否则经过路由判决的时候会被认为是一个无效的地址。
在这里插入图片描述
kube-proxy会在主机上创建一个类似kube-ipvs0这样的设备,所有的service ip都绑在这个设备上,这个ip是能ping通的,这也是ipvs模式和iptable模式的一个区别。

查看IPVS转发规则:
在这里插入图片描述
IPVS转发规则比较清晰简洁。所以,一般建议能使用IPVS尽量使用IPVS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高并发写】库存系统设计

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

Vue 入门指南:从零开始学习 Vue 的基础知识

🥝VUE官方文档 注意: 📒Vue 2 将于 2023 年 12 月 31 日停止维护。详见 Vue 2 延长 LTS。📒Vue 2 中文文档已迁移至 v2.cn.vuejs.org。📒想从 Vue 2 升级?请参考迁移指南。 文章目录 🍁前言&am…

后台管理系统开源项目

最近项目没有什么事做,就自己整理,修改了一些vue2,react的后台管理系统项目,方便以后有需要可以直接提取,当然也方便了大家 vue2技术栈 lyl-vueProjectAdmin: vue2后台管理系统 react技术栈 lyl-reactAdminProject:…

Vue3-基于husky的代码检查工作流

husky是一个git hooks工具(git的钩子工具,可以在特定时机执行特定的命令) 代码检查 背景:想要使代码上传到git仓库前进行代码检查,所以提前下载好git 打开项目终端,点击右上角选择进入Git Bash控制 1.如…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1 ≤ � ≤ 10001≤n≤1000 ,元素大小满足 0 ≤ � &#…

同为科技(TOWE)工业级炫彩桌面PDU让你的桌面更整洁

在当今社会,人们越来越注重生活品质与工作效率,桌面PDU插座是安全便捷的桌面电源设备,兼顾了工业机柜PDU功能、输出方式多样化与C端电气设备高颜值、实用性的特点,可满足消费者日常多方位用电需求。同为科技(TOWE&…

应用密码学期末复习(1)

学习资料 应用密码学总结_应用密码学知识点总结-CSDN博客 应用密码学期末复习知识点总结_5的36次方mod97__PriDe的博客-CSDN博客 【密码学】密码学期末考试速成课,不挂科!!#高数帮_哔哩哔哩_bilibili 目录 学习资料 第一章 概述 1.1信息…

vue2通过权限控制tab标签显示和隐藏

vue2通过权限控制tab标签显示和隐藏 1、前言2、v-if实现自定义控制 1、前言 在开发过程中,我们可能会遇到这样一个场景:根据不同权限对tab栏内容进行控制,这时候用自定义指令v-permission就达不到我们想要的效果,其是将当前节点的…

FinOps和DevOps的未来会怎样?

FinOps(或财务运营)是一种文化实践,它将财务责任引入云的可变支出模型。这是一种将系统、最佳实践和文化相结合的战略方法,可提高组织了解云成本并做出明智决策的能力。 本质上,FinOps 是一个管理云运营费用&#xff…

①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态

个人简介:Java领域优质创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 登录功能 实现 实现基于session的登录流程&…

「阿里巴巴」裁撤量子实验室!

据内部消息,阿里巴巴达摩院由于预算及盈利等原因,已经撤裁旗下量子实验室。此次,共计裁减30余人。 达摩院官网已撤下量子实验室的相关介绍页面。上图:早先关于量子实验室的相关介绍;下图:现在达摩院官网“实…

招标采购软件如何让采购变得更轻松?

企业总是希望让采购流程更简单,选择更好的供应商,花更少的钱。采购软件的普及使原材料和服务的采购变得更容易,向供应商(甚至是全球供应商)索取信息的流程已大大简化。包括招标采购软件在内的采购技术已成为企业运营不…

11.Spring源码解析-beans解析

很明显又调用回来了,是典型的递归调用

璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品,凭借优秀的产品技术能力,通过评估后,入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图(2023)》的工业数字化领域。 “铸基计划”是中国信通院…

MySQL数据库入门到大牛_基础_17_触发器

文章目录 1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 5. 第十七章练习 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关…

文章采集器-免费的文章采集工具大全

在当今信息爆炸的时代,获取有效的信息变得尤为关键。随之而来的问题是,如何高效地从海量信息中筛选出我们所需的内容呢?文章采集器应运而生,它就像是信息世界中的一把神奇的筛子,能够帮助我们从大海一般的信息中捞取我…

linux 内核线程

内核线程类似于用户进程,通常用于并发处理些工作,它是一种在内核空间实现后台任务的方式,并且可以参与时间片轮转调度。 内核线程可以进行繁忙的异步事件处理,也可以睡眠等待某事件的发生,内核线程可以访问内核函数和…

【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用

文章目录 一. Hive Architecture二. Metastore1. Metastore Architecture2. Metastore Interface 三. Compiler四. hive架构小结 本文主要讨论了 描述了hive架构,hive主要组件的作用详细描述了hsql在hive执行过程中的底层细节描述了hive各组件作用 一. Hive Archite…

Authing CEO 谢扬来信 |我的原则

从忙碌的工作中短暂抽身,有很多感想,不吐不快,借此机会,倾我所有,诉我原则。 原则一:坚强信念,坚定意志 商人大多「无利不起早」,而创业者的反馈周期比商人长非常非常多。 相比「商品…