MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议。

占用一个虚拟的 IP 地址,转发到对应的 ingress,而不占用宿主机的端口。

一、准备工作

  1. 开启 strictARP
1
kubectl edit configmap -n kube-system kube-proxy
1
2
ipvs:
strictARP: true

不确定自己是哪种模式就执行 kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode,看到 mode: "ipvs" 才需要改。

二、 Helm 安装 MetalLB 本体

  1. 添加官方 Helm 仓库后安装
1
2
3
4
5
6
7
helm repo add metallb https://metallb.github.io/metallb
helm repo update

helm install metallb metallb/metallb \
--namespace metallb-system \
--create-namespace \
--version 0.16.1 # 固定版本,复用你学的好习惯
  1. 验证
1
kubectl get pods -n metallb-system -w

三、配置 IP 地址池

  1. 编辑资源清单文件
1
vim /opt/selfhost/infra-deployment/metallb/metallb-config.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# metallb-config.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.10.60-192.168.10.70 # ← 改成你自己的空闲网段
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
  1. 创建资源
1
kubectl apply -f metallb-config.yaml

四、验证

  1. 随便起个服务,类型设成 LoadBalancer,看它能不能拿到 IP:
1
2
3
kubectl create deploy nginx --image=nginx
kubectl expose deploy nginx --port=80 --type=LoadBalancer
kubectl get svc nginx
  1. 清理测试的资源
1
kubectl delete deploy,svc nginx