LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录

一.purelb简介

1.简介

2.purelb的layer2工作模式特点

二.layer2的配置演示

1.首先准备ipvs和arp配置环境

2.purelb部署开始

(1)下载purelb-complete.yaml文件并应用

(2)查看该有的资源是否创建完成并运行

(3)配置地址池

3.purelb测试

(1)创建deploy和service在主机进行访问测试

(2)浏览器测试

4.卸载purelb


一.purelb简介

1.简介

PureLB是一种负载均衡器,它的工作原理主要是用于在网络中分发和管理传入的请求,以便将请求有效地分配给后端服务。

2.purelb的layer2工作模式特点

purelb会在k8s集群受管节点上新建一个kube-lb0的虚拟网卡,这样我们可以看到集群的loadbalancervip,那么他也可以使用任意路由协议去实现ECMP(允许在具有相同cost开销的多条路径之间进行负载均衡和流量分发)。

同时purelb的layer2模式根据单个vip来选择节点,将多个vip分散到不同节点,尽量将流量均衡分开,避免某些节点负载失衡发生故障。

二.layer2的配置演示

1.首先准备ipvs和arp配置环境

(1)开启ipvs并设置严格策略,将mode改为ipvs,将strictarp改为true

[root@k8s-master service]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited

 

(2)修改完后保存并验证

[root@k8s-master service]# kubectl rollout restart ds kube-proxy -n kube-system 
daemonset.apps/kube-proxy restarted
[root@k8s-master service]# kubectl get configmap -n kube-system kube-proxy -o yaml | grep strictARPstrictARP: true
[root@k8s-master service]# kubectl get configmap -n kube-system kube-proxy -o yaml | grep modemode: "ipvs"

(3)到这里我们就可以在受管节点(node)上看到新建了kube-lb0虚拟网卡

7: kube-lb0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether 12:00:b5:78:88:25 brd ff:ff:ff:ff:ff:ffinet6 fe80::1000:b5ff:fe78:8825/64 scope link valid_lft forever preferred_lft forever

2.purelb部署开始

(1)下载purelb-complete.yaml文件并应用

链接:百度网盘 请输入提取码 提取码:epbx

文件中crd问题导致第一次会失败,应用两次后才能成功

[root@k8s-master service]# wget https://gitlab.com/api/v4/projects/purelb%2Fpurelb/packages/generic/manifest/0.0.1/purelb-complete.yaml
#内部不需要有更改
[root@k8s-master service]# kubectl apply -f purelb-complete.yaml 
namespace/purelb created
customresourcedefinition.apiextensions.k8s.io/lbnodeagents.purelb.io created
customresourcedefinition.apiextensions.k8s.io/servicegroups.purelb.io created
serviceaccount/allocator created
serviceaccount/lbnodeagent created
role.rbac.authorization.k8s.io/pod-lister created
clusterrole.rbac.authorization.k8s.io/purelb:allocator created
clusterrole.rbac.authorization.k8s.io/purelb:lbnodeagent created
rolebinding.rbac.authorization.k8s.io/pod-lister created
clusterrolebinding.rbac.authorization.k8s.io/purelb:allocator created
clusterrolebinding.rbac.authorization.k8s.io/purelb:lbnodeagent created
deployment.apps/allocator created
daemonset.apps/lbnodeagent created
error: resource mapping not found for name: "default" namespace: "purelb" from "purelb-complete.yaml": no matches for kind "LBNodeAgent" in version "purelb.io/v1"
ensure CRDs are installed first
[root@k8s-master service]# kubectl apply -f purelb-complete.yaml 
namespace/purelb unchanged   #创建了一个purelb的名称空间
customresourcedefinition.apiextensions.k8s.io/lbnodeagents.purelb.io configured
customresourcedefinition.apiextensions.k8s.io/servicegroups.purelb.io configured
serviceaccount/allocator unchanged
serviceaccount/lbnodeagent unchanged
role.rbac.authorization.k8s.io/pod-lister unchanged
clusterrole.rbac.authorization.k8s.io/purelb:allocator unchanged
clusterrole.rbac.authorization.k8s.io/purelb:lbnodeagent unchanged
rolebinding.rbac.authorization.k8s.io/pod-lister unchanged
clusterrolebinding.rbac.authorization.k8s.io/purelb:allocator unchanged
clusterrolebinding.rbac.authorization.k8s.io/purelb:lbnodeagent unchanged
deployment.apps/allocator unchanged
daemonset.apps/lbnodeagent unchanged
lbnodeagent.purelb.io/default created

