tnblog
首页
视频
资源
登录

Kubernetes MetalLB LoadBalancer

8066人阅读 2022/9/1 14:06 总访问:3466986 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes MetalLB LoadBalancer

介绍


熟悉k8s的都知道,k8s的LoadBalancer类型的Service依赖于外部的云提供的Load Balancer。
当我们把k8s部署在裸机上面时,或者是测试环境时,需要简单的LoadBalancer来验证工作,开源的metallb就是一个不错的选择。

工作模式


Metallb支持两种工作模式,一种是Layer2模式。


这是我在实验环境下面常用的模式,只需要一段跟K8s管理网相同网段的地址即可。
Metallb在这种模式下,会从k8s节点中选一个Leader节点,在这个节点上面响应LB地址段的ARP请求,从而使上层路由把发往LB的流量都发到Leader节点。
缺点也很明显,所有对LB的请求都会发往Leader节点。如果当前Service下面的Pod分布在不同节点,那么这个流量还会从Leader发往相应的节点。
不过用在实验环境里这个模式真是太好用了,不需要路由器支持BGP。
另一种是BGP模式。


这种情况的话就需要路由器支持接收Metallb的BGP广播,从而把请求分布到正确的节点上。
跟L2模式的区别就是能够通过BGP协议正确分布流量了,不再需要一个Leader节点。
缺点就是需要上层路由器支持BGP。而且因为BGP单session的限制,如果Calico也是使用的BGP模式,就会有冲突从而导致metallb无法正常工作。

安装


安装metallb

  1. # 创建metallb
  2. kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.4/config/manifests/metallb-native.yaml


我这里已经安装完成了。


接着我们查看与我们主机之间相联的网络。
我这里是enth0,这台master主机的地址是:10.211.55.11


然后我们这里通过安装一个sipcalc小工具,来查看我们的网络段。

  1. # 先安装epel源.
  2. yum -y install epel-release
  3. yum -y install sipcalc
  4. # 查看网段
  5. sipcalc 10.211.55.11/24


我们只需要取靠后的二十个ip地址作为我们的LoadBalancer就可以了。

启动L2模式


我们通过定义IPAddressPool资源,来指定k8s分配段的IP。
(vim ippool.yaml)

  1. apiVersion: metallb.io/v1beta1
  2. kind: IPAddressPool
  3. metadata:
  4. name: production
  5. namespace: metallb-system
  6. spec:
  7. addresses:
  8. - 10.211.55.230-10.211.55.250


我们看到addresses接收的参数是一个集合,所以如果你嫌麻烦可以直接将IP大段赋值上去。(如下举例)

  1. spec:
  2. addresses:
  3. - 10.211.55.0/24
  4. - 10.211.55.230-10.211.55.250


然后我们通过L2Advertisement来创建我们的L2模式。
(vim l2.yaml)

  1. apiVersion: metallb.io/v1beta1
  2. kind: L2Advertisement
  3. metadata:
  4. name: l2
  5. namespace: metallb-system


最后通过Community资源类型开通vpn隧道可以使得集群外局域网中的网站可以访问。
(vim com.yaml)

  1. apiVersion: metallb.io/v1beta1
  2. kind: Community
  3. metadata:
  4. name: communities
  5. namespace: metallb-system
  6. spec:
  7. communities:
  8. - name: vpn-only
  9. value: 1234:1


部署L2模式。

  1. kubectl apply -f ippool.yaml
  2. kubectl apply -f l2.yaml
  3. kubectl apply -f com.yaml

测试

  1. kubectl run nginx --image=nginx --port=80
  2. # 创建服务
  3. kubectl expose pod nginx --port=80 --name=nginx --type=LoadBalancer
  4. # 查看pod
  5. kubectl get pod,svc


测试集群内部访问。


测试局域网内部的访问。

设置BGP


我们可以设置 BGP 的创建。
首先创建我们外部路由器或路由防火墙的地址池。
这里我们使用Juniper SSG5防火墙配置举例,ip为:10.211.55.210
接着我们配置lb的bgp配置清单

  1. vim prodbgppool.yaml
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. namespace: metallb-system
  5. name: config
  6. data:
  7. config: |
  8. peers:
  9. - peer-address: 10.211.55.254
  10. peer-asn: 64500
  11. my-asn: 64500
  12. address-pools:
  13. - name: default
  14. protocol: bgp
  15. addresses:
  16. - 10.211.55.11/29


然后我们设置Juniper SSG5 防火墙的配置

  1. firewall-> set vrouter trust-vr
  2. # 设置bgp 为64500与lb的配置保持一致
  3. firewall(trust-vr)-> set protocol bgp 64500
  4. # 设置两个work node的节点地址
  5. firewall(trust-vr)-> set neighbor 10.211.55.11 remote-as 64500 local-ip 10.211.55.254/24
  6. firewall(trust-vr)-> set neighbor 10.211.55.11 enable
  7. firewall(trust-vr)-> set neighbor 10.211.55.12 remote-as 64500 local-ip 10.211.55.254/24
  8. firewall(trust-vr)-> set neighbor 10.211.55.12 enable
  9. firewall(trust-vr)-> set interface ethernet0/6 protocol bgp


然后进行部署。

  1. kubectl apply -f prodbgppool.yaml


在防火墙上查看是否获取到路由。

  1. firewall-> get vrouter trust-vr protocol bgp rib
  2. i: IBGP route, e: EBGP route, >: best route, *: valid route
  3. Prefix Nexthop Wt Pref Med Orig AS-Path
  4. --------------------------------------------------------------------------------------
  5. Total ipv4 routes in rib-in: 4 (0 in flap-damping history)
  6. --------------------------------------------------------------------------------------
  7. >i 10.211.55.64/32 10.211.55.11 100 0 0 INC
  8. i 10.211.55.64/32 10.211.55.11 100 0 0 INC
  9. >i 10.211.55.65/32 10.211.55.12 100 0 0 INC
  10. i 10.211.55.65/32 10.211.55.12 100 0 0 INC
  11. Total no. of ipv4 entries shown: 4

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request["imgBase"]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///<summary> ///转全角的函数(SBCcase) ///</summary> ///<paramname="input">任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial("_分部页")第二种:@{ Html.RenderPartial("分部页");}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术