目 录CONTENT

文章目录

k8s | 深入理解 MetalLB

如风
2023-07-17 / 0 评论 / 0 点赞 / 24 阅读 / 1,088 字

k8s | 深入理解 MetalLB

官网:https://metallb.universe.tf/

开源地址:https://github.com/metallb/metallb

​ MetalLB 的主要工作是负责管理 Kubernetes 集群中的网络负载均衡。他是一个用于实现外部负载均衡的工具,可以将集群内部的服务暴露给外部网络,让外部用户可以方便地访问这些服务

出现的原因

k8sLoadBalancer类型的Service依赖于外部的云提供的Load Balancer,当我们把k8s部署在裸机上面时,或者是测试环境时,需要简单的LoadBalancer来验证工作,这个时候MetalLB 就是一个不错的选择

组件及原理

MetalLB分为两部分组成,分别是Controller和Speaker

  1. Controller:MetalLB的控制器,核心组件,负责监听Service和Endpoint的变化,根据需要通过IP池为Service分配外部ip地址
  2. Speaker:MetalLB 的发言者, 负责将负载均衡的请求信息发送给外部网络设备,比如路由器或者交换机,以及负责将外部请求转发到集群内部的 Pod

MetalLB 的工作过程

  1. 创建 LoadBalancer 类型的 Service,指定 Service 的端口和目标 Pod。
  2. MetalLB Controller 监听到 Service 的创建,根据配置为该 Service 分配一个 虚拟IP。
  3. MetalLB Speaker 监听到 虚拟IP 的变化,将 虚拟IP 的信息通过 BGP 协议发送给外部网络设备。
  4. 外部网络设备接收到 虚拟IP 信息,将负载均衡请求转发到 MetalLB 虚拟IP 所在的 Kubernetes 节点。
  5. Kubernetes 节点接收到请求后,使用 Linux 的 LVS(Linux Virtual Server) 模块将请求转发到对应的 Pod 上,实现负载均衡。

工作模式

MetalLB 支持两种负载均衡模式:Layer2 模式和 BGP 模式

Layer2 模式

​ 可以将 MetalLB 的 Layer2 模式比作一个简单的广播员。在一个大型的办公楼中,有许多小组需要和外部交流,但是每个小组的人员分布在不同的楼层。这时候,为了将信息传达给每个小组,我们可以请一个广播员,通过喊话的方式将消息传递到每个楼层

​ MetalLB 会为 Service 随机分配一个未使用的外部 IP 地址,并通过 ARP(地址解析协议)机制,将该 IP 地址与 Service 的 MAC 地址绑定。当外部客户端请求该 IP 地址时,交换机会通过广播方式将请求传递到集群内的所有节点,然后 MetalLB 会将请求转发到相应的 Pod。

​ 优缺点:Layer2 模式相对简单,不需要额外的 BGP 配置,但是由于 Layer2 模式使用广播机制,当集群中有大量外部请求时,可能会导致网络的高负载和冗余传输,可能会影响网络性能

BGP 模式

​ 可以将 MetalLB 的 BGP 模式比作一个智能的邮递信息员。在一个大型公司中,有很多员工需要收发信息,但是每个员工的位置分布在不同的办公区。这时候,为了将信息准确地送到每个员工,我们可以请一个智能的邮递员,他会根据地址信息,将信息投递到每个员工的邮箱

​ MetalLB 会为 Service 分配一个未使用的外部 IP 地址,并通过 BGP 协议,将该 IP 地址与 Service 的 MAC 地址绑定,并向外部网络设备发送 BGP 更新通告。外部网络设备接收到 BGP 更新通告后,学习到新的 IP 地址和对应的 MAC 地址,从而将负载均衡请求转发到 MetalLB 虚拟IP 所在的 Kubernetes 节点。

​ 优缺点:BGP 模式使用 BGP 协议与外部网络设备交互,实现了高效的负载均衡和路由信息交换,但相较于 Layer2 模式,BGP 模式需要更多的配置和管理,更加的复杂

参考链接

0

评论区