当前位置: 首页 > news >正文

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb

参考 : https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q

自建的Kubernetes集群,默认情况下是不支持负载均衡的。当需要提供服务的外部访问时,可使用 Ingress、NodePort等方式。他们都存在一些问题 ,如Ingress不支持TCP协议,而NodePort则是使用随机端口
MetalLB 提供基于网络设备的负载均衡功能来解决这些问题

部署要求

MetalLB部署需要以下环境才能运行:

运行Kubernetes 1.13.0或更高版本的群集,尚不具有网络负载平衡功能;
一些用于MetalLB分配的IPv4地址;
如果使用BGP模式,需要准备一台或多台支持BGP的路由器;
如果使用layer 2模式时,集群节点间必须允许7946端口的访问 ,用户代理之间的通信;

集群的网络类型需要支持MetalLB,详见下表

网络类型兼容性
AntreaYes
CalicoMostly
CanalYes
CiliumYes
FlannelYes
Kube-ovnYes
Kube-routerMostly
Weave NetMostly

工作原理

Metallb包含两个组件,Controller和Speaker,Controller为Deployment部署方式,而Speaker则采用Daemonset方式部署到集群内部各个Node节点。

具体的工作原理如下图所示,Controller负责监听Service变化,当Service配置为LoadBalancer模式时,从IP池分配给到相应的IP地址并对该IP的生命周期进行管理。Speaker则会依据选择的协议进行相应的广播或应答,实现IP地址的通信响应。当业务流量通过TCP/UDP协议到达指定的Node时,由Node上面运行的Kube-Proxy组件对流量进行处理,并分发到对应服务的Pod上面。

在这里插入图片描述

MetalLB支持两种模式,一种是Layer2模式,一种是BGP模式

Layer2模式

在2层模式下,Metallb会在Node节点中选出一台作为Leader,与服务IP相关的所有流量都会流向该节点。在该节点上, kube-proxy将接收到的流量传播到对应服务的Pod。当leader节点出现故障时,会由另一个节点接管。从这个角度来看,2层模式更像是高可用,而不是负载均衡,因为同时只能在一个节点负责接收数据

在二层模式中会存在以下两种局限性:单节点瓶颈和故障转移慢的情况

由于Layer 2 模式会使用单个选举出来的Leader来接收服务IP的所有流量,这就意味着服务的入口带宽被限制为单个节点的带宽,单节点的流量处理能力将成为整个集群的接收外部流量的瓶颈。

在故障转移方面,目前的机制是MetalLB通过发送2层数据包来通知各个节点,并重新选举Leader,这通常能在几秒内完成。但如果是计划外的事故导致的,此时在有故障的客户端刷新其缓存条目之前,将无法访问服务IP

BGP模式

BGP模式是真正的负载均衡,该模式需要路由器支持BGP协议 ,群集中的每个节点会与网络路由器建议基于BGP的对等会话,并使用该会话来通告负载均衡的IP。MetalLB发布的路由彼此等效,这意味着路由器将使用所有的目标节点,并在它们之间进行负载平衡。数据包到达节点后,kube-proxy负责流量路由的最后一跳,将数据包发送到对应服务的Pod。

负载平衡的方式取决于您特定的路由器型号和配置,常见的有基于数据包哈希对每个连接进行均衡,这意味着单个TCP或UDP会话的所有数据包都将定向到群集中的单个计算机。

BGP模式也存在着自身的局限性,该模式通过对数据包头中的某些字段进行哈希处理,并将该哈希值用作后端数组的索引,将给定的数据包分配给特定的下一跳。但路由器中使用的哈希通常不稳定,因此只要后端节点数量发生变化时,现有连接就会被随机地重新哈希,这意味着大多数现有连接将被转发到另一后端,而该后端并不清楚原有的连接状态。为了减少这种麻烦,建议使用更加稳定的BGP算法,如:ECMP散列算法。

安装

k8s版本:我这里是k8s1.29.3
Metallb版本:v0.13.4

启用kube-proxy的ARP模式

如果集群是使用IPVS模式下kube-proxy,则从kubernetes v.1.14.2开始,必须启用ARP模式。

修改kube-proxy配置文件
kubectl edit configmap -n kube-system kube-proxy

...
#设置strictARP值为true
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:strictARP: true

重启kube-proxy

kubectl -n kube-system rollout restart daemonset kube-proxy

安装MetalLB相关组件

下载部署yaml文件

wget https://raw.githubusercontent.com/metallb/metallb/v0.13.4/config/manifests/metallb-native.yaml

下载镜像

docker pull quay.io/metallb/controller:v0.13.4
docker pull quay.io/metallb/speaker:v0.13.4

打tag为自己的镜像

