Linux Namespaces

Container yapılarının temellerinde yatan en önemli teknolojilerden bir tanesi de namespace’lerdir. Namespace’ler sayesinde, kernel seviyesinde partitioning’ler kurularak, processlerin sadece kendine ayrılaran kısımlarda, birbirlerinden bağımsız, isole bir yapıda çalışması sağlanmaktadır. Şu anda altı tane linux namespace’i bulunmaktadır, bazı kaynaklarda ise yedinci namespace olarak cgroup kabul edilmektedir. Linux namespace’ler process’lerin sistem kaynaklarını görmesini sınırlandırırken, Cgroup’lar ise process’lerin kaynaklara erişimini sınırlandırmaktadır. Özetle namespace’ler sistem üzerinde ne görüldüğünü limit’lerken , cgroplar ise neye erişildiğini limitlemektedir. (Cgrouplar çeşitli kaynkalarda control groups, subsystems veya resource controllers olarak da adlandırılmaktadır. )

Namespaceler ve görevleri temel olarak aşağıdaki gibidir;

User Namespace :  User Namespace’i sayesinde her bir farklı kullanıcıya, kedisine ait user id’si (UID) ve group id’si (GUID) atanmaktadır.

IPC Namespace : IPC, inter process communication demektir.  IPC sayesinde herbir namespace kendisine ait mesaj kuyruğunu oluşturur ,bu şekilde namespace’ler arasındaki proseslerlerin konuşması bibirlerinden izole edilmiş olur.

UTC Namespace : Unix time sharing namespace’i sayesinde tek bir sistem kendisne ait host ve domain name’e sahip olmaktadır.

Mount Namespaces : Mount namespace sayesinde container’ların mount point’leri birbirlerinden isole edilmektedir.

PID Namespaces : Process ID namespace sayesinde process id numaralı birbirlerinden isole edilmektedir.

Network Namespaces : Network namespace’i sayesinde herbir container’ın kendisine ait route table ve iptables’ı vs. olması sağlanmaktadır.

Şimdi elimizi kirleterek örneğin network namespace’lerin , nasıl izolasyon sağladığını ubuntu server 20.04 üzerinde uygulama yaparak öğrenmeye çalışalım.

Öncelikle üzerinde çalıştığımız işletim sisteminin versiyonunu kontrol edelim. Kullanacağımız komut :

cloud_user@ahmetnumanaytemiz1c:~$ cat /etc/issue.net

networknamespace1 adında bir network namespace’i işletim sistemimizde create edelim.

cloud_user@ahmetnumanaytemiz1c:~$ sudo ip netns add networknamespace1
[sudo] password for cloud_user:

Netwrok namespace oluştu mu hemen doğrulama yapalım.

cloud_user@ahmetnumanaytemiz1c:~$ sudo ip netns list

Bu create ettiğimiz networknamespace1’e input yönünde, tcp 80 portunda accept edeceği şekilde bir iptables kuralı girelim. Bunun için önce ;

cloud_user@ahmetnumanaytemiz1c:~$ sudo ip netns exec networknamespace1 bash

komutu ile networknamespace1 içine girelim ve iptables -L komutu ile mevcuttaki iptables kurallarına bir göz atalım.

Şimdi burada iptables kuralımızı ekleyelim ve bu namespace için iptables kurallarını kontrol edelim.

root@ahmetnumanaytemiz1c:/home/cloud_user# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
root@ahmetnumanaytemiz1c:/home/cloud_user# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
root@ahmetnumanaytemiz1c:/home/cloud_user#

Daha sonra bu network namespace içerisinden exit ile çıkalım ve ana işletim sistemi üzerindeki iptables kurallarını kontrol edelim. Görüleceği üzere yazdığımız bu iptables kuralı sadece içersinde olduğumuz namespace’de geçerli olacaktır.

root@ahmetnumanaytemiz1c:/home/cloud_user# exit
exit
cloud_user@ahmetnumanaytemiz1c:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
cloud_user@ahmetnumanaytemiz1c:~$

Böylelikle namespace’lerin sistem kaynaklarını birbirinden nasıl izole ettiğini az da olsa anlamaya çalıştık ve container’ların arka planda bu yapıları kullanmış olduğunu öğrenmiş olduk.

Herkese sağlıklı, mutlu, teknolojik günler dilerim.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*