Network namespace — Linux yadrosida jarayonlar guruhiga mustaqil tarmoq steki ko‘rinishini beradigan izolyatsiya mexanizmidir. Har namespace o‘z interfeyslari, IP manzillari, marshrutlash jadvallari, qo‘shni jadvali, firewall qoidalari va ayrim socket sozlamalariga ega bo‘ladi. Konteynerlar bir xil yadrodan foydalansa ham, network namespace sabab o‘z tarmoq muhiti bordek ishlaydi.
Izolyatsiya mazmuni
Yangi namespace yaratilganda unda odatda faqat o‘chirilgan loopback interfeysi mavjud bo‘ladi. Xostdagi eth0 avtomatik ko‘rinmaydi. Jarayon qaysi namespacega biriktirilgan bo‘lsa, socket yaratish va marshrut qidiruvi shu muhitda bajariladi. Bir xil port raqami turli namespacelarda alohida tinglanishi mumkin, chunki socket jadvallari ajratilgan.
Namespace virtual mashina emas: yadro umumiy, CPU va xotira chegarasi esa boshqa cgroup yoki namespace mexanizmlari bilan boshqariladi. Yadrodagi zaiflik izolyatsiyani chetlab o‘tishi mumkin, shuning uchun u mutlaq xavfsizlik chegarasi sifatida qabul qilinmaydi.
Veth va ulanish
Ikki namespace o‘rtasida aloqa uchun ko‘pincha virtual Ethernet juftligi — veth ishlatiladi. Uning bir uchi konteyner namespaceiga, ikkinchisi xostdagi bridgega ulanadi. Bir uchdan yuborilgan kadr ikkinchisida qabul qilinadi, xuddi virtual kabeldek.
[container ns: eth0] <--- veth ---> [host: bridge] ---> physical NIC
Konteyner interfeysiga IP va default route beriladi. Xost bridge yoki router sifatida paketni boshqa konteyner, lokal tarmoq yoki internetga uzatadi. Tashqi chiqishda NAT qo‘llanishi mumkin. Kiruvchi trafik port mapping yoki load balancer orqali ichki manzilga yo‘naltiriladi.
Boshqaruv amallari
ip netns vositasi nomlangan namespace yaratish va unda buyruq bajarishga yordam beradi. Interfeys bir vaqtda faqat bitta network namespacega tegishli bo‘ladi; ko‘chirilgach, avvalgi muhitda ko‘rinmaydi. Jarayonning namespace identifikatori /proc orqali ham kuzatiladi.
Namespace o‘chirilishi uchun undagi jarayon va resurslar hayot davri boshqariladi. Nomlangan yozuvni o‘chirish ishlayotgan jarayon stekini darhol yo‘q qilmasligi mumkin. Orkestrator konteyner bilan birga veth, route va firewall qoidalarini tozalashi kerak; aks holda egasiz tarmoq obyektlari qoladi.
Konteyner tarmoqlari
Kubernetes kabi platformalarda har pod odatda bitta network namespacega ega, pod ichidagi konteynerlar esa shu stekni bo‘lishadi. Shu sabab ular localhost orqali gaplasha oladi va portlar bo‘yicha kelishishi kerak. CNI plagini interfeys yaratish, IP ajratish va marshrutni sozlashni bajaradi.
Network policy namespace mavjudligidan alohida nazoratdir. Izolyatsiya interfeys va route ko‘rinishini ajratadi, lekin tarmoq yo‘li yaratilgan bo‘lsa, trafikni o‘zi taqiqlamaydi. Firewall, eBPF yoki platforma siyosati qaysi endpointlar o‘zaro gaplashishini belgilaydi.
Diagnostika va xavfsizlik
Tarmoq muammosini xostdan tekshirish ba’zan noto‘g‘ri natija beradi, chunki xost va konteyner turli route hamda firewallni ko‘radi. Buyruq namespace ichida bajarilib, interfeys, manzil, route, DNS va socketlar o‘sha nuqtadan tekshiriladi. Paket capture vethning mos uchida yoki namespace ichida olinadi.
Imtiyozli jarayon namespace yaratishi yoki almashtirishi mumkin. Konteynerga CAP_NET_ADMIN berish uning ichki tarmoq sozlamalarini o‘zgartirish imkonini oshiradi; zarur bo‘lmasa capability olib tashlanadi. Xost network rejimi namespace izolyatsiyasini bekor qilib, konteynerni xost stekiga qo‘shadi va faqat aniq ehtiyojda ishlatiladi.
DNS joylashuvi
Namespace alohida tarmoq stekiga ega bo‘lsa-da, DNS sozlamasi ko‘pincha mount qilingan resolv.conf fayli yoki lokal stub orqali beriladi. Resolver manzili namespace ichidan yetib boriladigan bo‘lishi kerak. Xostdagi 127.0.0.53 loopback manzili konteynerning o‘z loopbackiga ishora qilishi sabab to‘g‘ridan-to‘g‘ri ishlamasligi mumkin; orkestrator mos DNS endpoint yaratadi.
Bog‘liq tushunchalar
Linux namespace, Virtual Ethernet, Container networking, Network interface, Bridge, CNI, Network policy