Skip to main content
  1. Posts/

Install MetalLB di Kubernetes

·2 mins·
metallb kubernetes metallb
Table of Contents

Menginstall MetalLB di kluster kubernetes memungkinkan Anda untuk membuat load-balacer tanpa integrasi dengan cloud provider agar mendapatkan external IP.

Saat pertama kali membuat service dengan type LoadBalancer tanpa metalLB, status dari externalIP menjadi <pending>. Namun Anda tetap bisa menambahkannya secara manual.

Sebelum memulai instalasi, pastikan network addon yang digunakan compatible. Cek network addon compatibility.

Preparation
#

Jika Anda menggunakan mode IPVS pada kube-proxy, sejak Kubernetes v1.14.2 Anda perlu mengaktifkan mode strict ARP.

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

Installation By Manifest
#

Untuk men-deploy MetalLB.

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

Deploy MetalLB dengan mode FRR.

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

Configuration
#

Menentukan IP yang akan ditetapkan pada service load balancer.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.10/32

Jika ingin menetukan range IP.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.10-192.168.100.145

Untuk menentukan range IP dengan cidr.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.0/24
  autoAssign: true
  avoidBuggyIPs: true

avoidBuggyIPs digunakan agar IP yang ditetapkan pada service load balancer terhindar dari akhiran .0 dan .255 {: .prompt-tip }

Untuk menerapkan alamat IP pada namespace atau service tertentu.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.100.0/24
  avoidBuggyIPs: true
  serviceAllocation:
    priority: 50
    namespaces:
      - namespace-a
      - namespace-b

Atau bisa juga dengan mengedit annotation pada manifest service.

kubectl edit -n namespace-a service/nginx-svc
apiVersion: v1
kind: Service
metadata:
  annotations:
    metallb.universe.tf/address-pool: first-pool
    metallb.universe.tf/loadBalancerIPs: 192.168.100.100
...

Setelah selesai konfigurasi IPAddressPool, Buat resource L2Advertisement seperti berikut.

kubectl apply -f - <<EOF
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: first-dist
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool
EOF

Test
#

Jalankan perintah berikut untuk membuat service load balancer. Bila perlu sesuaikan kembali baik app: dan ports: dengan deployment Anda.

kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: namespace-a
spec:
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ports:
  - nodePort: 32053
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
EOF

Cek service.

# kubectl get -n site service
NAME        TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
nginx-svc   LoadBalancer   10.11.62.131   192.168.100.100   80:32053/TCP   21h

Related

MetalLB BGP Routing with pfSense
·3 mins
metallb kubernetes cilium pfsense 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
Backup dan Restore Etcd pada Kubernetes Cluster
·2 mins
kubernetes kubernetes
Deploy Kubernetes Dashboard
·1 min
kubernetes kubernetes