Docker Bölüm 5: Network

Docker

Docker sistemimize ilk kez kurulduğu zaman docker0 adında varsayılan olarak bridge network tanımlaması yapılmakta ve gerekli konfigürasyon oluşturulmaktadır.

Biz bir değişiklik yapmadığımız sürece docker0 default olarak kullanılır, container’lar da bu switch sayesinde hem birbirleri ile hem de dış dünya ile iletişim sağlayabiliyorlar.

Container’ların birbirleriye veya dış dünyayla iletişim kurabilmesi için 2 farklı standart geliştirilmiştir.

  1. CNM (Container Network Model)
  2. CNI (Container Network Interface)

Bu modeller sayesinde birden fazla ağ driver kulanabilen container’lar network tanımlama işlemlerinde bir standarta göre oluşturulmaktadır. Docker container sistemi CNM standartını desteklemektedir.

CNM (Container Network Model)

Docker üzerinde oluşturulan container’lar arasında bağlantı sağlanmasından ve farklı ağ modellerinin oluşturulmasından sorumludur. Madde madde sıralayacak olursak:

  1. Aynı ağdaki tüm container’ların birbirleriyle sorunsuzca iletişim kurabilmesini sağlar.
  2. Container’lar ve desteklenen drivler’lar arasında çoklu network trafiğinin bölümlere syrılmasını sağlar.
  3. Bir container’ın aynı anda birden fazla network’e sorunsuzca dahil olabilmesini sağlar.
  4. Ağ bağlantısı için sandbox içerisine endpoint eklenmesini sağlar.

CNM, 3 ana bileşen üzerine kuruludur:

  1. Sandbox: Container yönetim arayüzü, ip, mac adresleri, rooting tabloları ve dns ayarları gibi konfigürasyon yapılandırma işlemlerinden sorumludur. Container’ların dış dünyadan izole olmasını ve container’ların iç networkten birbirleri ile iletişime geçmesini engellemektedir.
  2. Endpoint: Snadbox bileşenini dış network’e bağlamakla görevlidir. Bir Endpoint sadece bir network’e bağlanabilir.
  3. Network: Birbirleriyle iletişim kurabilen Endpoint’leri ifade etmektedir. Network, Endpoint – to – Endpoint ve Container – to – Container taşınan yol belirlemektedir.

CNM, 2 interface’e sahiptir:

  1. Network Driver: Network eklemek ve silmek, container’ların network’e eklenmesi ve çıkartılması işlemlerinden sorumludur.
  2. IPAM (IP Address Management) Driver): Adres havuzu oluşturmak ve silmek, container’a ip adresi aatamak ve geri almak işlemlerinden sorumludur.

Libnetwork

Docker, 2015’te bünyesine kattığı Socket Plane ekibi tarafından geliştirildi. Temel olarak yazılımcıların network driver yazabilecekleri bir çalışma alanı sunmaktadır. CNM standartlarına göre çalışır. Docker Daemon ile Network Driver arasında bir arabirim sağlamaktadır.

Libnetwork’ün uzun vadeli hedefi Docker ve Linux üzerinde bağımsız çalışan modüller sunmaktır. Docker, Libnetwrok ile network ihtiyaçlarını karşılamayı ve container’a bağlanmak için bir standart getirmeyi planlamaktadır.

Libnetwork kütüphanesi Docker’dan bağımsız olarak kullanılabilir. Ayrıca farklı driver paketlerini desteklemektedir. 2 temel driver tipi bulunmaktadır:

  1. Local (Dahili) Driver’lar: Ekstra modül gerektirmezler ve default olarak Docker Engine’de yüklüdürler. Bu sebeple direkt olarak container üzerinde tanımlanabilmektedirler. Dahili driverler:
    1. Bridge
    2. Host
    3. None
    4. Overlay
    5. MACVlan
  2. Remote Driver’lar: 3rd Party Plugins

Docker Network Komutları

Docker üzerinden network komutları, docker network ile başlar.

create

Yeni bir network oluşturmak için kullanırız. Bu şekilde bir dizi container’ınızı veya isterseniz sadece birini de izole bir network oluşturarak diğer container’lardan erişimi kapatabiliriz.

Ör:

Yukarıda tanımladığımız yeni network’ü görebiliyoruz. Öncesinde listelenen 3 network ise default olarak Docker tarafından oluşturulanlardır. Bir sistemin çalışması için gerekli olduklarından silinemezler.

