【k8s】kube-proxy 工作模式
文章目录
- Userspace模式:
- iptables模式:
- 负载均衡(Load Balancing) LB
- 轮询(Round Robin):
- SessionAffinity:
- 最少连接(Least Connection):
- IP哈希(IP Hash):
- SessionAffinity和IP哈希的异同
- 自定义负载均衡器:
- IPVS模式:
- IPVS架构
- IPVS和iptables的区别
- 如何启用IPVS模式
- 支持的负载均衡算法
Kube-proxy是Kubernetes集群中的一个关键组件,它负责实现服务发现和负载均衡。Kube-proxy可以以三种不同的模式工作,分别是:userspace模式、iptables模式和IPVS模式。
Userspace模式:
在Userspace模式下,Kube-proxy通过在主机上创建一个userspace进程来实现服务代理。该进程拦截所有服务流量,并根据服务配置信息将流量转发到后端Pod。这种模式下,kube-proxy会动态更新iptables规则,将服务的虚拟IP地址映射到后端Pod的IP地址。但是,由于每个数据包都要经过userspace进程,因此性能相对较低。
iptables模式:
在iptables模式下,Kube-proxy使用iptables规则实现服务代理。当创建或删除服务时,kube-proxy会动态更新主机上的iptables规则,以将服务的虚拟IP地址映射到后端Pod的IP地址。这种模式下,数据包直接通过内核的iptables规则进行转发,因此性能较高。
缺点
不能提供灵活的LB策略,后端不可用时也不能重试
负载均衡(Load Balancing) LB
Kubernetes(K8s)中的负载均衡(Load Balancing)策略是用于分配网络流量给后端Pod的方法。K8s提供了几种不同的负载均衡策略,可以根据应用程序的需求进行选择。
以下是K8s中常见的负载均衡策略:
轮询(Round Robin):
默认的负载均衡策略,请求按顺序依次分发给可用的后端Pod。每个请求都会按照顺序分配到下一个可用的Pod上。
SessionAffinity:
也称为会话粘滞(Sticky Sessions),该策略根据客户端的会话信息将请求路由到相同的后端Pod上。
这样可以确保来自同一客户端的请求都发送到同一个后端Pod,维护会话的状态。
最少连接(Least Connection):
该策略会将请求发送给当前连接数量最少的后端Pod。
这样可以使负载均衡更加均匀,并避免某些Pod过载的问题。
IP哈希(IP Hash):
根据客户端的IP地址将请求路由到后端Pod。
通过哈希算法,相同IP地址的请求将始终被路由到同一个后端Pod上。
这有助于保持与特定客户端的连接会话。
SessionAffinity和IP哈希的异同
相同点:
- 目标:SessionAffinity和IP哈希都旨在实现将来自同一客户端的请求路由到相同的后端Pod上,以维护会话状态或连接状态。
不同点:
-
粒度:SessionAffinity是基于会话信息进行分配的,而IP哈希是基于客户端的IP地址进行分配的。SessionAffinity更关注于维护特定会话的状态,而IP哈希更关注于维护与特定客户端的连接会话。
-
功能:SessionAffinity可以确保来自同一客户端的请求都发送到同一个后端Pod上,即使在负载均衡过程中发生变化。这对于需要保持会话状态的应用程序很有用。而IP哈希则通过哈希算法将相同IP地址的请求路由到同一个后端Pod上,有助于维护与特定客户端的连接状态,但它无法处理客户端IP地址的变化。
-
灵活性:SessionAffinity比IP哈希更加灵活,因为它可以基于请求中的任意会话信息进行路由。您可以选择使用
Cookie
、HTTP头部
或任何其他会话标识符来实现SessionAffinity
。而IP哈希则仅依赖于客户端的IP地址进行路由选择。 -
适用场景:SessionAffinity适用于需要维护会话状态的应用程序,例如在线购物网站的购物车或用户登录状态。IP哈希适用于需要保持与特定客户端的连接会话状态的应用程序,例如长连接应用或持久化会话。
自定义负载均衡器:
除了Kubernetes提供的默认策略,也可以使用外部负载均衡器来替代或补充K8s内置的负载均衡策略。这样可以利用更丰富的负载均衡功能和灵活性。
IPVS模式:
IP Virtual Server
(IPVS)模式是一种高级的负载均衡模式,使用Linux内核
的IPVS功能来实现服务代理。
在这种模式下,kube-proxy
维护一个IPVS表,根据服务配置信息将流量转发到后端Pod。
相比于iptables模式,IPVS模式在性能和可扩展性方面更为优秀。
一般来说,对于大规模的生产环境,IPVS模式是一个更好的选择,因为它具有更好的性能和可扩展性。
IPVS实现了一种基于内核态的L4(传输层)
负载均衡方案,能够承载大量并发请求,并分配到不同的后端Pod上。
以下是IPVS模式的详细介绍:
IPVS架构
IPVS通过将流量路由到虚拟服务
和后端节点(Pod)
之间的网络代理
,从而实现负载均衡的目的。在K8s中,它是通过kube-proxy代理
实现的。
在IPVS架构中,以下组件完成了流量的路由和转发:
- VIP(Virtual IP Address):虚拟服务的IP地址。
- Real Server:后端节点的IP地址。
- Service:定义了一个VIP和端口对应关系的抽象概念。Service对象会自动创建一个VIP并暴露给客户端。
- Endpoint:定义了一个Service所依赖的真实后端节点的Pod信息。
IPVS和iptables的区别
与iptables模式相比,IPVS具有以下优势:
- 更快:系统可处理的请求量更高,性能更优,能够更好地处理高负载环境下的流量。
- 更灵活:可以使用多种负载均衡算法(包括Round Robin、Least Connection、Source Hash等),具有更好的扩展性和适应性。
- 更可靠:更可靠的连接状态检查和更高效的流量控制。
- 更安全:提供了更多的安全机制,例如集群中的计数器机制、防止DDoS攻击等。
如何启用IPVS模式
要启用IPVS模式,需要进行以下几个步骤:
1)在kubelet的启动命令中使用–kube-proxy-mode=ipvs参数。
kubelet --kube-proxy-mode=ipvs ...
2)在所有节点上安装ipvsadm工具。
sudo apt-get updatesudo apt-get install ipvsadm
3)创建kube-proxy的ConfigMap保存IPVS代理的配置。
4)使用kubectl replace命令替换kube-proxy的DaemonsSet对象,以便使用新创建的ConfigMap作为配置文件。
kubectl replace --force -f kube-proxy.yaml
5)重启kube-proxy daemon进程,以便应用新的配置。
支持的负载均衡算法
IPVS支持多种负载均衡算法,从而满足不同场景下的负载均衡策略。包括以下常见的负载均衡算法:
-
RR(Round Robin)
:轮询法,平均分配请求到后端节点。 -
LC(Least Connection)
:最少连接法,将请求发送到当前连接数最少的节点。 -
DH(Destination Hashing)
:根据虚拟服务地址和端口,将请求路由到一组特定的后端节点。特别适合一些需要保持会话一致性的应用场景,例如Web应用中需要将同一个用户的请求路由到同一个后端节点以保持会话状态。 -
SH(Source Hashing)
:根据客户端IP地址进行哈希计算,将同一客户端的请求路由到同一个后端节点。
总之,IPVS模式提供了一种高效、可扩展的负载均衡方案,能够满足K8s集群中高并发、高流量等复杂场景下的需求,并且在性能、安全、适应性等方面都具备优秀的表现。
相关文章:
【k8s】kube-proxy 工作模式
文章目录 Userspace模式:iptables模式:负载均衡(Load Balancing) LB轮询(Round Robin):SessionAffinity:最少连接(Least Connection):IP哈希&…...

