Skip to content

gitlayzer/kube-loadbalancer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kubernetes LoadBalancer for Bare-Metal

这是一个专为裸金属(Bare-Metal)和私有云环境设计的 Kubernetes LoadBalancer 控制器。

这个项目受 MetalLB 的启发,但旨在提供一个更轻量、更易于理解和定制的实现。它作为一个独立的控制器,能够自动为 type: LoadBalancer 的 Service 分配 IP 地址,并将外部流量路由到你的集群内部。

✨ 核心功能

  • 自动 IP 分配:通过硬编码的 IP 地址池,为 LoadBalancer 类型的 Service 自动分配 IP。
  • Layer 2 (ARP) 网络通告:使用 ARP 协议将 Service 的 IP 地址广播到本地网络,确保外部流量能够正确路由到你的 Kubernetes 节点。
  • 轻量化设计:项目代码精简,逻辑清晰,非常适合作为学习 Kubernetes 控制器开发和网络编程的入门项目。
  • 跨平台构建:使用 Makefile 和多阶段 Dockerfile,可以轻松地在 macOS 等平台上为 linux/arm64 或 linux/amd64 架构构建应用。

🚀 快速开始

1. 克隆项目

git clone https://github.com/gitlayzer/kube-loadbalancer.git
cd kube-loadbalancer

2. 配置 IP 地址池

pkg/ipam/ipam.go 文件中,你可以找到并修改硬编码的 IP 地址池,以适应你的网络环境。

// pkg/ipam/ipam.go

// IP 地址管理器,使用一个 map 来模拟 IP 池
var ipPool = map[string]string{
    "192.168.1.240": "unused",
    "192.168.1.241": "unused",
    "192.168.1.242": "unused",
}

3. 构建和打包

使用 Makefile 和 Docker 来构建应用的二进制文件和 Docker 镜像。

# 直接构建当前架构的镜像的 v0.0.1 版本
make build-docker DOCKER_IMAGE_TAG=v0.0.1

# 构建其他架构的镜像自行修改 Dockerfile
# 构建镜像并指定 tag 可以直接修改 Makefile 中 DOCKER_IMAGE_TAG 的值
# 指定镜像仓库可以直接修改 Makefile 中 DOCKER_IMAGE_NAME 的值

4. 部署到 Kubernetes

将你的控制器部署到集群中。请确保你已经将 deployment.yaml 中的镜像名称替换为你构建的镜像。

kubectl apply -f deploy/

5. 验证

部署一个 LoadBalancer 类型的 Service,观察你的控制器是否能自动为其分配 IP 地址。

➜  kube-loadbalancer kubectl get pod,svc
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          55s

NAME                 TYPE           CLUSTER-IP        EXTERNAL-IP     PORT(S)        AGE
service/nginx        LoadBalancer   192.168.194.161   192.168.139.2   80:31216/TCP   55s

6. 请求验证

使用 curl 命令请求你的 Service,并确保请求成功。

➜  kube-loadbalancer curl -I http://192.168.139.2
HTTP/1.1 200 OK
Server: nginx/1.29.1
Date: Mon, 22 Sep 2025 02:58:57 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 13 Aug 2025 15:10:24 GMT
Connection: keep-alive
ETag: "689caae0-267"
Accept-Ranges: bytes

🛠️ 项目结构

这个项目遵循 Go 语言的通用项目结构,实现了清晰的职责分离。

kube-loadbalancer/
├── cmd/
│   └── main.go              # 程序入口
├── pkg/
│   ├── controller/          # 核心控制器逻辑
│   ├── ipam/                # IP 地址管理模块
│   └── network/             # 网络通告模块 (Layer 2)
├── go.mod
├── go.sum
└── Dockerfile

🤝 贡献与支持

这个项目还处于早期阶段,欢迎大家提出宝贵意见、提交 Bug 或贡献代码。你的反馈对我来说非常重要。

如果你对 Kubernetes 控制器开发或底层网络有兴趣,这个项目是很好的起点。欢迎 Fork 和 Star!

About

This is a very lightweight bare metal IP allocation tool similar to metallb/openelb

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors