k8s部署MetalLB(新)
📌 MetalLB 介绍
MetalLB 是一个 Kubernetes 的 LoadBalancer 解决方案,专门用于裸机(Bare Metal)集群。由于 Kubernetes 本身在裸机环境中没有内置的负载均衡(不像云环境有 ELB、ALB),MetalLB 通过 BGP 或 ARP 提供 LoadBalancer 类型的服务支持,使得服务可以获得外部可访问的 IP 地址。
🛠 1. MetalLB 安装
1.1 部署 MetalLB
MetalLB 可以通过 kubectl 直接安装:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
说明:
metallb-native模式是较新的metallb运行方式,相比metallb经典模式(metallb.yaml),它使用了 Kubernetes 自身的控制器管理机制。- MetalLB 运行在
metallb-system命名空间。
1.2 确保 MetalLB Pod 运行正常
kubectl get pods -n metallb-system
示例输出:
NAME READY STATUS RESTARTS AGE
controller-5c5f5b9f77-2kz5n 1/1 Running 0 2m
speaker-9zl7j 1/1 Running 0 2m
controller:管理 MetalLB 的控制器。speaker:在每个节点上运行,负责广播负载均衡 IP。
📝 2. 配置 MetalLB IP 池
2.1 创建 IPAddressPool
MetalLB 需要一个 IP 池(地址范围),用于分配 LoadBalancer IP。
📌 示例:创建 ip-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.100-192.168.1.110 #- 192.168.1.100/32 # 仅使用 192.168.1.100 这个 IP
应用该配置:
kubectl apply -f ip-pool.yaml
注意:
addresses定义了一段可以分配的 IP 地址范围,需确保它在你的网络中可用。- 你可以调整 IP 范围以适应你的网络。
⚡ 3. 创建 L2Advertisement(Layer 2 模式)
如果你使用的是 L2(ARP 广播)模式,还需要创建 L2Advertisement 资源。
📌 示例:创建 l2-advertisement.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: my-l2-advertisement
namespace: metallb-system
应用该配置:
kubectl apply -f l2-advertisement.yaml
🌍 4. 测试 MetalLB
4.1 部署一个 LoadBalancer Service
📌 示例:创建 nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- port: 80
targetPort: 80
应用该配置:
kubectl apply -f nginx-service.yaml
4.2 检查 LoadBalancer IP
kubectl get svc
示例输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.96.123.45 192.168.1.100 80:31376/TCP 2m
EXTERNAL-IP为192.168.1.100,表示 MetalLB 正常分配了 IP。
你现在可以在 局域网(LAN) 中访问 http://192.168.1.100 看到 Nginx 页面。
🔗 5. MetalLB 模式对比
| 模式 | 说明 | 适用场景 |
|---|---|---|
| L2 模式(ARP/NDP 广播) | 通过 ARP 或 NDP 让局域网设备知道 LoadBalancer IP |
适用于 简单网络,推荐 |
| BGP 模式(边界网关协议) | 让 Kubernetes 节点与物理路由器对等连接,实现外网负载均衡 | 适用于 复杂网络(如 ISP、数据中心) |
🛠 6. 删除 MetalLB
如果需要删除 MetalLB:
kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
kubectl delete namespace metallb-system
🚀 总结
- MetalLB 适用于裸机 Kubernetes 集群,提供 LoadBalancer IP。
- 安装 MetalLB:应用官方 YAML 文件。
- 配置 IP 池:定义可分配的 IP 范围。
- 使用 L2/BGP 模式:常见场景推荐 L2 模式。
- 测试 LoadBalancer:创建 Service 并检查
EXTERNAL-IP。

浙公网安备 33010602011771号