MetalLB for Onpremise Kubernetes Cluster

By | March 16, 2022

Metallb Installation on Local Kubernetes Cluster

Baremetal kubernetes kurulumlarında ingress controller’ı konumlandırmak ve ortamdan ip adresi almasını sağlamak cloud platformlarında olduğu kadar kolay değil 🙂

Public cloud platformları loadbalancer tipinde service oluşturduğumuzda otomatik olarak platformdaki loadbalancer üzerine ip ataması yapar ve bunu ingress controller’ın servisi ile ilişiklendirir. Onpremise kubernetes cluster’ımızın da bu şekilde davranıp ingress controller’a node’ların bulunduğu ip network’ünden IP ataması yapabilmesi için metallb entegrasyonu yaparak node’ların interface’lerine speaker yerleştirmeniz gerekir.

Böylece node’lar speakerlar yardımı ile ARP mesajlarını alıp ingress controller servisine eriştirebilir hale gelirler.

Şimdi onpremise bir kubernetes cluster’ı için MetalLB konfigürasyonunun nasıl yapıldığına bir göz atalım.

Gereksinimler

kubectl config get-contexts

Öncelikle kubernetes cluster’a erişmek için gerekli olan context’in ayarlandığından emin olmak gerekir.

Kurulum

Öncelikle ilgili yaml dosyalarının bulunduğu repoyu clone’layalım.

https://github.com/yasarfirat/metallb.git

Directory’yi şu şekilde ayarlayalım

kubectl create ns metallb-system

IP networkünü belirtmek için gerekli configmap’i oluşturalım.

apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
    address-pools:
    - name: my-ip-space
    protocol: layer2
    addresses:
    - 10.255.134.160-10.255.134.170

Gerekli yaml file’larını apply komutu ile gönderelim.

kubectl apply -f config.yaml
kubectl apply -f metallb.yaml

MetalLB için gerekli secret objesini oluşturalım.

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

Kullanım

Service deploy edildikten sonra herhangi bir nginx image ile load balancer tipinde bir service oluşturularak test işlemi yapılabilir. Aşağıdaki adımları izleyerek test işlemini gerçekleştirelim.

  1. Create Example Nginx Deploymentkubectl create deployment nginx –image=nginx
  2. Expose Your Deploymentkubectl expose deploy nginx –port 80 –type LoadBalancer
  3. Result
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
nginxLoadBalancer172.19.2219.17310.255.134.1680:30383/TCP,443:32503/TCP2m

Yapılan deployment’ın ardından loadbalancer tipinde servisin otomatik olarak configmap içerisinde belirtilen ip havuzundan ip aldığı görülecektir.

Cheers.

Leave a Reply

Your email address will not be published. Required fields are marked *