شبکه‌سازی در داکر؛ آشنایی با CNM، Libnetwork و شبکه‌های Bridge

شبکه‌سازی در داکر بر پایه یک طراحی باز به نام Container Network Model ساخته شده که توسط libnetwork پیاده‌سازی و با درایورهای قابل‌جایگزینی گسترش می‌یابد. این مقاله تئوری پشت شبکه داکر را بررسی کرده و نحوه ساخت و تست شبکه‌های bridge تک‌هاست، از جمله تفکیک نام و نگاشت پورت را توضیح می‌دهد.

شبکه داکرContainer Network Modelشبکه Bridge

~4 دقیقه مطالعه · آخرین به‌روزرسانی ۱۴ شهریور ۱۴۰۵

مقدمه

کانتینرها در یک اپلیکیشن میکروسرویس باید با یکدیگر و اغلب با سیستم‌های خارجی ارتباط برقرار کنند. قابلیت‌های شبکه‌سازی داکر بر پایه سه جزء ساخته شده‌اند: Container Network Model (CNM) که مشخصات طراحی است، libnetwork که آن را پیاده‌سازی می‌کند، و درایورها (drivers) که آن را با توپولوژی‌های خاص شبکه گسترش می‌دهند.

مدل شبکه کانتینری

CNM سه بلوک ساختمانی بنیادین را تعریف می‌کند. یک sandbox پشته شبکه ایزوله‌ای داخل کانتینر است که شامل رابط‌ها، جداول مسیریابی و پیکربندی DNS می‌شود. Endpointها رابط‌های شبکه مجازی هستند که یک sandbox را به یک شبکه متصل می‌کنند. شبکه‌ها (Networks) سوییچ‌های مجازی هستند — معمولاً پیاده‌سازی‌های نرم‌افزاری یک bridge از نوع 802.1d — که endpointهایی که نیاز به ارتباط دارند را گروه‌بندی می‌کنند.

هر کانتینر sandbox مخصوص به خود را با حداقل یک endpoint دارد. کانتینری با دو endpoint متصل به دو شبکه متفاوت می‌تواند به هر دو دسترسی داشته باشد، اما خود endpointها نمی‌توانند مستقیماً با یکدیگر ارتباط برقرار کنند، زیرا هرکدام مانند یک آداپتور شبکه استاندارد وابسته به یک شبکه واحد رفتار می‌کنند.

Libnetwork

libnetwork پیاده‌سازی مرجع و متن‌باز CNM است که به‌عنوان بخشی از پروژه Moby نگهداری می‌شود. داکر در ابتدا شبکه‌سازی را مستقیماً داخل daemon پیاده‌سازی می‌کرد، اما در نهایت آن را به این کتابخانه مستقل منتقل کرد که control plane شبکه، از جمله service discovery و load balancing ingress را نیز پیاده‌سازی می‌کند.

درایورها

در حالی که libnetwork control plane را مدیریت می‌کند، درایورها data plane را پیاده‌سازی می‌کنند — ساخت شبکه‌ها و تضمین اتصال و ایزوله‌سازی. داکر با درایورهای داخلی مانند bridge، overlay و macvlan عرضه می‌شود، و شخص‌ثالث‌ها می‌توانند درایورهای اضافی برای توپولوژی‌های پیشرفته‌تر پیاده‌سازی کنند. یک هاست واحد یا کلاستر Swarm می‌تواند چندین شبکه را اجرا کند که هرکدام توسط درایور متفاوتی مدیریت می‌شود.

شبکه‌های Bridge تک‌هاست

ساده‌ترین نوع شبکه داکر، شبکه bridge تک‌هاست است که با درایور داخلی bridge ساخته می‌شود. هر هاست داکر به‌طور خودکار یک شبکه پیش‌فرض به نام bridge دریافت می‌کند که به یک bridge لینوکسی به نام docker0 در kernel هاست نگاشت می‌شود. این نگاشت با دستور زیر قابل تأیید است:

docker network inspect bridge | grep bridge.name

یک شبکه bridge سفارشی را می‌توان با دستور زیر ساخت:

docker network create -d bridge localnet

این کار همچنین یک bridge لینوکسی متناظر روی هاست ایجاد می‌کند که با دستور brctl show قابل مشاهده است. کانتینرهای متصل به یک شبکه bridge سفارشی مشترک می‌توانند یکدیگر را با نام تشخیص دهند، به لطف resolver داخلی DNS داکر — قابلیتی که در شبکه پیش‌فرض bridge در دسترس نیست.

دسترسی خارجی از طریق نگاشت پورت

کانتینرهای روی یک شبکه bridge مشترک می‌توانند مستقیماً با یکدیگر صحبت کنند، اما دسترسی از بیرون نیازمند نگاشت پورت کانتینر به پورتی روی هاست داکر است:

