Loading Search...
Crater
依赖项目

MetalLB 部署指南

MetalLB 使用 Layer 2 模式为裸金属 Kubernetes 集群提供内部服务暴露,适用于私有大学网络。

概述

MetalLB 是一个为裸金属 Kubernetes 集群实现的负载均衡器。在 Crater 中,它通过 Layer 2 (L2) 模式 实现 内部服务暴露,适用于节点位于同一子网并能够直接通信的环境,例如校园内网。

Crater 集群部署在 私有大学网络 中,所有节点和用户接入点共享一个公共的 Layer 2 域。因此,MetalLB 配置为从保留的 内部 IP 地址池 分配 IP,使得 LoadBalancer 类型的服务可以在不依赖外部云提供商的情况下暴露。


关键特性

  • L2 (ARP/NDP) 模式 — 适用于内网环境,简单且有效。
  • 为 Kubernetes 服务分配 静态内部 IP
  • 与 Prometheus、Grafana 和 Harbor 等服务集成。

安装

通过官方 Helm chart 安装 MetalLB。

1. 添加 Helm 仓库

helm repo add metallb https://metallb.github.io/metallb
helm repo update

2. 安装 MetalLB

helm upgrade --install metallb metallb/metallb -n metallb-system --version v0.14.8 --create-namespace

配置

1. 创建 IPAddressPool

配置 MetalLB 可以为服务分配的可用内网 IP 池:

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: intranet-pool
  namespace: metallb-system
spec:
  addresses:
    - 192.168.100.240-192.168.100.250  # 请替换为你的校园子网范围

2. 配置 L2 广播

为 IP 池启用 L2 广播(ARP/NDP):

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: intranet-l2
  namespace: metallb-system
spec:
  ipAddressPools:
    - intranet-pool

使用

安装完成后,LoadBalancer 类型的服务将从配置的池中分配 IP。

示例:

apiVersion: v1
kind: Service
metadata:
  name: crater-web
  namespace: crater-system
spec:
  type: LoadBalancer
  selector:
    app: crater-ui
  ports:
    - port: 80
      targetPort: 8080

MetalLB 会自动从定义的池中分配一个 IP(例如 192.168.100.241)。

你可以使用以下命令查看已分配的 IP:

kubectl get services -A -o wide

最佳实践

在 DHCP 服务器中保留地址池,或手动避免 IP 冲突。

确保所有集群节点都在同一个 L2 广播域中。

避免将服务暴露到公共互联网 —— 此处 MetalLB 仅在校园网络内使用。

  • Crater 与 IngressClass 结合使用以实现统一的域名路由。 *

参考资料

Edit on GitHub