Linux:Centos9 《下载-安装》
下载 Download (centos.org)https://www.centos.org/download/ 安装 选择第一个安装centos 根据自己需要的语言环境选择即可 这里选择要安装的磁盘,然后点击完成 这里选择第一个就行带有图形化 然后我们去对这两个进行设置就行 这两个地方自己进行设置就行 耐心等…...

数字化管理平台建设实践
在勘察设计行业,各企业加速推进数字化转型。通过管理要素数字化,不断优化内部组织运营效率;通过生产手段数字化、技术产品数字化,提升服务质量,改善客户体验;通过数字化营销,精准对接市场需求&a…...
Linux命令(80)之sort
linux命令之sort 1.sort介绍 linux命令sort用于将文本文件内容以行为单位加以排序;sort命令默认按每行的第一个字符排序,根据首字母的ASCII码值进行升序(从小到大排列)。 sort的默认分隔符是空白(空格和tab),多少空白都算一个分隔符。 2.…...
[k8s] kubectl port-forward 和kubectl expose的区别
kubectl port-forward 和 kubectl expose 是 Kubernetes 命令行工具 kubectl 提供的两种不同方式来公开服务。 kubectl port-forward kubectl port-forward 命令用于在本地主机和集群内部的 Pod 之间建立一个临时的端口转发通道。 该命令将本地机器上的一个端口绑定到集群内部…...

vscode如何设置文件折叠
随着项目的不断迭代开发,复杂度越来越高,配置文件越来越多,导致vscode左侧文件列表展示非常不直观,幸好可以通过文件折叠来简化展示效果,把同类相关的文件折叠在一块展示,方便查看配置文件。配置好后的效果…...

Linux centos7 bash编程训练
训练编写一段代码,打印输出100之内的明7暗7,同时要求每5个数字打印在一行。 此项训练主要是考察for循环的使用,及条件判断表达式的设置和不同写法的应用。 常用的for循环有四种写法(如打印1-100的整数): …...
k8s集群换ip
1.把/etc/kubernetes/*.conf中所有的旧ip换成新ip cd /etc/kubernetes/ find . -type f | xargs sed -i "s/$oldip/$newip/"2.替换$HOME/.kube/config文件中的旧ip为新ip(注意sudo的话需要改root下的) cd $HOME/.kube/ find . -type f | xargs sed -i "s/$old…...
选择HAL库还是标准库
选择HAL库还是标准库呢?HAL库是趋势,标准库不再升级了,转HAL库是大势所趋。HAL库有优点,也有自身的不足,建议初学者还是从标准库入手。 标准库是单片机开发的基本库,它把“用寄存器实现的功能”写成一个函…...

计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别
文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…...

Mapbox gl HTML经纬度点渲染,动态轨迹播放,自定义图形以及轨迹上显示箭头方向
Mapbox gl HTML经纬度点渲染,动态轨迹播放,自定义图形以及轨迹上显示箭头方向 1. 效果图2. 源码2.1 line.html2.2line_arrow.html 参考 今天要排查个问题,需要显示多个经纬度点连接成线段的方向,于是尝试下展示。 1. mapbox渲染经…...

kubernetes部署(kubeadmin)
文章目录 1.环境准备2. 安装dokcer3.部署cri-docker4.各个节点安装kubeadm等5.整合kubelet和cri-dockerd配置cri-dockerd配置kubelet 6.初始化集群 1.环境准备 环境和软件版本 OS : ubuntu 20.04 container runtime: docker CE 20.10.22 kubernetes 1.24.17 CRI:cr…...

Leetcode168. Excel表列名称
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题解: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码如下: class Solution {public String convertToTitle(int columnNumber) {StringBuild…...

碎片笔记 | 大模型攻防简报
前言:与传统的AI攻防(后门攻击、对抗样本、投毒攻击等)不同,如今的大模型攻防涉及以下多个方面的内容: 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的安全问题2.1 模型窃取攻击2.2 数据窃取攻击…...

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码
目录 1 基本子图绘制示例 2 子图网格布局 3 调整子图的尺寸 4 多行多列的子图布局 5 子图之间的共享轴 6 绘制多个子图类型 7 实战: 绘制一个大图,里面包含6个不同类别的子图,不均匀布局。 绘制子图(subplots)…...
【Android常见问题(六)】- UX标注色值带有百分比的使用方法
这里写自定义目录标题 透明度和不透明度的转换对应色值百分比透明度标注 透明度和不透明度的转换 需要不透明度值的,可以自己算:透明度值 不透明度值 100% 如果UI给的视觉稿标注是:颜色#FFFFFF,透明度40% 。那你的计算方式应该…...

Prometheus+Grafana可视化监控【ElasticSearch状态】
文章目录 一、安装Docker二、安装ElasticSearch(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装elasticsearch_exporter七、Grafana添加ElasticSearch监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docke…...
Java手写堆排序(Heap Sort)和案例
Java手写堆排序(Heap Sort) 1. 思维导图 下面是使用Mermaid代码绘制的思维导图,用于解释堆排序算法的实现思路原理: #mermaid-svg-cFIgsLSm5LOBm5Gl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size…...

Linux设备驱动模型之字符设备
Linux设备驱动模型之字符设备 前面我们有介绍到Linux的设备树,这一节我们来介绍一下字符设备驱动。字符设备是在IO传输过程中以字符为单位进行传输的设备,而字符设备驱动则是一段可以驱动字符设备驱动的代码,当前Linux中,字符设备…...

Kafka3.0.0版本——消费者(自动提交 offset)
目录 一、自动提交offset的相关参数二、消费者(自动提交 offset)代码示例 一、自动提交offset的相关参数 官网文档 参数解释 参数描述enable.auto.commi默认值为 true,消费者会自动周期性地向服务器提交偏移量。auto.commit.interval.ms如果…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...