docker run -d --name web --network localnet --publish 5005:80 nginx

پس از publish شدن، سرویس از طریق آدرس IP هاست روی پورت نگاشت‌شده، هم از کانتینرهای دیگر و هم از کلاینت‌های خارجی قابل‌دسترسی می‌شود. این روش هرچند کاربردی است، مقیاس‌پذیری خوبی ندارد، زیرا فقط یک فرآیند می‌تواند در یک زمان به یک پورت مشخص روی هاست متصل شود — یکی از دلایلی که شبکه‌های bridge تک‌هاست بیشتر برای توسعه محلی و اپلیکیشن‌های کوچک مناسب‌اند.

نتیجه‌گیری

درک CNM، libnetwork و نقش درایورها، پایه‌ای برای کار با هر توپولوژی شبکه داکر فراهم می‌کند. شبکه‌های bridge تک‌هاست، هرچند ساده هستند، مکانیزم‌های اصلی — sandboxها، endpointها و service discovery مبتنی بر DNS — را نشان می‌دهند که به انواع پیشرفته‌تر شبکه مانند overlay و macvlan نیز تعمیم می‌یابند.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

داکر چگونه از فناوری‌های امنیتی لینوکس استفاده می‌کند

مدل امنیتی داکر بر پایه دفاع چندلایه ساخته شده و فناوری‌های شناخته‌شده kernel لینوکس را با تنظیمات پیش‌فرض معقول ترکیب می‌کند. این مقاله توضیح می‌دهد که namespaceها، control groupها، capabilityها، Mandatory Access Control و seccomp چگونه در کنار هم کانتینرها را ایزوله و ایمن می‌کنند.

ادامه

مدیریت داده‌های ماندگار در داکر با Volume

کانتینرها به‌طور پیش‌فرض یک لایه نوشتنی موقت دریافت می‌کنند که با حذف کانتینر از بین می‌رود — این برای داده‌های موقتی خوب است، اما برای هر چیزی که ارزش نگهداری دارد ریسک‌آور است. این مقاله توضیح می‌دهد که volumeهای داکر چگونه داده‌های ماندگار را از چرخه حیات کانتینر جدا می‌کنند و نحوه ساخت، استفاده و اشتراک‌گذاری امن آن‌ها را بررسی می‌کند.

ادامه

شبکه‌های Overlay در داکر چگونه کار می‌کنند؛ نگاهی به VXLAN

شبکه‌های overlay امکان می‌دهند کانتینرهای روی هاست‌های مختلف طوری با هم ارتباط برقرار کنند که گویی یک شبکه مسطح مشترک دارند، و ستون فقرات بیشتر اپلیکیشن‌های میکروسرویس ابرمحور را تشکیل می‌دهند. این مقاله نحوه ساخت، رمزنگاری و تست یک شبکه overlay داکر روی یک کلاستر Swarm را بررسی کرده و فناوری تونل‌زنی VXLAN پشت آن را توضیح می‌دهد.

ادامه

اتصال کانتینرهای داکر به VLAN و توزیع بار با Swarm

فراتر از شبکه‌های ساده bridge، داکر امکاناتی برای اتصال مستقیم کانتینرها به VLANهای فیزیکی موجود، تفکیک خودکار نام سرویس‌ها و توزیع ترافیک در سراسر یک کلاستر Swarm ارائه می‌دهد. این مقاله درایور macvlan، سرویس داخلی Service Discovery و مکانیزم Ingress Load Balancing در Swarm را بررسی می‌کند.

ادامه

استقرار و مدیریت کلاستر چندنودی با Docker Swarm

Docker Swarm گروهی از نودهای داکر را به یک کلاستر امن و بسیار در دسترس با قابلیت ارکستریشن داخلی تبدیل می‌کند. این مقاله ساخت یک swarm چندنودی، استقرار یک اپلیکیشن میکروسرویس به‌صورت اعلانی و انجام به‌روزرسانی‌های تدریجی بدون از دست دادن سازگاری با وضعیت مطلوب را بررسی می‌کند.

ادامه

ساخت و اجرای اپلیکیشن‌های WebAssembly به‌عنوان کانتینر داکر

WebAssembly (Wasm) به‌عنوان جایگزینی سبک‌وزن برای کانتینرهای سنتی در حال ظهور است، و داکر اکنون از ساخت، اشتراک‌گذاری و اجرای اپلیکیشن‌های Wasm با ابزارهای آشنا پشتیبانی می‌کند. این مقاله نوشتن یک اپلیکیشن ساده Wasm با Spin، کانتینری کردن آن با داکر و اجرای آن به‌عنوان کانتینر Wasm را بررسی می‌کند.

ادامه