Docker ve Nginx kullanarak Load Balancer konfigürasyonu
Nginx ile basit bir load balancer tanımı.
Bu yazımda Nginx i load balancer olarak nasıl kullanacağımızdan bahsedeceğim.
Günümüzde bir çok firma yük dağılım için F5, A10, Citrix gibi firmaları tercih etse de gerek basitliği gerek hızlı olması en önemlisi de open source olarak kullanabilceğinizden dolayı NGINX sıkça tercih edilip kullanılmaya başladı.
İki tane aynı docker web application yapıp bunlara nginx ile yük dağıtım yapacağım. basit olması açısından pythonla bir hello_world app config edeceğim. tek farkları döndüğü cevap olacak bu sayede hangi app ye düştüğünü anlayabilceğiz.
flask ile iki uygulama yapalım bunları da dockerfile ile bir image e dönüştürüp, container olarak çalıştıracağız.
bu image ler için gerekliliklerden biri Flask==1.1.1 bunu da dosyaların için de requirements olarak belirteceğiz ki container çalıştığında bu bağımlılığı bulabilsin.
dosyaları oluşturduktan sonraki görünüm:
şimdi her bir app için bir Dockerfile yapıp bu yaptıgımız pythonlar için image oluşturacağız. isterseniz farklı bir image kullanıp python yükleyebilirsiniz ama ben direk python:3 kullanacağım. bunu her iki app için de kullanabilirsiniz.
FROM python:3
COPY ./requirements.txt /requirements.txt
WORKDIR /
RUN pip install -r requirements.txt
COPY . /
ENTRYPOINT [ "python3" ]
CMD [ "app1.py" ]
imageleri oluşturup container olarak çalıştıralım. flaskin çalıştığı 5000 portlarını da farklı portlardan expose edelim bu sayede LB üzerinden yönlendireceğimiz portları belirleyeceğiz.
image i oluşturduk docker images le görebiliriz.
bu imagelerle container oluşturup 5000 portlarını expose edelim.
curl ile localhosta istek attığınızda responseleri görebilirsiniz.
şimdi nginx i configure edeceğiz. nginx ayarlarını nginx.conf diye bir dosya üzerinde yapacağız bir tane oluşturalım bunu dockerize ederken image içine atacağız sonrasında. IP olarak docker host un IP sini kullanacağım. dışardan erişmek istersek public IP sini de kullanabiliriz.
bu hazırladığımız confiği Dockerfile da /etc/nginx/conf.d/default.conf dizine atacağız. dockerfile ımız çok basit olacak nginx image i çekeceğiz. ve hazırladığımız config dosyasını atacağız. container ayaga kaldırırken bu conf la kalkacak.
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off"]
bu image i 80 portunu expose edecek şekilde container olarak başlatalım çünkü nginx conf da http olarak ayarladık. dışardan erişim için de 8080 yapacağız mesela önümüzde bir FW varsa içeriğe http isteklerini NAT yapabiliriz.
bundan sonra artık curl ile sunucu IP sine istek atarsak responseların sırayla sunuculardan geldiğini görebiliriz. basit bir while döngüsü yazalım
while true; do curl http://localhost:8080 && sleep 2; done;
isteklerin sırayla cevap verdiğini görürsünüz.
basit bir şekilde load balancer tanımı yaptık. data detaylı bilgi için nginx in websitesinden kontrol edebilirsiniz.
kolaylıklar.
h.a.s.