Panduan Lengkap Install MetalLB di Kubernetes (VPS/Bare Metal) dengan IP Publik

MetalLB adalah Load Balancer berbasis software untuk Kubernetes yang digunakan di lingkungan bare metal atau VPS. Berbeda dengan cloud provider seperti AWS, GCP, atau Azure yang menyediakan LoadBalancer secara otomatis, MetalLB memberikan kemampuan serupa di lingkungan on-premise atau VPS.
Dengan MetalLB, kamu bisa memberikan akses IP publik langsung ke service Kubernetes dengan tipe LoadBalancer
. Ini sangat berguna untuk deploy aplikasi production seperti website, API, hingga layanan internal.
🚀 Manfaat MetalLB
- 🌐 Expose service Kubernetes ke IP publik.
- 🛡️ Tidak perlu beli alat hardware load balancer.
- 🏋️ Hemat biaya untuk deploy di VPS atau bare metal.
- 🌟 Mendukung High Availability dengan pengaturan IP failover.
📁 Struktur Folder MetalLB
MetalLB/
├── ip-pool.yaml
├── metallb-native.yaml
└── namespace.yaml
🔧 Isi File YAML
📂 namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
📂 metallb-native.yaml
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
name: metallb
namespace: metallb-system
📂 ip-pool.yaml
✅ Contoh jika hanya punya 1 IP:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: public-pool
namespace: metallb-system
spec:
addresses:
- 103.100.62.161/32
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
spec:
ipAddressPools:
- public-pool
✅ Contoh jika punya 2 IP:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: public-pool
namespace: metallb-system
spec:
addresses:
- 103.100.62.161-103.100.62.162
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
spec:
ipAddressPools:
- public-pool
✅ Contoh jika punya banyak IP (range):
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: public-pool
namespace: metallb-system
spec:
addresses:
- 103.100.62.160-103.100.62.170
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
spec:
ipAddressPools:
- public-pool
🚀 Catatan: Ganti IP sesuai IP publik milik VPS atau server kamu.
🚀 Cara Install MetalLB
1. Buat Namespace
kubectl apply -f MetalLB/namespace.yaml
2. Install MetalLB Controller dan CRD
kubectl apply -f https://github.com/metallb/metallb/releases/latest/download/metallb-native.yaml
Atau gunakan file lokal jika sudah disiapkan:
kubectl apply -f MetalLB/metallb-native.yaml
3. Deploy IP Pool dan Advertisement
kubectl apply -f MetalLB/ip-pool.yaml
🔍 Verifikasi Installasi
📊 Cek Pod MetalLB:
kubectl get pod -n metallb-system
Hasilnya harus seperti:
NAME READY STATUS RESTARTS AGE
controller-xxxx 1/1 Running 0 xxm
speaker-xxxx 1/1 Running 0 xxm
📊 Cek IP Pool:
kubectl get ippools -n metallb-system
📊 Cek L2Advertisement:
kubectl get l2advertisements -n metallb-system
🔧 Testing dengan Service LoadBalancer
Contoh buat service test:
apiVersion: v1
kind: Service
metadata:
name: nginx-test
spec:
selector:
app: nginx-test
ports:
- port: 80
targetPort: 80
type: LoadBalancer
Lalu cek:
kubectl get svc
Akan muncul External-IP dari range MetalLB.
💡 Troubleshooting MetalLB
- 🛑 IP tidak muncul di External-IP:
- Pastikan Pod
speaker
dancontroller
Running. - Cek firewall VPS, pastikan port layer 2 dibuka (jika pakai L2Advertisement).
- Pastikan Pod
- 🚧 Tidak bisa diakses dari luar:
- Pastikan rentang IP di
ip-pool.yaml
memang dimiliki VPS kamu. - Cek apakah ada IP conflict.
- Pastikan rentang IP di
🌟 Kesimpulan
MetalLB adalah solusi open-source yang powerful untuk membuat LoadBalancer di Kubernetes pada lingkungan bare metal dan VPS.
🚀 Dengan MetalLB, kamu mendapatkan:
- 🌐 Load Balancer tanpa cloud provider.
- 🔒 IP publik langsung untuk akses aplikasi.
- 🚧 Konfigurasi fleksibel dan sederhana.
- 🌟 Skalabilitas untuk kebutuhan production.