(2)查看该有的资源是否创建完成并运行

[root@k8s-master service]# kubectl get deployments.apps,ds -n purelb 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/allocator   1/1     1            1           2m6s
​
NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/lbnodeagent   2         2         2       2            2           kubernetes.io/os=linux   2m6s
​
[root@k8s-master service]# kubectl get crd | grep purelb
lbnodeagents.purelb.io                                2023-12-04T08:18:07Z
servicegroups.purelb.io                               2023-12-04T08:18:07Z
​
[root@k8s-master service]# kubectl api-resources | grep purelb.io   #这要查看版本,后面创建地址时要用到
lbnodeagents                      lbna,lbnas   purelb.io/v1                           true         LBNodeAgent
servicegroups                     sg,sgs       purelb.io/v1                           true         ServiceGroup

(3)配置地址池

这里我们使用192.168.2.11/24-192.168.2.19/24中间的地址

[root@k8s-master service]# cat pure-ip-pool.yaml 
apiVersion: purelb.io/v1   #刚才查到的版本
kind: ServiceGroup   #资源类型为ServiceGroup
metadata:name: my-purelb-ip-pool   #这里指定的名称,在后面我们创建service要制定这个资源名称namespace: purelb
spec:local:  #本地配置v4pool:   #ipv4地址池subnet: "192.168.2.0/24"   #指定子网范围,写和主机一个网段但没有使用的地址pool: "192.168.2.11-192.168.2.19"   #指定地址范围aggregation: /32
​
[root@k8s-master service]# kubectl apply -f pure-ip-pool.yaml 
servicegroup.purelb.io/my-purelb-ip-pool created
[root@k8s-master service]# kubectl get sg -n purelb -o wide
NAME                AGE
my-purelb-ip-pool   22s
[root@k8s-master service]# kubectl describe sg my-purelb-ip-pool -n purelb
Name:         my-purelb-ip-pool
Namespace:    purelb
Labels:       <none>
Annotations:  <none>
API Version:  purelb.io/v1
Kind:         ServiceGroup
Metadata:Creation Timestamp:  2023-12-04T08:29:55ZGeneration:          1Resource Version:    2676UID:                 6b564a29-2c6d-4a26-b5df-05aa253595f1
Spec:Local:v4pool:Aggregation:  /32Pool:         192.168.2.11-192.168.2.19Subnet:       192.168.2.0/24
Events:Type    Reason  Age   From              Message----    ------  ----  ----              -------Normal  Parsed  54s   purelb-allocator  ServiceGroup parsed successfully

3.purelb测试

(1)创建deploy和service在主机进行访问测试

在创建service时的注意点比较多,如下

[root@k8s-master service]# vim service2.yaml
​
[root@k8s-master service]# cat service2.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:name: my-nginxname: my-nginxnamespace: myns
spec:replicas: 3selector:matchLabels:name: my-nginx-deploytemplate:metadata:labels:name: my-nginx-deployspec:containers:- name: my-nginx-podimage: nginxports:- containerPort: 80
​
---
​
apiVersion: v1
kind: Service
metadata:name: my-nginx-servicenamespace: mynsannotations:   #像openelb一样,要添加注解信息,指定我们创建的地址池purelb.io/service-group: my-purelb-ip-pool
spec:allocateLoadBalancerNodePorts: false  #这个选项指定是否为服务分配负载均衡器的节点端口。如果设置为false,则不会自动分配节点端口,而是由用户手动指定。默认情况下,该选项为true,表示自动分配节点端口。externalTrafficPolicy: Cluster#这个选项指定了服务的外部流量策略。Cluster表示将外部流量分发到集群内的所有节点。其他可选值还有Local和Local,用于指定将外部流量分发到本地节点或者使用本地节点优先。internalTrafficPolicy: Cluster#这个选项指定了服务的内部流量策略。Cluster表示将内部流量限制在集群内,不会流出集群。其他可选值还有Local,表示只将内部流量限制在本地节点。ports:- port: 80protocol: TCPtargetPort: 80selector:name: my-nginx-deploytype: LoadBalancer   #指定type为负载均衡类型
​
[root@k8s-master service]# kubectl apply -f service2.yaml 
deployment.apps/my-nginx unchanged
service/my-nginx-service created
[root@k8s-master service]# kubectl get service -n myns
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)   AGE
my-nginx-service   LoadBalancer   10.105.214.92   192.168.2.11   80/TCP    12s
[root@k8s-master service]# kubectl get pods -n myns
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-5d67c8f488-9lxdm   1/1     Running   0          73s
my-nginx-5d67c8f488-mxksb   1/1     Running   0          73s
my-nginx-5d67c8f488-nr6pb   1/1     Running   0          73s
​
[root@k8s-master service]# kubectl exec -it my-nginx-5d67c8f488-9lxdm -n myns -- /bin/sh -c "echo pod1 > /usr/share/nginx/html/index.html"
[root@k8s-master service]# kubectl exec -it my-nginx-5d67c8f488-mxksb -n myns -- /bin/sh -c "echo pod2 > /usr/share/nginx/html/index.html"
[root@k8s-master service]# kubectl exec -it my-nginx-5d67c8f488-nr6pb -n myns -- /bin/sh -c "echo pod3 > /usr/share/nginx/html/index.html"
[root@k8s-master service]# curl 192.168.2.11   #负载均衡实现
pod3
[root@k8s-master service]# curl 192.168.2.11
pod2
[root@k8s-master service]# curl 192.168.2.11
pod1
[root@k8s-master service]# curl 192.168.2.11
pod3
[root@k8s-master service]# curl 192.168.2.11
pod2
[root@k8s-master service]# curl 192.168.2.11
pod1
[root@k8s-master service]# curl 192.168.2.11
pod3
[root@k8s-master service]# curl 192.168.2.11
pod2
[root@k8s-master service]# curl 192.168.2.11
pod1

(2)浏览器测试

 

4.卸载purelb

采用delete -f即可卸载

[root@k8s-master service]# kubectl delete -f service2.yaml
[root@k8s-master service]# kubectl delete -f pure-ip-pool.yaml 
[root@k8s-master service]# kubectl delete -f purelb-complete.yaml 

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

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

相关文章

GCN,GraphSAGE 到底在训练什么呢?

根据DGL 来做的&#xff0c;按照DGL 实现来讲述 1. GCN Cora 训练代码&#xff1a; import osos.environ["DGLBACKEND"] "pytorch" import dgl import dgl.data import torch import torch.nn as nn import torch.nn.functional as F from dgl.nn.pytorc…

Linux系统安装Python3环境

1、默认情况下&#xff0c;Linux会自带安装Python&#xff0c;可以运行python --version命令查看&#xff0c;如图&#xff1a; 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了&#xff08;CtrlD退出python命令窗口&#xff09;。 2…

数据结构——二叉树(相关术语、性质、遍历过程)

遍历操作 二叉树的层次遍历-CSDN博客 二叉树的基本操作-CSDN博客 二叉树的先序遍历非递归实现-CSDN博客 后序遍历的非递归方式实现-CSDN博客 二叉树&#xff1a;已知先序中序求后序或者其他&#xff08;秒解&#xff09;-CSDN博客 因为之前发过一遍&#xff0c;我就不复制…

MES物料的动态批次管理漫谈

在制造企业中&#xff0c;原辅材料占产品制造总成本基本在60%以上&#xff0c;特殊材料加工企业可能达到80%以上&#xff0c;按“2/8管理原则”管理好物料就基本做好制造企业的成本管理&#xff0c;这也许是很多企业向“数字化转型”的一个主要原因&#xff0c;希望借助数字信息…

智能指针与动态内存

动态内存 new placement new 是 C 中的一种内存分配方式&#xff0c;它允许在给定的内存地址上构造对象&#xff0c;而不是在默认的堆上分配新的内存。这对于某些特殊的内存管理场景非常有用&#xff0c;例如在特定的内存池中分配对象。 C11 引入了 "new auto" 语法…

LiveGBS流媒体平台GB/T28181功能-概览中负载信息直播、回放、播放、录像、H265、级联查看负载会话列表

LiveGBS常见问题-概览中负载信息具体表示什么直播、回放、播放、录像、H265、级联等 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#x…

4.grid_sample理解与使用

