Skip to main content
  1. Posts/

Using VLAN with MetalLB Kubernetes

·2 mins·
metallb kubernetes metallb
Table of Contents

Panduan singkat untuk membuat service LoadBalancer dengan External-IP menggunakan VLAN.

Sebelum memulai pastikan Anda sudah memiliki:

  • pfSense
  • Kluster Kubernetes dengan addon network (flannel atau cilium)

Semua saya buat dalam lingkup VM.

Create VLAN
#

Buat VLAN di pfsense. pertama login ke dashboard

Selanjutnya arahkan ke Interfaces -> Assignments -> VLANs

Klik Add lalu pada parent interface pilih interface dan tentukan VLAN tag

Kembali ke tab Interface Assignments. Pilih Add pada interface VLAN.

Selanjutnya arahkan ke Interfaces -> OPT1. Lalu Enable interface dan tentukan IP VLAN.

VLAN configuration
#

Membuat dan konfigurasi interface VLAN dapat Anda lakukan pada semua node atau hanya pada master node saja.

ip link add link eth0 eth0.100 type vlan id 100
ip link set eth0.100 up

Disini tidak perlu menambahkan IP pada interface VLAN. Sebab akan dialokasi untuk service load-balancer kecuali IP yang mengarah ke router pfSense (192.168.34.1/24).

Install MetalLB
#

Untuk deploy MetalLB dengan manifest.

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml

Tunggu beberapa saat sampai pods controller dan speaker status running.

# kubectl get pods -n metallb-system
NAME                          READY   STATUS    RESTARTS      AGE
controller-595f88d88f-kb48s   1/1     Running   3 (21m ago)   2d12h
speaker-dvqjl                 1/1     Running   6 (20m ago)   2d12h
speaker-txfx7                 1/1     Running   6 (20m ago)   2d12h
speaker-wxb96                 1/1     Running   6 (20m ago)   2d12h

MetalLB configuration
#

Buat resource IPAddressPool untuk menentukan rentang IP load-balancer.

nano external.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: external
  namespace: metallb-system
spec:
  addresses:
  - 192.168.34.100-192.168.34.245

Selanjutnya buat resource L2Advertisement .

nano l2-external.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: external
  namespace: metallb-system
spec:
  ipAddressPools:
  - external
  interfaces:
  - eth0.100

Deploy resource ke kluster.

kubectl apply -f external.yaml
kubectl apply -f l2-external.yaml

Testing
#

Buat deployment nginx pada namespace site.

kubectl create ns site
kubectl create deployment -n site demo --image=nginxdemos/hello --port=80 --replicas=2

Selajutnya buat service load-balancer.

kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: demo
  namespace: site
spec:
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: demo
  type: LoadBalancer
EOF

Cek service.

# kubectl get -n site service/demo
NAME   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
demo   LoadBalancer   10.11.102.64   192.168.34.100   80:31797/TCP   5m18s

Test akses http://192.168.34.100 melaui browser Anda.

Related

MetalLB BGP Routing with pfSense
·3 mins
metallb kubernetes cilium pfsense metallb
Advanced L2 Configuration with MetalLB
·3 mins
metallb metallb kubernetes
Install MetalLB di Kubernetes
·2 mins
metallb kubernetes metallb
Configure Calico with eBPF Mode
·3 mins
calico kubernetes calico
Convert Docker Compose to Kubernetes Resources
·1 min
kubernetes kubernetes
Konfigurasi Mode VXLAN pada Calico Kubernetes
·2 mins
calico kubernetes calico