k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
计算节点的功能:
提供容器运行的环境
kube-proxy的主要功能:
术业有专攻,
kube-proxy的主要功能可以概括为4个字
网络规则
那么kube-proxy自己其实是个daemonset控制器跑的
每个节点上都有个的pod
它负责网络规则
其实呢
它还是个小领导
它不直接去搞网络规则
而是告诉别人,网络规则要怎么搞
你来搞
告诉谁?
1.14版本之前是iptables
1.14版本之后是ipvs
iptables是个命令行工具,装系统的时候一般默认就有
如果没有就装一个软件包就可以,ubuntu和centos系列的包名都是iptables
centos默认用了firewalld,如果管理员更习惯用iptables,可以暂时把firewalld先停掉
因为firewalld也是为了用户配置更简单吧,给了用户更友好的交互方式,然后用户的
配置指令,firewalld也是翻译给iptables, iptables再找内核模块netfilter去在内核层面执行
可以这么说,一般把iptables称为防火墙,是因为iptables调用
netfilter模块来进行流量过滤,利用netfilter内核模块的五个钩子点
也称为iptables的五条链
其实称为五个钩子点 ,可能更好理解一点
因为区别是,到底是链还是点?
prerouting
postrouting
input
output
forward
也就是数据到内核这了
内核有五个管理处来管理数据包
prerouting,数据包进入路由表之前,要怎么处理
postrouting,数据包离开路由表,往外发的时候,要怎么处理
(这里说一下,常用的snat源地址网络地址转换,内网机器上外网就是在这个点做改变,把数据包的源ip,本来是内网ip,出站的时候改成公网ip,就可以访问公网服务了,这个操作,的点,就是在内核模块netfilter的postrouting这个点上来执行的,具体操作方式是netfilter内核模块的提供的命令行工具iptables,然后在命令行设置规则,netfilter在内核层面就是运用这些规则)
input,数据包到达本地,这个管理处看怎么处理
output 出站
forward 数据包转发给其他主机
总结的是,iptables调用netfilter模块,可以实现流量更精细的控制,等于说,功能多。
而一般情况是功能多,其中单个功能的性能就一般。
相对来说
ipvs的方式,专注于负载均衡
核心是一个lvs虚拟服务器
所谓lvs,就是linux virtual service
linux虚拟服务器
这个虚拟服务器
跟传统的服务有点不一样
传统的服务大多是在应用层提供服务的
比如常见的web服务,比如nginx、apache、tomcat
openjdk跑个java运行环境
jenkins服务
maven
ide
等开发工具
更直观来讲
我们在图形界面
比如windows操作系统
安装的绝大多数软件都是工作在应用层的
开发人员写代码,也是在应用层IDE上写
写好了去调用编译器解释器去翻译给机器看
事实是,编译的结果是二进制文件
那么既然是文件,且能够在目录中查询到
基本上也都是应用层的服务交互的结果。
------------------------------------------------------------------------
说回ipvs内核模块
工作在内核层面,
所谓的lvs虚拟服务器
不像传统的装包配置起服务,
也不像容器化的用镜像跑容器,在容器里面运行进程
如果说需要软件包,就是ipvsadm,然后用户在
命令行界面用这个命令行工具去部署ipvs的规则
但是在k8s,这个不用
先不说过程
先说结果
结果就是
系统调用ipvs内核模块
来生成具体的负载均衡路由方式
由一个虚拟服务器的虚拟ip地址接待流量
是vip,不是按个尊贵的vip,是一个virtual ip,是一个虚拟的ip地址
这个虚拟的ip地址接待访问流量
然后通过arp内核抑制的方法
把后端服务器的arp隐藏掉
客户端的访问请求到达vip
vip这里再搞个操作,把访问请求报文
的目标mac地址,给到抑制了arp的后端真实服务器
------------------------------------------------------------------------
对于客户端来讲,客户要访问的ip是那个谁谁谁
而lvs集群告诉客户端的信息是,我就是那个谁谁谁
我的ip就是你要找的ip
客户端说是吗?
我先找人的时候,先搞arp地址请求
在网上问,我要找的ip是谁谁谁,这个谁谁谁,你把你的mac地址给我
我们对一下号
lvs集群怎么搞的
它就是让后端真实服务器的兄弟们悄悄的
别人发arp广播的时候,你们别吱声
这个功能是怎么实现的,是调整内核参数,arp_ingore = 1
忽略arp请求
再往深了讲,先不说了
先把k8s这一套怎么操作的说清楚
lvs的dr模式的内部原理
还有一个内核参数arp_anounce = 2
------------------------------------------------------------------------------------------
简单理解就是说
客户端的请求报文来到lvs集群的时候
lvs虚拟服务器让后端真实服务器arp_ignore = 1
就是别人来问的时候,你们别吱声
lvs虚拟服务说,本机器就是你要找的服务器
所以客户端的请求报文就到达lvs虚拟服务器了
然后lvs虚拟服务器通过修改报文的mac地址
把流量分配给后端干活的真实服务器
真实服务器完成计算任务后,将响应报文返回给客户端的时候
一般来讲,还是给lvs虚拟服务器,lvs虚拟服务器再给回客户端
就有点像nginx的反向代理了
但是
lvs的性能优秀就优秀在这个地方的与众不同
它集群的后端真实服务器返回数据的时候
不经过lvs虚拟服务器,
而是直接给客户端返回去。
管理员会有疑问,
根据同源策略,这样的报文回去,客户端不认啊
那能行吗
lvs就是这样搞的
用arp_anounce = 2
声明自己的另一张网卡
有意思的是,后端服务器的这个另一张网卡
是虚拟网卡,这个虚拟网卡的ip就是lvs接待流量的ip
后端真实服务器跑完应用程序生成响应报文了
回传数据的时候,报文的目标ip还是客户端的ip
为什么呢?
因为lvs虚拟服务器接待了流量转发给后端真实服务器的时候
只是改变了数据帧层面的帧头,也就是mac地址
而源目ip是包裹在数据帧之内的,所以
lvs虚拟服务器并没有改变报文的源目ip
它没有拆包
而数据包到了后端真实服务器那里
它就拆包,工作
然后搞完之后
返回响应报文
自然是目标ip就是客户端的ip
有意思的是
后端真实服务器进行了一个花操作
就是用arp_anounce = 2
让内核在返回响应报文的时候
给这个数据包的源ip用自己的
能够与客户端通信的ip地址
也就是那个虚拟ip地址
这个虚拟ip地址,lvs虚拟服务器和后端真实服务器都有,而且是一样的
那么这个数据包到达客户端那里
也不会有疑问
因为客户端访问的就是这个虚拟ip,vip
返回的数据包的源ip也是这个虚拟ip,vip
客户端觉得是ok的
是没问题的。
---------------------------------------------------------------------------------------------
服务端集群这么一套搞下来,
就是lvs-dr模式了
linux vitual server - direct routing
linux虚拟服务器 - 直连 路由
这个好处是lvs虚拟服务器不用拆包
而且只管进来的流量,出去的流量不经手
所以负载减轻了好多
所以
就有了管理员常说的,lvs负载均衡性能好
它比nginx从性能方面来讲,就有这么一点了
出站的流量是后端服务器自己给出去的
那清闲了一半
这个也挺主要的。
---------------------------------------------------------------------------
总的来说
lvs的模式,可以用两句话大概概括
1. 客户端来找服务器的时候,后端服务器说“不是我,不是我”
2. 后端服务器给客户端返回数据的时候,后端服务器说“嘿嘿,就是我,我来啦”
----------------------------------------------------------------------------------------------------------
那么lvs功能少,性能好,工作在四层
k8s集群创建服务的流程是这样的:
用户kubectl apply -f service_name.yaml
意思是告诉apiserver,我要创建一个service,名称叫service_name
apiserver会创建出来一个service
service的ip地址也是apiserver给提供的
kubeproxy主要是去找内核模块ipvs,说lvs虚拟服务器的ip就是这个了
也就是service的ip地址,后端的pod的ip
作为后端真实服务器和service的ip
组成一个lvs负载均衡集群。
那么ipvs内核模块就可以按照需求来创建一个lvs负载均衡集群
从整体来看,k8s集群可以视为一个大型的负载均衡集群
加上deployment、daemonset、statefulset、HPA
等控制器
相关文章:
k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
计算节点的功能: 提供容器运行的环境 kube-proxy的主要功能: 术业有专攻, kube-proxy的主要功能可以概括为4个字 网络规则 那么kube-proxy自己其实是个daemonset控制器跑的 每个节点上都有个的pod 它负责网络规则 其实呢 它还是个小…...
三、归一化与标准化
归一化与标准化 前言一、最小最大值归一化1.1 原理(公式)1.2 API 介绍1.2.1 参数介绍1.2.2 属性介绍1.2.3 注意事项1.2.4 代码演示 1.3 举例说明 二、标准化2.1 原理(公式)2.2 API 介绍2.2.1 参数介绍2.2.2 属性介绍2.2.3 注意事项…...

