Home Using VLAN with MetalLB Kubernetes
Post
Cancel

Using VLAN with MetalLB Kubernetes

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.

1
2
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.

1
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.

1
nano external.yaml
1
2
3
4
5
6
7
8
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 .

1
nano l2-external.yaml
1
2
3
4
5
6
7
8
9
10
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: external
  namespace: metallb-system
spec:
  ipAddressPools:
  - external
  interfaces:
  - eth0.100

Deploy resource ke kluster.

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

Testing

Buat deployment nginx pada namespace site.

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

Selajutnya buat service load-balancer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.

This post is licensed under CC BY 4.0 by the author.