k8s | 深入理解 MetalLB
官网:https://metallb.universe.tf/
开源地址:https://github.com/metallb/metallb
MetalLB 的主要工作是负责管理 Kubernetes 集群中的网络负载均衡。他是一个用于实现外部负载均衡的工具,可以将集群内部的服务暴露给外部网络,让外部用户可以方便地访问这些服务
出现的原因
k8s
的LoadBalancer
类型的Service
依赖于外部的云提供的Load Balancer
,当我们把k8s部署在裸机上面时,或者是测试环境时,需要简单的LoadBalancer
来验证工作,这个时候MetalLB
就是一个不错的选择
组件及原理
MetalLB分为两部分组成,分别是Controller和Speaker
- Controller:MetalLB的控制器,核心组件,负责监听Service和Endpoint的变化,根据需要通过IP池为Service分配外部ip地址
- Speaker:MetalLB 的发言者, 负责将负载均衡的请求信息发送给外部网络设备,比如路由器或者交换机,以及负责将外部请求转发到集群内部的 Pod
MetalLB 的工作过程:
- 创建 LoadBalancer 类型的 Service,指定 Service 的端口和目标 Pod。
- MetalLB Controller 监听到 Service 的创建,根据配置为该 Service 分配一个 虚拟IP。
- MetalLB Speaker 监听到 虚拟IP 的变化,将 虚拟IP 的信息通过 BGP 协议发送给外部网络设备。
- 外部网络设备接收到 虚拟IP 信息,将负载均衡请求转发到 MetalLB 虚拟IP 所在的 Kubernetes 节点。
- 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 模式需要更多的配置和管理,更加的复杂
评论区