registry.cn-beijing.aliyuncs.com/wuxingge123/metallb-controller:v0.13.4
registry.cn-beijing.aliyuncs.com/wuxingge123/metallb-speaker:v0.13.4

配置模式

Layer2模式配置

创建IPAddressPool,并指定用于分配的IP池。

vim IPAddressPool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:name: ip-poolnamespace: metallb-system
spec:addresses:- 10.0.0.101-10.0.0.150

创建广播声明,此处未指定IP池,则默认会使用所有IP池地址

vim L2Advertisement.yaml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:name: l2advernamespace: metallb-system

BGP模式配置

对于具有一个BGP路由器和一个IP地址范围的基本配置,您需要4条信息:

MetalLB应该连接的路由器IP地址,
路由器的AS号,
MetalLB应该使用的AS号,
以CIDR前缀表示的IP地址范围。

示例:现在分配给MetalLB的AS编号为64500和192.168.10.0/24的IP地址池,并将其连接到AS编号为64501的地址为10.0.0.1的路由器,则配置如下所示

创建BGPPeer

apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:name: samplenamespace: metallb-system
spec:myASN: 64500peerASN: 64501peerAddress: 10.0.0.1

配置IP地址池

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:name: first-poolnamespace: metallb-system
spec:addresses:- 192.168.10.0/24

创建广播声明

apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:name: bgpadvernamespace: metallb-system

功能验证

本实例使用Layer2配置来测试

vim myapp.yaml

apiVersion: v1
kind: Service
metadata:name: myapp-svc
spec:selector:app: myappports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deploymentlabels:app: myapp
spec:replicas: 2selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: nginximage: nginx:1.19.4ports:- containerPort: 80

查看创建的SVC状态,已获取到IP

kubectl get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        66d
myapp-svc    LoadBalancer   10.110.204.123   10.0.0.101    80:32339/TCP   38m

访问
http://10.0.0.101/

相关文章:

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 &#xff1a; https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群&#xff0c;默认情况下是不支持负载均衡的。当需要提供服务的外部访问时&#xff0c;可使用 Ingress、NodePort等方式。他们都存在一些问题 …...

Python面试宝典:Python中与设计模式相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十二章:代码设计和设计模式:第二节:设计模式】 第二十二章:代码设计和设计模式第二节:设计模式创建型模式结构型模式行为型模式python中与设计模式相关的面试笔试题面试题1面试题…...

以sqlilabs靶场为例,讲解SQL注入攻击原理【18-24关】

【less-18】 打开时&#xff0c;获取了自己的IP地址。&#xff0c;通过分析源码知道&#xff0c;会将用户的user-agent作为参数记录到数据库中。 提交的是信息有user-Agent、IP、uname信息。 此时可以借助Burp Suite 工具&#xff0c;修改user_agent&#xff0c;实现sql注入。…...

【已有项目版】uniapp项目发版pda -- Android Studio

必备资料清单&#xff1a; 构建完成的app项目 在HBuilderX开发的uniapp项目 .keystore文件 文章目录 1. 安装Android Studio&#xff1a;https://developer.android.google.cn/studio?hlzh-cn2. 安装Android 离线SDK&#xff1a;https://nativesupport.dcloud.net.cn/AppDocs…...

三维重建,谁才是顶流?

3DGS技术是近年来计算机视觉领域最具突破性的研究成果之一。它不仅在学术界引起了广泛关注&#xff0c;成为计算机视觉、SLAM等领域的研究热点&#xff0c;而且每天都有大量基于Gaussian Splatting的新研究问世。此外&#xff0c;3DGS技术在商业应用方面也取得了显著进展&#…...

s32k314【入门新手篇】-开发环境安装【ds32开发平台】

软件包下载 登录nxp官网下载&#xff1a;https://www.nxp.com/ 然后输入关键字&#xff1a;S32 查看 下载安装包 以上三步请先注册好并登录你的个人账号 下载完之后如下&#xff1a; 软件安装 eb安装并激活【试用版】 激活 2 安装ds 弹出什么就安装什么就好了。 …...

DiffBIR论文阅读笔记

这篇是董超老师通讯作者的一篇盲图像修复的论文&#xff0c;目前好像没看到发表在哪个会议期刊&#xff0c;应该是还在投&#xff0c;这个是arxiv版本&#xff0c;代码倒是开源了。本文所指的BIR并不是一个single模型对任何未知图像degradation都能处理&#xff0c;而是用同一个…...

基于STM32的位置速度环PID控制伺服电机转动位置及程序说明

PID控制原理 PID控制原理是一种广泛应用于工业自动化和其他领域的控制算法。PID控制器的名字来源于其三个主要组成部分&#xff1a;比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;和微分&#xff08;Derivative&#xff09;。PID控制器实现…...

操作失败——后端

