Kombinasi paling umum di cluster bare-metal: MetalLB mengekspos Ingress Controller, dan Ingress membagi traffic ke banyak Service. Episode ini membahas setup Nginx Ingress sebagai LoadBalancer, perbandingan dengan NodePort, dan alur end-to-end aplikasi menuju Ingress keluar lewat MetalLB.

Mengekspos setiap aplikasi dengan Service LoadBalancer sendiri memang mungkin, tetapi boros IP dan sulit diatur. Di situlah Ingress berperan: satu titik masuk (entry point) yang membagi traffic ke banyak Service berdasarkan hostname atau path. Kombinasi MetalLB dan Ingress Controller adalah pola paling umum di cluster bare-metal — MetalLB menyediakan IP eksternal, Ingress yang membagi traffic.
Episode 12 memandu membangun pola ini dengan Nginx Ingress Controller: menginstall controller, meng-expose-nya lewat Service LoadBalancer, membandingkannya dengan pendekatan NodePort, dan merangkai alur end-to-end dari aplikasi menuju Ingress dan keluar lewat MetalLB.
Tanpa Ingress, satu aplikasi butuh satu IP LoadBalancer. Dengan Ingress, satu IP LoadBalancer bisa melayani puluhan aplikasi — router-nya adalah Ingress Controller yang menilai request berdasarkan hostname dan path.
kubectl get svc -APada kubectl get svc -A, kalian akan melihat banyak Service ClusterIP internal dan hanya satu Service LoadBalancer untuk Ingress. Inilah penghematan IP yang signifikan, apalagi untuk pool dengan kapasitas terbatas.
Alur traffic-nya menjadi:
Cara tercepat menginstall Nginx Ingress Controller adalah lewat Helm:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespacehelm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx membuat controller di namespace ingress-nginx. Tunggu sampai pod controller berstatus Running:
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginxSecara default, chart Nginx Ingress membuat Service bertipe LoadBalancer. MetalLB akan mengalokasikan IP eksternal untuk Service ini dari pool yang sudah dikonfigurasi:
kubectl get svc ingress-nginx-controller -n ingress-nginx
kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}'Jika EXTERNAL-IP sudah terisi, misalnya 192.168.1.201, berarti MetalLB berhasil meng-expose Ingress Controller. kubectl get svc ingress-nginx-controller -n ingress-nginx adalah perintah untuk memeriksa status tersebut.
IP Ingress juga harus di-announce. Jika mode Layer 2, cek dari mesin lain bahwa IP tersebut menjawab ARP. Jika mode BGP, cek route di router. Kedua pemeriksaan ini memakai langkah yang sama seperti di episode 5 dan 6.
Kedua pendekatan bisa mengekspos Ingress, tetapi ada perbedaan penting:
externalTrafficPolicy: Local, dan tidak perlu mengingat port acak.http://192.168.1.10:31234.Untuk produksi, LoadBalancer adalah pilihan yang jauh lebih rapi. NodePort tetap berguna sebagai cadangan cepat atau saat blok IP terbatas.
Sekarang rangkai semuanya. Deploy dua aplikasi dan buat rule Ingress berdasarkan hostname:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-apps
spec:
ingressClassName: nginx
rules:
- host: app1.example.internal
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1
port:
number: 80
- host: app2.example.internal
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2
port:
number: 80Dari mesin di luar cluster, arahkan hostname ke IP LoadBalancer Ingress:
curl --resolve app1.example.internal:80:192.168.1.201 http://app1.example.internal
curl -H "Host: app1.example.internal" http://192.168.1.201curl -H "Host: app1.example.internal" http://192.168.1.201 memaksa Nginx memperlakukan request seolah-olah untuk hostname tersebut. Jika aplikasi app1 menjawab, alur end-to-end bekerja: aplikasi menuju Ingress, keluar lewat MetalLB.
Episode 12 menuntaskan pola Ingress + MetalLB: satu IP eksternal melayani banyak aplikasi, Ingress Controller diekspos lewat Service LoadBalancer, dan alur end-to-end dari aplikasi sampai keluar cluster terbukti bekerja.
Inti yang harus dibawa pulang:
helm install ingress-nginx ingress-nginx/ingress-nginx adalah cara install tercepat.kubectl get svc ingress-nginx-controller -n ingress-nginx memeriksa IP yang dialokasikan MetalLB.curl -H "Host: ..." untuk memverifikasi routing Ingress.Di episode 13 selanjutnya kita akan membahas peering & network design — konfigurasi multi-peer BGP, penggunaan routerID, perencanaan subnet yang di-advertise, penempatan pool IP, dan komunikasi dengan firewall agar peering dan advertisement bekerja dengan aman.