【k8s】kube-proxy 工作模式

news/2024/11/20 0:27:10/

文章目录

  • 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上,以维护会话状态或连接状态。

不同点:

  1. 粒度:SessionAffinity是基于会话信息进行分配的,而IP哈希是基于客户端的IP地址进行分配的。SessionAffinity更关注于维护特定会话的状态,而IP哈希更关注于维护与特定客户端的连接会话。

  2. 功能:SessionAffinity可以确保来自同一客户端的请求都发送到同一个后端Pod上,即使在负载均衡过程中发生变化。这对于需要保持会话状态的应用程序很有用。而IP哈希则通过哈希算法将相同IP地址的请求路由到同一个后端Pod上,有助于维护与特定客户端的连接状态,但它无法处理客户端IP地址的变化。

  3. 灵活性:SessionAffinity比IP哈希更加灵活,因为它可以基于请求中的任意会话信息进行路由。您可以选择使用CookieHTTP头部或任何其他会话标识符来实现SessionAffinity。而IP哈希则仅依赖于客户端的IP地址进行路由选择。

  4. 适用场景: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具有以下优势:

  1. 更快:系统可处理的请求量更高,性能更优,能够更好地处理高负载环境下的流量。
  2. 更灵活:可以使用多种负载均衡算法(包括Round Robin、Least Connection、Source Hash等),具有更好的扩展性和适应性。
  3. 更可靠:更可靠的连接状态检查和更高效的流量控制。
  4. 更安全:提供了更多的安全机制,例如集群中的计数器机制、防止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支持多种负载均衡算法,从而满足不同场景下的负载均衡策略。包括以下常见的负载均衡算法:

  1. RR(Round Robin):轮询法,平均分配请求到后端节点。

  2. LC(Least Connection):最少连接法,将请求发送到当前连接数最少的节点。

  3. DH(Destination Hashing):根据虚拟服务地址和端口,将请求路由到一组特定的后端节点。特别适合一些需要保持会话一致性的应用场景,例如Web应用中需要将同一个用户的请求路由到同一个后端节点以保持会话状态。

  4. SH(Source Hashing):根据客户端IP地址进行哈希计算,将同一客户端的请求路由到同一个后端节点。

总之,IPVS模式提供了一种高效、可扩展的负载均衡方案,能够满足K8s集群中高并发、高流量等复杂场景下的需求,并且在性能、安全、适应性等方面都具备优秀的表现。


http://www.ppmy.cn/news/1112842.html

相关文章

uni-app监听页面滚动

在uni-app中可以通过监听页面滚动事件来实现滚动效果或响应滚动事件 在需要监听滚动的页面或组件中&#xff0c;添加一个scroll元素&#xff0c;用于容纳内容并实现滚动效果。 <template><view class"container"><scroll-view scroll-y scroll"…

深入了解==和equals的区别

1. 浅说和equals的区别 &#xff08;1&#xff09;比较的类型 不一样 可以比较基础数据类型和引用类型&#xff0c;比较基础数据类型的数据时比较的是值&#xff0c;比较引用对象时比较的是引用的地址。 equals比较引用类型&#xff0c;默认比较的是两个引用对象的引用地址&a…

python:优化一EXCEL统计用类封装一下

# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 311 # Datetime : 2023/9/17 5:40 # User : geovindu # Product : PyCharm # Proj…

redis info 详解(InsCode AI 创作助手)

redis info 详解 选项说明&#xff1a; Redis的INFO命令返回了关于Redis服务器的各种信息和统计数据&#xff0c;这些信息可以帮助您监控和管理Redis实例。INFO命令的输出是一个包含多行文本的字符串&#xff0c;包括了各种不同的信息类别。以下是一些常见的INFO命令输出中包…

[运维|数据库] PostgreSQL数据库对MySQL的 READS SQL DATA 修饰符处理

在 PostgreSQL 中&#xff0c;访问权限通常是通过数据库角色和表级别的权限进行管理&#xff0c;而不需要类似 MySQL 中的 READS SQL DATA 修饰符。 要在 PostgreSQL 中管理数据库对象的访问权限&#xff0c;您可以使用以下 SQL 命令&#xff1a; GRANT&#xff1a;授予用户或…

CS5817规格书|CS5817芯片参数|多功能便携式显示器方案芯片规格

CS5817支持最高4K 60Hz是集睿致远&#xff08;ASL&#xff09; 新推出的多功能显示控制器芯片&#xff0c;CS5817产品可应用于便携显示器、电竞显示器、桌面显示器、一体式台式机和嵌入式显示系统。 Type-C/DP/HDMI2.0输入转LVDS/eDP/VBO 芯片, 高度集成了多种输入输出接口, 并…

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录 Part.I IntroductionChap.I 云耀云服务器 L 实例简介Chap.II 参与活动步骤 Part.II 配置Chap.I 初步配置Chap.II 配置安全组 Part.III 简单使用Chap.I VScode 远程连接华为云Chap.II 简单绘图 Reference Part.I Introduction 本篇博文是为了参与华为“【有奖征文】华…

PyTorch深度学习(二)【反向传播、用pytorch实现线性回归】

反向传播 弄一个简单点的&#xff0c;两层的神经网络: 加入激活函数&#xff1a;&#xff08;不加激活函数的神经网络就是一个线性回归模型&#xff09; 用到的损失函数&#xff1a; pytorch里面的数据存储&#xff1a;tensor&#xff0c;它可以存标量、向量、矩阵、高维度数据…