Oluşturmuş olduğumuz bir network’te container’ın çalışmasını istiyorsak:

connect

Çalışan bir container’ı, başka bir network’e dahil etmek için kullanılır.

disconnect

Çalışan bir container’ı bir network’ten çıkarmak için kullanılır.

inspect

Bir veya daha fazla network’ün detaylarını görmemizi sağlar.

ls

Networkleri listeler

prune

Kullanılmayan tüm networkü siler.

rm

Bir veya daha fazla sayıda network’ü siler.

Docker Network Türleri (Local Driver’lar)

Bridge

docker0 networkünün de dahil olduğu türdür. Bir container özellikle belirtilmediği sürece bridge network tipinde bir network’e tanımlı çalışırlar.

Bu modelde host sunucu ile container’lar arasında özel bir ağ oluşturulur. Ayrıca aynı networkteki container’lar da birbirleri ile iletişime geçebilirler.

IP’ler dhcp atacılığı ile otomatik olarak dağıtılır ve oluşan her container bu dhcp üzerinden bir ip atanarak hayatını devam ettirir; fakat istenirse özel bir ip ve subnet ataması yapmakta mümkündür.

Örnek bir çalışma yapalım.

Örneğimizde 3 container ve 2 network’ümüz olacak. Frontend networkünü dışarı ile konuşur hale getireceğiz, backend network’ü ise dabatase’i ortamdan izole edrek erişilmesinin önüne geçeceğiz. Aradaki bağlantı ise ürünkatalog container tarafından yapılacak.

Network’lerimizi oluşturalım:

Şimdi sırasıyla container’larımızı oluşturalım:

Şimdi frontend-ntwrk detaylarına bakalım ve container’larımız var mı görelim:

Şimdi backend-ntwrk detaylarına bakalım ve container’larımız var mı görelim:

Şimdi urunatalog container’ımızdan iki database ve webAPI’a erişebiliyor mu bakalım:

Görüldüğü gibi sorun yok. Şimdi de webAPI erişebilir mi ona bakalım:

Erişemediğimiz ve biririnden yalıtmış olduğumuz görülüyor. İstediğimiz de tam olarak buydu.

Host

Bu modelde host bilgisayarın network’ü doğrudan container network’ü ile eşleştirilmektedir. Bu sebeple container için bir sanal network kartı tanımlanmaz ve doğal olarak bir ip de atanmaz.

Normal şartlar altında bu tür bir şey yapmanız asla tavsiye edilmez. Bunun güvenlik açısından çok fazla sakıncası vardır. Buna rağmen bir container üzerinden kendi bilgisayarınız ve ağınızı tarayacağınız container’lar ayağa kaldırmak isterseniz kullanabilirsiniz.

Bu tür container’lara open container denir. Hostun tüm kaynalarına erişebileceği için bu şekilde isimlendirilirler.

None

Bu modelde container herhangi bir network’e dahil olmadan kullanılırlar. Bunlara closed container denir. Bu şekilde tüm diğer container’ardan tamamen izole hale gelmiş olur.

Overlay

Birden fazla, çoklu host haberleşmesinde kullanılmaktadır. Docker Swarm konusu olduğu için o kısımda incelenecektir.

MACVlan

Bu modelde container içerisine mac adresi ataması yapılmaktadır. Bu sayede container’ın network üzerinde fiziksel bir aygıtmış gibi görünmesi sağlanmaktadır. Docker, mac adresine göre trafiği container’lara yönlendirmektedir. Bu model, trafiğin doğrudan fiziksel ağa bağlanması istendiği durumlar için idealdir.

Container’lar Arasında Link İşlemleri

Link işlemi, container’ların birbirlerini keşfetmesine, bir container’dan bir başka container kaynaklarına güvenli bir şekilde veri aktarmasına olanak sağlamak için kullanılmaktadır.

Container’lar arasındaki link işlemlerini yapabilmek için –link komutu ile yapılmaktadır. Örnek kullanımı şöyledir:

Örneğin elimizde database ve web adında iki tane container olsu. Database’i oluşturup, sonra bu database’e web container’ından bir link oluşturalım:

Şimdi de web container’ımızı oluşturalım:

Bu işlemi farklı şekilde de yapabiliyoruz. Çalışan bir container’a bu işlemi yapmak için:

Aynı örnek üzerinde bunu gösterecek olursak:

Not: Kaynak olarak Murat AKSU’dan faydalanılmıştır.

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.