Konteyner Ağ Mimarisi (Container Networking)

Tuncay ÖZER Tuncay ÖZER


Şubat 2020 Genel (1) 0


Konteyner Ağ Mimarisi (Container Networking)

Sanallaştırma teknolojileri hayatımızda çok şey değiştirdi. Yaygın sanallaştırma teknolojilerinde işlemci gücü, memory, depolama alanı ve ağ iletişimini sağlayabilmek adına ihtiyaç duyduğumuz fiziksel sunucu üzerine hypervisor (VMware ESXi, Hyper-V vb.) kurar, sonra bu hypervisor üzerinde sanal makinelerimizi oluştururuz. Bu sanal makinelerin her birine yeni bir işletim sistemi kurar, sonra da içerisine uygulama ve servislerimizi yükleriz. Bu yapı halen çok yaygın şekilde kullanılmaktadır. Bu yapıda sanal makineler arası izolasyon iyidir, ama her seferinde  yeni işletim sistemi kurmak, dolayısı ile birbirinden bağımsız işletim sistemlerinin ayrı ayrı yönetilmesi güvenlik yamalarının geçilmesi ve kontrol edilmesi vb. iş yüklerini beraberinde getirmektedir.

Konteyner, işletim sistemi düzeyinde soyutlaştırma tekniği olarak tanımlanmaktadır. Sanal makinelerde uygulanan donanımsal katmanda sanallaştırma yöntemi yerine işletim sistemi düzeyinde sanallaştırma mantığına sahip olan ve içerdiği yazılımı bulunduğu altyapıdan bağımsız çalışacak şekilde izole eden konteynerler, çalıştırabilir bir yazılım paketi gibidir. Konteyner mimarisi de aslında bir sanallaştırma teknolojisidir, yalnızca hypervisor katmanı yerinde host işletim sistemi ve bu işletim sisteminin üzerinde konteyner motoru bulunur. Özetle aynı işletim sistemi üzerinde farklı uygulama veya servisleri sanallaştırarak çalışır. 

Yazılımın donanımdan bağımsız çalışmasını sağlayarak geliştirme, test ve gerçek ortamda devreye alma süreçlerinde karşılaşılabilecek donanımsal farklılıklardan kaynaklanan sorunların etkisini azaltmaya yardımcı olur.

Konteynerler sanal makinelerin aksine ayrı bir işletim sistemi kullanmazlar, host işletim sistemini paylaşımlı kullanırlar. Konteyner imajı; bir programın çalıştırılması için gerekli olan kod, çalışma zamanı (runtime), sistem araçları, sistem kütüphaneleri (library) ve ayarlar gibi tüm bileşenleri içerir. Aşağıdaki şekil ile  Konteyner Mimarisi ve bahsettiğimiz geleneksel sunucu sanallaştırma arasındaki farkı görebilirsiniz.

Şekil 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 kullanılan Docker olsa da aslında bu işin atası 2008 yılında ilk sürümü çıkan Linux Containersdır. Hypervisor tabanlı sanallaştırma kadar eskiye dayanan LXC geliştirilmiş, manuel olarak yapılan bir çok işlem ustaca otomatikleştirilmiş ve kullanım kolaylığının artmasıyla yaygınlığı da artmıştır. Konteyner ağlarının temel network gereksinimleri olarak konteynerin içinde bulunduğu ağa IP bağlantısı, IP adres yönetimi (IPAM) ve ağ cihazı oluşturma, Host sistemin NAT protokolü veya Route Advertisement üzerinden dış ağ bağlantısı gibi bileşenler sayılabilir. Aynı host üzerinde çalışan konteynerler birbirileriyle IP adresleri üzerinden haberleşebilirler. Bir ağ üzerinde haberleşmek için ise konteynerler host makinenin IP adresini kullanırlar ve iletişime geçmek istedikleri konteynere erişmek için port yönlendirme (port-mapping) yöntemine gereksinim duyarlar. Port yönlendirme, konteyner içinde çalışan uygulamanın kendisine ait olan dış IP ve port ikilisini yayınlamasına engel olmaktadır. Bu sorunun çözümü için Flannel gibi teknolojiler geliştirilmiştir. Bu ağ çözümleri konteynerlerin tüm diğer konteyner ve hostlar ile iletişime geçmelerine olanak sağlamaktadır.

Hypervisor tabanlı sanallaştırmada işletim sistemine verdiğiniz kaynağın kullanılmayan kısmı çöp olur, bu yüzden verimlilik düşer, bu doğru bir yaklaşım olmamakla birlikte hypervisor tabanlı sanallaştırmada da atanan kaynakların kullanılmayan kısmı diğer sanal makineler tarafından kullanılabilir.