一、Metallb简介

在本地安装的时候,不能直接安装Traefik,否则在将服务设置为LoadBalance后,服务不能正常启动。需要先安装一个负载均衡器,本文使用Metallb作为负载均衡器。MetalLB是使用标准路由协议的裸机Kubernetes集群的软负载均衡器。

Kubernetes没有为裸机群集提供网络负载均衡器(类型为LoadBalancer的服务)的实现,如果你的kubernetes集群没有在公有云的IaaS平台(GCP,AWS,Azure …)上运行,则LoadBalancers将在创建时无限期地保持“挂起”状态,也就是说只有公有云厂商自家的kubernetes支持LoadBalancer。

裸机群集运营商留下了两个较小的工具来将用户流量带入其集群,“NodePort”和“externalIPs”服务。这两种选择都对生产使用产生了重大影响,这使得裸露的金属集群成为Kubernetes生态系统中的二等公民。

而在云服务器比如阿里的ECS中并不需要单独配置,里面自带了云服务提供商提供的默认负载均衡器。

Metallb存在的意义

MetalLB旨在通过提供与标准网络设备集成的网络LB实现来纠正这种不平衡,以便裸机集群上的外部服务也“尽可能”地工作。即MetalLB能够帮助你在kubernetes中创建LoadBalancer类型的kubernetes服务。
**

Metallb基本原理

Metallb 会在 Kubernetes 内运行,监控服务对象的变化,一旦察觉有新的 LoadBalancer 服务运行,并且没有可申请的负载均衡器之后,就会完成两部分的工作:

  1. 地址分配:用户需要在配置中提供一个地址池,Metallb 将会在其中选取地址分配给服务。
  2. 地址广播:根据不同配置,Metallb 会以二层(ARP/NDP)或者 BGP 的方式进行地址的广播。

关于Metallb集群的负载均衡方案介绍:Bare-metal considerations

基本原理图

在云服务器中,云服务提供商会提供一个负载均衡器:
cloud_overview.jpg
但是在裸机部署时,并不存在这个负载均衡器:
baremetal_overview.jpg
而Metallb解决的就是这个问题,它虚拟出一个负载均衡器IP,并导向其他节点:
metallb.jpg
相关站点:

二、安装Metallb

首先创建一个命名空间:

  1. kubectl create ns metallb-system

然后通过远程的YAML创建服务:

  1. kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.4/manifests/metallb.yaml
  2. # On first install only

创建一个secret:

  1. kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"