Konteyner Ag Mimarisi (Container Networking)

7 Şubat 2020 Cuma

Sanallastirma teknolojileri hayatimizda çok sey degistirdi. Yaygin sanallastirma teknolojilerinde islemci gücü, memory, depolama alani ve ag iletisimini saglayabilmek adina ihtiyaç duydugumuz fiziksel sunucu üzerine hypervisor (VMware ESXi, Hyper-V vb.) kurar, sonra bu hypervisor üzerinde sanal makinelerimizi olustururuz. Bu sanal makinelerin her birine yeni bir isletim sistemi kurar, sonra da içerisine uygulama ve servislerimizi yükleriz. Bu yapi halen çok yaygin sekilde kullanilmaktadir. Bu yapida sanal makineler arasi izolasyon iyidir, ama her seferinde  yeni isletim sistemi kurmak, dolayisi ile birbirinden bagimsiz isletim sistemlerinin ayri ayri yönetilmesi güvenlik yamalarinin geçilmesi ve kontrol edilmesi vb. is yüklerini beraberinde getirmektedir.

Konteyner, isletim sistemi düzeyinde soyutlastirma teknigi olarak tanimlanmaktadir. Sanal makinelerde uygulanan donanimsal katmanda sanallastirma yöntemi yerine isletim sistemi düzeyinde sanallastirma mantigina sahip olan ve içerdigi yazilimi bulundugu altyapidan bagimsiz çalisacak sekilde izole eden konteynerler, çalistirabilir bir yazilim paketi gibidir. Konteyner mimarisi de aslinda bir sanallastirma teknolojisidir, yalnizca hypervisor katmani yerinde host isletim sistemi ve bu isletim sisteminin üzerinde konteyner motoru bulunur. Özetle ayni isletim sistemi üzerinde farkli uygulama veya servisleri sanallastirarak çalisir. 

Yazilimin donanimdan bagimsiz çalismasini saglayarak gelistirme, test ve gerçek ortamda devreye alma süreçlerinde karsilasilabilecek donanimsal farkliliklardan kaynaklanan sorunlarin etkisini azaltmaya yardimci olur.

Konteynerler sanal makinelerin aksine ayri bir isletim sistemi kullanmazlar, host isletim sistemini paylasimli kullanirlar. Konteyner imaji; bir programin çalistirilmasi için gerekli olan kod, çalisma zamani (runtime), sistem araçlari, sistem kütüphaneleri (library) ve ayarlar gibi tüm bilesenleri içerir. Asagidaki sekil ile  Konteyner Mimarisi ve bahsettigimiz geleneksel sunucu sanallastirma arasindaki farki görebilirsiniz.

Sekil 1: Kaynak: https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/products/nsx/vmware-containers-and-container-networking-whitepaper.pdf 

Günümüzde en popüler konteyner mimarisi olarak kullanilan Docker olsa da aslinda bu isin atasi 2008 yilinda ilk sürümü çikan Linux Containersdir. Hypervisor tabanli sanallastirma kadar eskiye dayanan LXC gelistirilmis, manuel olarak yapilan bir çok islem ustaca otomatiklestirilmis ve kullanim kolayliginin artmasiyla yayginligi da artmistir. Konteyner aglarinin temel network gereksinimleri olarak konteynerin içinde bulundugu aga IP baglantisi, IP adres yönetimi (IPAM) ve ag cihazi olusturma, Host sistemin NAT protokolü veya Route Advertisement üzerinden dis ag baglantisi gibi bilesenler sayilabilir. Ayni host üzerinde çalisan konteynerler birbirileriyle IP adresleri üzerinden haberlesebilirler. Bir ag üzerinde haberlesmek için ise konteynerler host makinenin IP adresini kullanirlar ve iletisime geçmek istedikleri konteynere erismek için port yönlendirme (port-mapping) yöntemine gereksinim duyarlar. Port yönlendirme, konteyner içinde çalisan uygulamanin kendisine ait olan dis IP ve port ikilisini yayinlamasina engel olmaktadir. Bu sorunun çözümü için Flannel gibi teknolojiler gelistirilmistir. Bu ag çözümleri konteynerlerin tüm diger konteyner ve hostlar ile iletisime geçmelerine olanak saglamaktadir.

Hypervisor tabanli sanallastirmada isletim sistemine verdiginiz kaynagin kullanilmayan kismi çöp olur, bu yüzden verimlilik düser, bu dogru bir yaklasim olmamakla birlikte hypervisor tabanli sanallastirmada da atanan kaynaklarin kullanilmayan kismi diger sanal makineler tarafindan kullanilabilir.

Bunları da beğenebilirsiniz.