pytorch中的grid_sample 文章目录 pytorch中的grid_samplegrid_samplegrid_sample函数原型实例 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; grid_sample 直译为网格采样&#xff0c;给定一个mask patch&#xff0c;根据在目标图像上的…

Http和WebSocket

客户端发送一次http请求&#xff0c;服务器返回一次http响应。 问题&#xff1a;如何在客户端没有发送请求的情况下&#xff0c;返回服务端的响应&#xff0c;网页可以得服务器数据&#xff1f; 1&#xff1a;http定时轮询 客户端定时发送http请求&#xff0c;eg&#…

2023经典软件测试面试题

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计…

AI浪潮下,非科班出身还有机会入行程序开发领域么?

前言 随着人工智能技术的快速发展和广泛应用&#xff0c;程序开发领域正迎来前所未有的挑战和机遇。但是对于非科班出身的个人而言&#xff0c;是否还有机会进入这个充满竞争的行业&#xff0c;成为一名程序员&#xff1f;那么本文就来聊聊AI浪潮下&#xff0c;分析当前程序员就…

整数和浮点数在内存中的存储

文章目录 每日一言整数在内存中的存储方式浮点数在内存中的存储结语 每日一言 You just can’t beat the person who never gives up. 你无法打败那位永不放弃的人。 整数在内存中的存储方式 整数在内存中的存储方式通常采用二进制形式&#xff0c;即将整数的数值转化为二进制…

ubuntu16.04升级openssl

Ubuntu16.04 默认带的openssl版本为1.0.2 查看&#xff1a;openssl version 1.下载openssl wget https://www.openssl.org/source/openssl-1.1.1.tar.gz 编译安装 tar xvf openssl-1.1.1.tar.gz cd openssl-1.1.1 ./config make sudo make install sudo ldconfig 删除旧版本 su…

XXL-Job详解(五):动态添加、启动任务

目录 前言XXL-Job API接口添加任务API动态添加任务动态启动任务 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xff09;&#xff1a;组件架构 XXL-Job详解&#xff08;二&#xff09;&#xff1a;安装部署 X…

沐风老师3DMAX随机变换工具RandomTransform插件使用方法详解

3DMAX随机变换工具RandomTransform插件使用方法 3dMax随机变换工具RandomTransform&#xff0c;是一款用MAXScript脚本语言开发的3dsMax小工具&#xff0c;可以随机变换选中的单个或多个对象的位置、角度及大小。 在3dMax中“变换”工具是最常用的工具&#xff08;移动、旋转和…

vue3+ts项目中导入组件时报错has no default export

下面这句会报错has no default export import Button from "./components/Button.vue";使用vetur这个插件&#xff08;我目前的版本是0.37.3&#xff0c;应该是这个版本之前的都不支持&#xff09;。但是依旧报错&#xff0c;所以我选择禁用了&#xff0c;就不报错了…

selenium自动化测试实战案例

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

8.4 Windows驱动开发:文件微过滤驱动入门

MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的&#xff0c;传统文件过滤驱动相对来说较为复杂&#xff0c;且接口不清晰并不符合快速开发的需求&#xff0c;为了解决复杂的开发问题&#xff0c;微过滤驱动就此诞生&#xff0c;微过滤驱动在编写时更简单&#xff0c;…

全网最牛最“刑”的Fiddler移动端抓包

本篇文章&#xff0c;博主想使用通俗易懂的话语&#xff0c;让大家明白以下内容&#xff1a; 什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包 抓包 包 (Packet) 是TCP/IP协议通信传输中的数据单位&#xff0c;一般也称“数据包”。 我们平常…

无人机智慧工地:助力工地管理的未来之选

在现代工地管理中&#xff0c;无人机凭借其小巧、轻便和多角度拍摄等特点得到广泛应用&#xff0c;尤其在智慧工地的现场管理中发挥着重要作用。 一、无人机代替人工巡检省时省力 以往&#xff0c;施工现场检查主要依赖人工巡检方式&#xff0c;需要较长时间。而现在&#xff…

链表【2】

文章目录 &#x1f95d;24. 两两交换链表中的节点&#x1f951;题目&#x1f33d;算法原理&#x1f96c;代码实现 &#x1f34e;143. 重排链表&#x1f352;题目&#x1f345;算法原理&#x1f353;代码实现 &#x1f95d;24. 两两交换链表中的节点 &#x1f951;题目 题目链接…