依赖项目
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 结合使用以实现统一的域名路由。 *