cloud
cloud-native
云原生与 kubernetes
安装 Kubernetes
部署 MetalLB (Load Balance)

部署 MetalLB (Load Balance)

部署 MetalLB 到 Kubernetes(k8s)集群中用于提供 LoadBalancer 类型服务的 IP 地址分配,适用于裸金属(bare metal)环境。下面是一个标准的部署流程:


✅ 前提条件

  1. Kubernetes 集群已就绪(任意方式部署,如 kubeadm、k3s、RKE 等)。
  2. 网络插件已配置(如 Calico、Flannel,Cilium)。
  3. 集群节点位于同一局域网,并有一段可用的 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

  1. 创建 IPAddressPoolL2Advertisement
# 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
  1. 应用配置:
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
如果你使用 k3sMetalLB 可以通过内建组件部署,需要特别注意 IPRange 配置

如需我帮你根据你的集群网络配置生成 metallb-config.yaml,请提供:

  • 节点所在网段(如 192.168.1.0/24
  • 可用 IP 范围(例如 DHCP 不会用到的部分)

是否需要我为你生成具体配置?