部署 MetalLB (Load Balance)
部署 MetalLB 到 Kubernetes(k8s)集群中用于提供 LoadBalancer 类型服务的 IP 地址分配,适用于裸金属(bare metal)环境。下面是一个标准的部署流程:
✅ 前提条件
- Kubernetes 集群已就绪(任意方式部署,如 kubeadm、k3s、RKE 等)。
- 网络插件已配置(如 Calico、Flannel,Cilium)。
- 集群节点位于同一局域网,并有一段可用的 IP 地址段。
🛠️ Step 1: 部署 MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
⚠️ 这是 native 模式,推荐使用(不再使用 v0.9 以前的
memberlist
模式,除非特殊场景)。
🛠️ Step 2: 配置 IP 地址池(Layer 2 模式)
默认地址池是 192.168.1.x/24
- 创建
IPAddressPool
和L2Advertisement
:
# metallb-config.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-address-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250 # <-- 修改为你自己的可用 IP 段
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-advertisement
namespace: metallb-system
- 应用配置:
kubectl apply -f metallb-config.yaml
✅ 验证部署
创建一个 LoadBalancer 类型的 Service:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
确认它获得了你定义的 IP 地址:
kubectl get svc
应显示类似:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.43.190.239 192.168.1.240 80:31234/TCP 10s
🧠 补充说明
项目 | 描述 |
---|---|
MetalLB 模式 | 支持 Layer2 和 BGP,推荐 Layer2(简单) |
地址池 IP 来源 | 必须是未被 DHCP 分配、节点可以直接访问的 IP |
命名空间 | MetalLB 所有资源在 metallb-system |
如果你使用 k3s | MetalLB 可以通过内建组件部署,需要特别注意 IPRange 配置 |
如需我帮你根据你的集群网络配置生成 metallb-config.yaml
,请提供:
- 节点所在网段(如
192.168.1.0/24
) - 可用 IP 范围(例如 DHCP 不会用到的部分)
是否需要我为你生成具体配置?