控制台观察&#xff0c;页面发送的保存菜品的请求 返回的response显示&#xff1a; ---------- 我开始查看明明感觉都挺正常&#xff0c;没啥错误&#xff0c;就是查不出来。结果后面电脑关机重启后&#xff0c;隔一天看&#xff0c;就突然可以了。我觉着可能是浏览器的缓存没…...

基于SSM的“学校访客登记系统”的设计与实现(源码+数据库+文档)

基于SSM的“学校访客登记系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台架构图 系统首页 校园公告信息界面 留言板管理界面 家庭来…...

linux配置IP、子网掩码、网关

linux虚拟机配置IP、子网掩码、网关 本方法适用于 Ubuntu 18.04 之后的版本。 例1&#xff1a; 配置信息&#xff1a; IP:10.100.100.23 子网掩码:255.255.255.240 网关:10.100.100.56 1、打开网络配置文件 01-network-manager-all.yaml sudo vi /etc/netplan/01-network-…...

Java 垃圾回收

文章目录 1 Java 垃圾回收1.1 JVM1.2 Java 对象生命周期 2 如何判断一个对象可被回收2.1 引用计数算法2.2 可达性分析算法 3 垃圾回收过程3.1 总体过程3.2 为什么要进行世代垃圾回收&#xff1f;3.3 分代垃圾回收过程 在 C 和 C 中&#xff0c;许多对象要求程序员声明他们后为其…...

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政按摩线下预约等多场景应用支持H5小程序APP 软件架构 前端&#xff1a;Uniapp-vue2.0 后端&#xff1a;Thinkphp6 前后端分离 前端支持&#xff1a; H5小程序双端APP&#xff08;安卓苹果&#xff09; 安装教程 【商业…...

书生·浦语大模型全链路开源体系-笔记作业2

全部写成了shell脚本&#xff0c;可以一键执行。 笔记&#xff1a; 1. 环境安装(InternStudio开发机) # 1. 创建conda环境 studio-conda -o internlm-base -t demo # 2. 激活conda环境 conda activate demo # 3. 安装额外的依赖 pip install huggingface-hub0.17.3 pip inst…...

手把手教你发布你的第一个npm插件包

在开源的世界里&#xff0c;npm&#xff08;Node Package Manager&#xff09;不仅是JavaScript生态中不可或缺的一部分&#xff0c;也是全球最大的软件注册表&#xff0c;它使得分享和复用代码变得异常简单。如果你有一个很棒的想法或者实用的功能想要封装成一个npm包供他人使…...

Docker-compose 编排lnmp(dockerfile) 完成Wordpress

一、部署 Nginx 镜像 1. 建立工作目录 mkdir /opt/lnmp/nginx -pcd /opt/lnmp/nginx#上传 nginx 安装包 nginx-1.12.0.tar.gz#上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz mkdir /opt/lnmp/nginx/htmltar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /opt/lnmp/nginx/html…...

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…...

PPT设置为本框的默认格式以及固定文本框

调整文本框固定位置 双击文本框之后勾选如下三个位置 设置文本框为默认 在调整好文本框的基本性质后&#xff0c;设置为默认即可...

计算机基础(5)——进制与进制转换

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…...

发现情绪背后的真实心理需求,选择适合你的情绪调节方式

一、教程描述 心态对人的生活质量以及身体健康等多方面&#xff0c;都会产生非常重要的影响&#xff0c;受到不良情绪的影响&#xff0c;人的心态也会发生一定的变化。对于处于不良情绪状态的人来讲&#xff0c;应该重视学会调整自己的情绪。在心理学上&#xff0c;人的每种情…...

代理记账公司的五大问题及其解决方案

代理记账公司是现代企业管理中不可或缺的一部分&#xff0c;它为企业的日常运营提供了专业、高效的服务&#xff0c;随着行业的发展和竞争的加剧&#xff0c;代理记账公司的面临的问题也日益突出&#xff0c;这些问题主要表现在以下几个方面&#xff1a; 业务流程不规范 许多代…...

TH方程学习 (7)

一、内容介绍 TH存在广泛应用&#xff0c;在下面案例中&#xff0c;将介绍几种相对运动模型&#xff0c;斜滑接近模型&#xff0c;本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线&#xf…...

2024最新python入门教程|python安装|pycharm安装

前言&#xff1a;在安装PyCharm之前&#xff0c;首先需要明确PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司开发。PyCharm旨在通过提供智能代码补全、语法高亮、代码检查、快速导航和重构等丰富的编码辅助工具&#xff0c…...

docker架构

docker架构 Docker daemon 是Docker最核心的后台进程&#xff0c;它负责响应来自Dockerclient的请求&#xff0c;然后将这此请求翻译成系统调用完成容器管理操作。该进程会在后台后启动一个APIServer&#xff0c;负责接收由 Dockerclient发送的请求&#xff1b;接收到的请求将通…...

