Network Namespace
Temel Bilgiler
Ağ ad alanı, Linux çekirdeğinin bir özelliğidir ve ağ yığınının izolasyonunu sağlar, böylece her ağ ad alanının kendi bağımsız ağ yapılandırmasına, arayüzlerine, IP adreslerine, yönlendirme tablolarına ve güvenlik duvarı kurallarına sahip olmasını sağlar. Bu izolasyon, her bir konteynerin diğer konteynerlerden ve ana sistemden bağımsız olarak kendi ağ yapılandırmasına sahip olması gereken konteynerleştirme gibi çeşitli senaryolarda faydalıdır.
Nasıl Çalışır:
Yeni bir ağ ad alanı oluşturulduğunda, tamamen izole edilmiş bir ağ yığını ile başlar ve döngü arayüzü (lo) hariç hiçbir ağ arayüzü bulunmaz. Bu, yeni ağ ad alanında çalışan işlemlerin varsayılan olarak diğer ad alanlarındaki veya ana sistemdeki işlemlerle iletişim kuramayacağı anlamına gelir.
veth çiftleri gibi sanal ağ arayüzleri, ağ ad alanları arasında veya bir ad alanı ile ana sistem arasında ağ bağlantısı kurmak için oluşturulabilir ve taşınabilir. Örneğin, bir veth çiftinin bir ucu bir konteynerin ağ ad alanına yerleştirilebilir ve diğer ucu köprüye veya ana ad alanındaki başka bir ağ arayüzüne bağlanarak konteynere ağ bağlantısı sağlanabilir.
Bir ad alanı içindeki ağ arayüzleri, diğer ad alanlarından bağımsız olarak kendi IP adreslerine, yönlendirme tablolarına ve güvenlik duvarı kurallarına sahip olabilir. Bu, farklı ağ ad alanlarındaki işlemlerin farklı ağ yapılandırmalarına sahip olmasını ve ayrı ağ sistemlerinde çalışıyormuş gibi çalışmasını sağlar.
İşlemler,
setns()
sistem çağrısı kullanılarak ad alanları arasında taşınabilir veyaunshare()
veyaclone()
sistem çağrıları kullanılarakCLONE_NEWNET
bayrağı ile yeni ad alanları oluşturabilir. Bir işlem yeni bir ad alanına taşındığında veya oluşturulduğunda, o ad alanıyla ilişkili ağ yapılandırmasını ve arayüzleri kullanmaya başlar.
Lab:
Farklı Ad Alanları Oluşturma
CLI
--mount-proc
parametresini kullanarak /proc
dosya sisteminin yeni bir örneğini bağladığınızda, yeni bağlama alanının o ad alanına özgü işlem bilgilerinin doğru ve izole bir görünümünü sağlarsınız.
Docker
Hangi ad alanında olduğunuzu kontrol edin
Bir sürecin hangi ad alanında olduğunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
Burada <PID>
, kontrol etmek istediğiniz sürecin kimlik numarasını temsil eder. Bu komut, sürecin bulunduğu ad alanlarının sembolik bağlantılarını listeler.
Tüm Ağ isim alanlarını bulun
```bash nsenter -n TARGET_PID --pid /bin/bash ``` Ayrıca, başka bir işlem ad alanına **yalnızca root olarak girebilirsiniz**. Ve başka bir ad alanına **bir tanımlayıcı olmadan** (örneğin `/proc/self/ns/net`) **giremezsiniz**.
Referanslar
Last updated