LoxiLB-k8s Ebpf Loadbalancer
Loxilb adalah aplikasi loadbalancer hyper-scale untuk cloud-native, menggunakan teknologi eBPF dengan berabasis golang. Didesain untuk on-premises, edge, dan public cloud Kubernetes Cluster Deployment.
Dalam kubernetes, agar bisa aplikasi/deployment dapat diakses dari luar, diperlukan sebuah loadbalancer. Kubernetes sendiri tidak mempunyai fitur untuk mengatur service loadbalancer jadinya ketika kita memberikan sebuah service dengan value loadbalancer, service tersebut akan stuck di pending state.
Metallb sebelumnya dapat menjadi solusi dari hal tersebut, tetapi ada beberapa hal yang tidak dipunyai metallb, menurut dari dokumentasi loxilb beberapa protokol tidak disupport oleh metallb, jadinya loxilb hadir mengatasi hal tersebut.
Try kube-loxilb
Di deploy dalam k8s-onpremises
Refrensi : https://loxilb-io.github.io/loxilbdocs/kube-loxilb/
Kube-loxilb adalah loxilb yang diimplementasika untuk kubenrnetes service loadbalancer spec dimana sudah terdapat support untuk load-balancer class, IPAM (IP Address Management), dll. kube-loxilb running sebagai deployment di ns kube-system. Deployment hanya mengambil informasi mengenai komponen k8s di cluster tersebut, dan tidak mengimplementasikan packet/session loadbalancer. Untuk loadbalancer akan diambil tugasnya oleh loxilb yang berada di luar cluster, sebagai external loadbalancer.
- Buat instance diluar cluster k8s, disini saya memakai nama
nb-loxi-lbsebagai docker-engine. Nantinya akan diinstal docker yang akan running serviceloxilb. Setup docker-engine, dan lanjut ke next step - Pull image
docker pull ghcr.io/loxilb-io/loxilb:latestu22
Buat network mac-vlan
docker network create -d macvlan -o parent=enp0s3 --subnet 172.10.10.0/24 --gateway 172.10.10.1 --aux-address 'host=172.10.10.50' llbnet
Running docker container
docker run -u root --cap-add SYS_ADMIN --restart unless-stopped --privileged -dit -v /dev/log:/dev/log --net=llbnet --ip=172.10.10.55 --name loxilb ghcr.io/loxilb-io/loxilb:latestu22
Pastikan dari cluster k8s, bisa ping ke loxilb container

Telnet ke port 11111

3. Install kube-loxilb di cluster-k8s. Step:
wget https://github.com/loxilb-io/kube-loxilb/raw/main/manifest/kube-loxilb.yaml
Edit manifest, dibagian args:
args:
- --loxiURL=http://172.10.10.55:11111
- --externalCIDR=172.10.10.55/32
- --setLBMode=2 # mode ini menggunakan metode One-ARM Nat
Keterangan nat : https://github.com/loxilb-io/loxilbdocs/blob/main/docs/nat.md#nat-modes-in-loxilb
Keterangan:
- loxiURL : API server address of loxilb. This is the docker IP address loxilb docker of Step 1. If unspecified, kube-loxilb assumes loxilb is running in-cluster mode and autoconfigures this.
- externalCIDR : CIDR or IPAddress range to allocate addresses from. By default address allocated are shared for different services(shared Mode)
- setLBMode : Specifies the NAT mode of the load balancer. There are currently 3 modes supported. Read more here.
Pastikan Running

Coba buat pod
cat << EOF | tee nginx-liveness.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service1
labels:
app: loxilb
spec:
selector:
app: loxilb
ports:
- port: 8765
targetPort: 80
type: LoadBalancer
loadBalancerClass: "loxilb.io/loxilb"
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: loxilb
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
name: http-web-svc
EOF

Jadi ketika hit external ip, dia bakal nerusin ke ip si worker-node dengan menggunakan nodeport