B2105 矩阵乘法
B2105 矩阵乘法 #include <iostream> using namespace std; int main(){int n,m,k;cin>>n>>m>>k;int arr1[n][m];int arr2[m][k];for(auto & line:arr1){for(auto & x: line){cin>>x;}}for(auto & line:arr2){for(auto & x: lin…...

centos之下的mysql8的安装
文章目录 1.mysql.com进入(网址栏)2.xshell操作2.1拖拽上传2.2安装发布包2.3检查情况2.4安装mysql2.5手动启动2.6查看状态2.7查看随机密码2.8登录2.9重置密码 1.mysql.com进入(网址栏) 找下面的这个download按钮: 一直往下面划:找到下面的这个 下面的这个…...

计算机导论
概述 计算机简史 1935年代,英国数学家图灵(Alan Turing)提出“图灵机”,奠定了计算机的理论基础。 1952年,冯诺依曼确定了计算机由运算器、控制器、存储器、输入、输出等5部分组成(Von Neumann 体系结构)。 60年代…...
力扣209-长度最小的子数组-滑动窗口思想
题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&am…...

Xilinx 7系列FPGA PCI Express IP核简介
前言:Xilinx7系列FPGA集成了新一代PCI Express集成块,支持8.0Gb/s数据速率的PCI Express 3.0。本文介绍了7系列FPGA PCIe Gen3的应用接口及一些特性。 1. PCI Express规范演进 PCIe是一种高速串行计算机扩展总线标准,旨在替代传统的PCI和AG…...
红包雨html
1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…...
js 基础补充3
1. 闭包 在函数内部定义的函数,可以访问改函数的属性和方法 私有属性 延长变量的生命周期,更好的避免命名冲突 缺点:内存消耗比较大,不建议频繁使用 2. js 原型 原型链 访问对像的属性方法,不光会在对象上查找还会在…...
Invalid bean definition with name ‘employeeMapper‘ defined in file
参考以下博客: <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version> </dependency> 总结: 1. 拉取老项目的时候要特…...

悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版
金秋时节,天高气爽,正是出游的好时节。不论是家庭自驾游,还是朋友结伴出游,一款好看又好开的车绝对是提升旅行品质的重要因素。江铃集团新能源易至汽车EV3青春版,凭借其超高安全性、便捷操作性、卓越性能,成…...
测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时
一、测试TCP、UDP的带宽 作为服务器:iperf3 -s -i 1 (或者用CloudCampus软件,或者iperf magic) Wi-Fi 发送、接收吞吐率的测试_magic iperf-CSDN博客 车机作为iperf3服务器,电脑作为iperf3得客户端,分别…...
redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析
155属性 zlbytes zltail zllen entryX zlend 类型 uint32 t uint32 t uint16 t 列表节点 uint8 t 长度 4字节 4字节 2字节 不定 1字节 用途 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算 zlend 的位置时使用 记录压缩列表表尾节点距离压缩…...
IDE使用技巧与插件推荐
集成开发环境(IDE)是开发者日常工作中的重要工具,合理使用IDE和合适的插件,能大大提高开发效率。本文将分享常见IDE(如VS Code、IntelliJ IDEA等)的一些高效使用技巧,以及开发过程中常用的插件推…...
1020接口测试面试题随记
1.测试中对于上下游承接的业务是怎么处理的 针对上下游承接的业务,我会采取以下措施进行处理:首先,明确上下游系统的接口和依赖关系,确保理解数据流和业务逻辑的连接点。其次,进行接口测试,验证上下游系统…...

Zotero7最新(2024)翻译问题——配置 百度API翻译
在使用翻译之前,首先要确保已经安装了插件:Translate for Zotero 关于插件的安装可以参考这篇文章: Zotero7最新(2024)安装、配置步骤-CSDN博客 接下来进入正题。 当使用Zotero7对英文文献翻译时,可能会…...
python程序设计员—练习笔记
目录 基础处理 字符串列表字典运算符正则表达式re库requestsBeautiful Soupjieba库分词模式基于TF-IDF算法的关键词提取 基于TextRank算法的关键词提取pandas 打开有多个表的.xlsx文件 基础处理 字符串 str_ str_.lower()lower()函数:将字符中的大写字母转换成小…...

1.DBeaver连接hive数据库
1.hive开启远程服务,linux中直接输入:hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库,新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击,新建sql编辑器 11.执行sql 12.调整字…...
CODESYS随机动态图案验证码制作详细案例(三)
#使用CODESYS软件模仿网页端动态图案验证码的制作详细案例# 前言: 通过上篇图案验证码的实际测试,我们已经完成了该案例的制作,但是在项目应用中,我们想对该功能直接调用,就需要将具有一定功能的程序代码或可视化进行封装成库文件。我们熟知,CODESYS有丰富的库文件,有…...
NodeJS 使用百度翻译API
在大数据处理中,经常需要大批量地翻译短小的文字,使用在线翻译平台的API 调用能够大幅度提高效率。 最近尝试了一下。 第一步在百度翻译开放平台注册 百度翻译开放平台 (baidu.com) 申请APPID 和SECRET加密码 源代码(mjs) …...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...