使用Java进行网络采集:代理IP与参数传递详解

在Java编程语言中&#xff0c;参数传递机制是一个常见的讨论话题。理解这一点对于编写高效且无错误的Java代码至关重要。本文将探讨Java的参数传递机制&#xff0c;解析其究竟是“按引用传递”还是“按值传递”&#xff0c;并结合网络爬虫技术的实例&#xff0c;展示如何在实际…...

多功能光时域反射仪的工作原理

6426A-2101多功能光时域反射仪是新一代掌上型智能化光纤通信测量仪器&#xff0c;具有强大的功能和广泛的应用领域。它能够显示光纤及光缆的损耗分布曲线图&#xff0c;测量光纤及光缆的多种关键参数&#xff0c;包括长度、损耗、接续质量等&#xff0c;为光纤通信系统的工程施…...

目标检测数据集 - 海洋垃圾检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;海洋垃圾检测数据集&#xff0c;真实拍摄海洋海底场景高质量垃圾检测图片数据&#xff0c;涉及场景丰富&#xff0c;比如海底塑料垃圾数据、海底铁制品罐状垃圾数据、海底纸张垃圾数据、海洋生物和海底垃圾同框数据、海底探索仪器和海底垃圾同框数据、海…...

如何进行Java程序的性能优化

在软件开发中&#xff0c;性能优化是一个至关重要的环节&#xff0c;它直接影响到用户体验、系统稳定性和资源消耗。对于Java程序而言&#xff0c;性能优化更是不可或缺的一部分。下面&#xff0c;我将从技术难点、面试官关注点、回答吸引力和代码举例四个方面&#xff0c;详细…...

Echarts柱状图数据太多,自定义长度之后,自适应浏览器缩放

不知道是不是最优解&#xff0c;但是当前解决了我遇到的问题&#xff0c;如有更好的方法&#xff0c;希望看到这篇文章的同学可以不吝指导一番&#xff0c;非常感谢 1、问题描述&#xff1a; 因Ecahrts柱状图数据有时多有时少&#xff0c;所以在数据达到一定程度之后&#xff…...

小白级教程—安装Ubuntu 20.04 LTS服务器

下载 本教程将使用20.04版进行教学 由于官方速度可能有点慢&#xff0c;可以下方的使用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 点击20.24版本 选择 ubuntu-20.04.6-live-server-amd64.iso 新建虚拟机 下载好后 我们使用 VMware 打开它 这里选…...

如何做行业平台网站/关键词优化百家号

勉强实现了把 function MyPromise(callback){this.status"pending", // 标记状态this.valueundefined; // resolve函数接受的参数this.reasonundefined; // reject 函数this.onFulfilledCallbacksnew Set(); // 成功回调 函数集合this.onRejectedCallbacksnew …...

学做网站论坛vip号码/优化关键词排名哪家好

Chapter3 套接字编程简介套接字地址结构IPV4套接字地址结构&#xff0c;也称为”网际套接字地址结构“.struct sockaddr_in定义在头文件<netinet/in.h>中&#xff0c;具体如下&#xff1a;typedef uint32_t in_addr_t; struct in_addr {in_addr_t s_addr; …...

唯美图片wordpress主题/网站制作企业有哪些

IOS之RSA加密解密与后台之间的双向加密详解 序言 因为项目中需要用到RSA加密&#xff0c;刚开始也是有点乱&#xff0c;这两天也整理的差不多了&#xff0c;希望能帮到大家。 这次先上代码&#xff0c;我想大部分人肯定是着急解决问题&#xff0c;所以不要废话太多。 IOS端 …...

大朗做网站在/微信客户管理

话说是自从JDK5后&#xff0c;而这就可以自动进行类型转换了。 当然&#xff0c;区别还是有的&#xff0c;就是对象和“非对象”什么的。可是&#xff0c;今天进行一个测试&#xff0c;出了一个小问题&#xff0c;现将代码贴下&#xff1a; 代码0&#xff1a;先来一个正常点的&…...

外包网站建设公司/软文撰写公司

2019独角兽企业重金招聘Python工程师标准>>> 1、首先查看系统中原有的java版本&#xff1a;java -version;然后用再用&#xff1a;rpm -qa | grep java 命令查看具体的信息&#xff0c;最后用&#xff1a;rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64卸…...

新华美玉官方网站在线做/长尾关键词挖掘词

Java编程语言的类型分为两类&#xff1a;基本类型和引用类型&#xff0c;相应的有两种数据值&#xff0c;即基本值和引用值。基本类型有布尔型和数值型。数值型有整型byte、short、int、long和char&#xff0c;以及浮点型float和double。本文来简单介绍Java的基本类型及基本值。…...