شبکه بندی و ارتباط ها در اکوسیستم داکر – راهنمای جامع
زمانی که مشغول ساخت سیستمهای توزیع یافته برای عرضه کانتینرهای داکر هستیم، ارتباط و شبکهبندی بسیار حائز اهمیت است. معماری مبتنی بر سرویس به طرز غیر قابل انکاری روی ارتباط بین کامپوننتها برای کارکرد صحیح تکیه دارد. در این راهنما به بررسی راهبردهای مختلف شبکهبندی و ابزارهای مورد استفاده برای قالببندی شبکههای مورد استفاده کانتینرها در حالتهای مطلوب میپردازیم. همچنین در نوشته «داکر چیست» نیز به معرفی جامع داکر و ارائه راهنمایی برای شروع به کار با آن پرداخته شده است.
در برخی موقعیتها میتوان از مزیت راهحلهای بومی داکر استفاده کرد؛ در حالی که در برخی موقعیتهای دیگر باید از پروژههای جایگزین بهره جست.
پیادهسازی شبکهبندی بومی داکر
داکر، خود بسیاری از موارد ضروری برای ارتباط بین کانتینرها و ارتباط کانتینر با میزبان را ارائه کرده است.
زمانی که پروسس داکر اجرا میشود، یک رابط bridge مجازی جدید به نام docker0 روی سیستم میزبان، پیکربندی میکند. این رابط به داکر امکان تخصیص یک subnet مجازی برای استفاده میان کانتینرهای اجرا شونده میدهد. این بریج به عنوان نقطه اصلی رابط بین شبکهبندی درون کانتینر و شبکهبندی روی میزبان عمل میکند.
زمانی که یک کانتینر از سوی داکر آغاز میشود، یک رابط مجازی جدید ایجاد میشود و یک آدرس در محدوده subnet بریج به آن داده میشود. این آدرس IP به شبکهبندی داخلی کانتینر قلاب میشود و مسیری از شبکه کانتینر به بریج docker0 روی سیستم میزبان ارائه میدهد. داکر به طور خودکار قواعد iptables را طوری پیکربندی میکند که امکان فوروارد کردن و پیکربندی NAT masquerading برای ترافیک با مبدأ docekr0 و مقصد دنیای خارج را فراهم میسازد.
کانتینرها چگونه سرویسها را در دسترس مصرفکنندهها قرار میدهند؟
کانتینرهای مختلف روی یک میزبان، توانایی دسترسی به سرویسهای کانتینرهای همسایه را بدون هیچ گونه پیکربندی اضافی دارند. سیستم میزبان به سادگی درخواستهای با مبدأ و مقصد رابط docker0 را به موقعیت مناسب مسیریابی میکند.
کانتینرها میتوانند پورتهای خود را در معرض دسترسی میزبان قرار دهند و بدین ترتیب ترافیک فوروارد شده از دنیای بیرون را دریافت کنند. پورتهای باز را میتوان از طریق انتخاب کردن یک پورت خاص یا دادن حق انتخاب پورت با عدد بزرگ و استفاده نشده تصادفی، به داکر در عمل به سیستم میزبان نگاشت کرد. داکر مسائل مربوط به هر گونه قواعد فوروارد و پیکربندی iptables برای مسیریابی صحیح بستهها در چنین موقعیتهایی را بر عهده میگیرد.
تفاوت بین باز کردن (Exposing) و انتشار (Exposing) یک پورت چیست؟
زمانی که تصویرهای کانتینر ایجاد میشوند یا کانتینری اجرا میشود، این گزینه وجود دارد که پورتها باز شوند یا انتشار یابند. تفاوت این دو وضعیت حائز اهمیت است؛ اما ممکن است در نگاه اول قابل تشخیص نباشد.
باز کردن یک پورت صرفاً به این معنی است که داکر متوجه خواهد شد پورت مورد نظر از سوی کانتینر استفاده میشود. این پورت در موارد آتی میتواند به منظور کشف سرویس یا لینک کردن استفاده شود. برای نمونه بررسی یک کانتینر اطلاعاتی در مورد پورتهای باز شده آن میدهد. وقتی کانتینرها لینک میشوند، متغیرهای محیطی در کانتینر جدید طوری تنظیم میشوند که پورتهای باز شده در کانتینر دیگر را نشان دهند.
کانتینرها به طور پیشفرض از سوی سیستم میزبان و همچنین هر کانتینر دیگر روی میزبان، صرفنظر از این که پورتهای آن باز است یا نه، قابل دسترسی هستند. باز کردن پورت صرفاً ثبت استفاده از پورت است و اطلاعاتی را در مورد نگاشتهای خودکار و لینک شدنها ارائه میکند.
برخلاف باز کردن پورت، انتشار یک پورت باعث میشود که آن پورت به رابط سیستم میزبان نگاشت شود و از سوی دنیای خارج مورد دسترسی قرار گیرد. پورتهای کانتینرها را میتوان به یک پورت خاص روی میزبان نگاشت کرد یا این که داکر میتواند به طور خودکار یک عدد بزرگ تصادفی از میان پورتهای استفاده نشده انتخاب کند.
منظور از لینک داکر چیست؟
داکر سازوکاری به نام «لینکهای داکر» (Docker links) ارائه کرده است که برای پیکربندی ارتباط بین کانتینرها استفاده میشود. اگر یک کانتینر جدید به کانتینر موجود لینک شود، کانتینر جدید اطلاعات اتصال کانتینر موجود را از طریق متغیرهای محیطی دریافت میکند.
این یک روش آسان برای ایجاد ارتباط بین دو کانتینر است که از طریق ارائه اطلاعات کامل به کانتینر جدید در مورد شیوه دسترسی به همتای خود عمل میکند. متغیرهای محیطی بر اساس پورتهای باز شده از سوی کانتینر دیگر ثبت میشوند. آدرس IP و دیگر اطلاعات در خود داکر ثبت میشوند.
پروژههایی برای بسط قابلیتهای شبکهبندی داکر
مدل شبکهبندی مورد بررسی فوق، نقطه شروع خوبی برای ساخت شبکهبندی بین کانتینری محسوب میشود. ارتباط بین کانتینرها روی یک میزبان تقریباً سرراست است و ارتباط بین میزبانها نیز از طریق شبکهبندی معمولی صورت میگیرد و تا وقتی که نگاشت پورتها به طرز صحیحی اجرا میشود و اطلاعات اتصال نیز به طرف دیگر ارائه میشود، همه چیز سرراست است.
با این وجود، بسیاری از اپلیکیشنها نیازمند شرایط شبکهبندی خاصی به منظور تأمین امنیت یا کارکردهای خاص خود هستند. کارکردهای شبکهبندی بومی داکر تا حدودی در این زمینهها محدود هستند. به همین دلیل پروژههای زیادی برای بسط اکوسیستم شبکهبندی داکر ایجاد شدهاند.
ایجاد شبکههای Overlay برای انتزاع توپولوژی زیرساختی
یک بهبود کارکردی که چند پروژه بر روی آن متمرکز شدهاند، ایجاد شبکههای overlay است. یک شبکه overlay در واقع شبکهای مجازی است که روی اتصالهای شبکه موجود ساخته میشود.
ایجاد شبکههای overlay، امکان ساخت محیطهای شبکهبندی با پیشبینی پذیری بالاتر و منسجمتر را روی میزبانهای مختلف فراهم میسازد. بدین ترتیب شبکهبندی بین کانتینرها صرفنظر از این که کجا اجرا میشوند سادهتر میشود. یک شبکه مجازی میتواند روی چندین میزبان گسترش یابد یا sunbet های خاصی به هر میزبان درون یک شبکه منسجم اختصاص یابد.
کاربرد دیگر شبکه overlay در ساخت کلاسترهای محاسباتی Fabric است. در محاسبات Fabric چند میزبان انتزاع مییابند و به صورت یک واحد منفرد و قویتر مدیریت میشوند. پیادهسازی لایه محاسبات Fabric به کاربر نهایی امکان میدهد که کلاستر را به جای میزبانهای منفرد، به صورت یک کل واحد مدیریت کند. شبکهبندی بخش عمدهای از این کلاسترینگ را تشکیل میدهد.
پیکربندی پیشرفته شبکهبندی
پروژههای دیگری نیز برای بسط قابلیتهای شبکهبندی داکر و ایجاد انعطافپذیری بیشتر ایجاد شدهاند.
پیکربندی پیشفرض برای شبکهبندی داکر کاملاً کاربردی است؛ اما تا حدود زیادی ساده محسوب میشود. این محدودیتها زمانی که با شبکهبندی چند پلتفرمی سروکار داریم خود را به طور کامل نشان میدهند؛ اما با این حال میتوانند با اغلب الزامات شبکهبندی سفارشی روی یک میزبان منفرد سازگار باشند.
کارکردهای بیشتر از طریق قابلیتهای «لولهکشی» (plumbing) اضافی ارائه میشوند. این پروژهها پیکربندیهای کاملاً آماده استفادهای ارائه نمیدهند؛ بلکه امکان اتصال بخشهای منفرد به هم و ایجاد سناریوهای مورد نیاز برای شبکههای پیچیده را فراهم میسازند. قابلیتهایی که به این ترتیب میتوان به دست آورد، از ایجاد شبکهبندی خصوصی بین میزبانهای خاص تا پیکربندی bridge ها، vlan ها و subnet ها و گیتویها متفاوت هستند.
ابزارها و پروژههای دیگری نیز وجود دارند که از ابتدا برای داکر توسعه نیافتهاند؛ اما غالباً در محیط داکر برای تأمین کارکردهای مورد نیاز استفاده میشوند. به طور خاص ارتباط شبکهبندی خصوصی کامل و فناوریهای تونلبندی غالباً برای ایجاد ارتباط امن بین میزبانها و میان کانتینرها استفاده میشود.
پروژههای رایج برای بهبود شبکهبندی داکر
چند پروژه هستند که روی شبکهبندی overlay برای میزبانهای داکر متمرکز شدهاند. انواع رایجتر به شرح زیر هستند:
- Flannel – از سوی تیم CoreOS توسعه یافته است. این پروژه در ابتدا برای ارائه subnet اختصاصی به هر میزبان از یک شبکه مشترک طراحی شده است. این شرایطی است که برای کارکرد ابزار هماهنگی kubernetes گوگل ضروری محسوب میشود؛ اما در موقعیتهای دیگر نیز مفید است.
- Weave – یک شبکه مجازی ایجاد میکند که هر یک از سرورهای میزبان را به همدیگر اتصال میدهد. این امر موجب سادهتر شدن مسیریابی میشود، زیرا در ظاهر هر کانتینر به یک سوئیچ شبکه منفرد اتصال یافته است.
- پروژههای زیر برحسب شبکهبندی پیشرفته با هدف پر کردن موارد ناقص با استفاده از اتصالهای اضافی ارائه شدهاند:
- pipework – به عنوان یک پروژه موقت تا زمانی که شبکهبندی بومی داکر پیشرفتهتر شود، ارائه شده است و امکان پیکربندی ساده پیکربندیهای سفارشی و پیشرفته شبکهبندی داکر را فراهم میسازد.
- یک نمونه مرتبط از نرمافزارهای از قبل موجود که برای بهبود کارکردهای داکر نیز استفاده میشود tinc است:
- tinc – یک نرمافزار VPN سبک است که با استفاده از تونلها و رمزنگاری پیادهسازی شده است. tinc راهحلی پایدار است که شبکه خصوصی را در معرض دید همه اپلیکیشنها قرار میدهد.
سخن پایانی
ارائه سرویسهای داخلی و خارجی از طریق کامپوننتهای کانتینرشده مدلی بسیار قدرتمند است؛ اما پیکربندیهای چنین شبکههایی یک اولویت محسوب میشود. با این که داکر برخی از این کارکردها را به طور بومی از طریق پیکربندی رابطهای مجازی، ایجاد subnet ها، iptables و مدیریت جدول NAT ارائه میکند؛ اما پروژههای دیگری نیز برای ارائه پیکربندیهای پیشرفتهتر طراحی شدهاند.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای علوم کامپیوتر
- آموزش داکر (Docker) برای توسعه دهندگان
- مجموعه آموزشهای ابزارها و راهکارهای مدیریت وبسایتها
- مجموعه آموزشهای شبکههای کامپیوتری
- اکوسیستم داکر (Docker) — کامپوننت های رایج
- آموزش نرم افزار مجازی سازی VMware Workstation
- ماشین مجازی چیست؟ — هر آنچه باید در این مورد بدانید
- داکر چیست ؟ | راهنمای شروع به کار با Docker — رایگان و به زبان ساده
- RPC چیست ؟ — Remote Procedure Call — به زبان ساده
==