k8s部署MetalLB(新)

📌 MetalLB 介绍

MetalLB 是一个 Kubernetes 的 LoadBalancer 解决方案,专门用于裸机(Bare Metal)集群。由于 Kubernetes 本身在裸机环境中没有内置的负载均衡(不像云环境有 ELB、ALB),MetalLB 通过 BGPARP 提供 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-IP192.168.1.100,表示 MetalLB 正常分配了 IP。

你现在可以在 局域网(LAN) 中访问 http://192.168.1.100 看到 Nginx 页面。


🔗 5. MetalLB 模式对比

模式 说明 适用场景
L2 模式(ARP/NDP 广播) 通过 ARPNDP 让局域网设备知道 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
posted @ 2025-03-07 20:28  蒲公英PGY  阅读(423)  评论(0)    收藏  举报