Kubernetes Load Balancer; MetalLB kurulumu
Kubernetes içerisinde barındırdığımız uygulamaları, LoadBalancer, NodePort, Ingress gibi servisler kullanarak dışarıya açıp, müşterilerimizin uygulamamıza gelmesini sağlayabiliriz.
Bu yazıda, kubeadm ile kurulan bir cluster ‘da MetalLB kullanarak basit bir deployment objesini LoadBalancer servisi ile expose edeceğiz.
Yapımız şu şekilde;
Master : 10.90.0.170
Worker-1 : 10.90.0.171
Worker-2 : 10.90.0.172
Worker-3 : 10.90.0.173
Worker-4 : 10.90.0.174
Master sunucuya geçip, yani kubernetes cluster’ı manage ettiğimiz sunucuya gelip,
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
Yukarıdaki komutu çalıştırıp, gerekli bağlılıkları cluster ‘a deploy ediyoruz.
kubectl get all -n metallb-system
Komutu ile, objelerin durumlarını kontrol ediyoruz. Tüm objelerin durumu ‘running’ durumda gözüküyorsa işlemlerimize devam edebiliriz.
LoadBalancer objemiz basit bir şekilde kuruldu fakat, external bir IP alabilmesi için ek bir obje oluşturmamız gerekiyor. Böylelikle LoadBalancer olması gerektiği için external IP adresi tahsis edebilecek.
External IP adresi alabilmesi için,
metallb.io/v1beta1 Api’sinde bulunan, IPAddressPool isimli obje oluşturuyoruz. Objeye isim olarak, first-pool ismini veriyoruz. Ve çalışacağı namespace’i ‘metallb-system’ olarak şeçiyoruz. En alt kısımda, göreceğiniz üzere, bir IP aralığı giriyoruz. LoadBalancer ile bir deployment veya podu dışarıya açtığımızda bu aralıktan bir IP adresi tahsis edecek. Bu IP aralığı sunucularımızın bulunduğu vlan üzerindedir. Verdiğimiz IP aralığınının boş olmasına dikkat etmemiz gerekmektedir.
ardından, aşağıdaki komut ile IPAddressPool objesini oluşturuyoruz.
kubectl apply -f IPAddressPool.yaml
Aşağıdaki komut ile oluşturduğumuz objenin detaylarına bakıyoruz.
kubectl describe ipaddresspools first-pool -n metallb-system

Yapılandırmamız tamamlandı, artık metalLB external IP tahsis edebilir durumda. Sıra geldi testini yapmaya. Öncelikle aşağıdaki komut ile bir nginx deployment’ı oluşturuyoruz.
kubectl create deploy nginx-1 — image nginx
Arından oluşturduğumuz deployment’ı dışarıya Load Balancer servisi ile expose ediyoruz.
kubectl expose deploy nginx-1 — port 80 — type LoadBalancer

Görüntüde görüleceği üzere, nginx-1 isimli deployment objemiz, LoadBalancer servisi ile expose edildi ve 10.90.0.56 IP adresini kendisine tahsis etti.

Dilersek, LoadBalancer servisi farklı portlar ile expose edebiliriz. Detaylı bilgi için aşağıdaki yazımı inceleyebilirsiniz.
MetalLB için Dökümantasyon;