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

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

MacvlanService DiscoveryIngress Load Balancing

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

مقدمه

فراتر از شبکه‌سازی ساده تک‌هاست، داکر روش‌هایی برای یکپارچه‌سازی مستقیم کانتینرها با شبکه‌های فیزیکی موجود، تفکیک خودکار نام سرویس‌ها و توزیع ترافیک در سراسر یک کلاستر ارائه می‌دهد. این مقاله درایور macvlan، service discovery داخلی و ingress load balancing در Swarm را بررسی می‌کند.

اتصال به VLANهای موجود با Macvlan

درایور macvlan به هر کانتینر آدرس IP و MAC اختصاصی خودش را مستقیماً روی شبکه فیزیکی خارجی می‌دهد، به‌طوری که مانند یک دستگاه واقعی به نظر می‌رسد، نه چیزی پنهان‌شده پشت نگاشت پورت. این ویژگی به‌ویژه برای اپلیکیشن‌های نیمه‌کانتینری که نیاز به ارتباط با سیستم‌های غیرکانتینری دارند مفید است.

macvlan عملکرد قوی‌ای ارائه می‌دهد زیرا از bridge یا نگاشت پورت اضافی اجتناب می‌کند، اما نیازمند این است که رابط شبکه هاست در حالت promiscuous اجرا شود — چیزی که اغلب در شبکه‌های سازمانی مجاز نیست و تقریباً همیشه در ابرهای عمومی مسدود است.

یک شبکه macvlan متصل به یک VLAN مشخص را می‌توان اینگونه ساخت:

docker network create -d macvlan \
  --subnet=10.0.0.0/24 \
  --ip-range=10.0.0.0/25 \
  --gateway=10.0.0.1 \
  -o parent=eth0.100 \
  macvlan100

این کار یک sub-interface تگ‌گذاری‌شده روی هاست ایجاد می‌کند و یک محدوده IP را منحصراً برای داکر رزرو می‌کند، زیرا macvlan هیچ مکانیزم داخلی برای تشخیص تداخل آدرس ندارد. یک کانتینر متصل به این شبکه به یک شرکت‌کننده کاملاً قابل‌مشاهده در VLAN 100 تبدیل می‌شود:

docker run -d --name mactainer1 --network macvlan100 alpine sleep 1d

درایور macvlan همچنین از VLAN trunking پشتیبانی می‌کند، که امکان می‌دهد چندین شبکه macvlan روی یک هاست، کانتینرها را به‌طور هم‌زمان به VLANهای مختلف متصل کنند.

عیب‌یابی مشکلات اتصال

هنگام بروز مشکلات شبکه، هم لاگ‌های daemon و هم لاگ‌های کانتینر ارزشمند هستند. سطح جزئیات لاگ daemon را می‌توان در /etc/docker/daemon.json با تنظیم debug و log-level تنظیم کرد. لاگ‌های کانتینر معمولاً با دستور زیر مشاهده می‌شوند:

docker logs 

یا docker service logs برای سرویس‌های Swarm، با فرض اینکه برنامه کانتینر لاگ‌ها را به STDOUT و STDERR به‌عنوان فرآیند اصلی خود ارسال می‌کند.

Service Discovery

داکر service discovery داخلی را از طریق یک سرور DNS تعبیه‌شده ارائه می‌دهد که به کانتینرهای روی یک شبکه مشترک امکان می‌دهد یکدیگر را با نام شناسایی کنند. وقتی یک کانتینر درخواستی مانند ping c2 صادر می‌کند، resolver محلی آن از سرور DNS داخلی داکر پرسش می‌کند، که نگاشت نام به IP هر کانتینری که با فلگ --name یا --net-alias راه‌اندازی شده را نگهداری می‌کند. این تفکیک فقط بین کانتینرهایی که شبکه مشترک دارند کار می‌کند.

سرورهای DNS سفارشی و دامنه‌های جستجو را می‌توان به‌ازای هر کانتینر پیکربندی کرد:

docker run -it --name custom-dns \
  --dns=8.8.8.8 \
  --dns-search=nigelpoulton.com \
  alpine sh

Ingress Load Balancing در Swarm

Swarm از دو روش برای publish کردن سرویس‌ها به بیرون پشتیبانی می‌کند: حالت ingress (پیش‌فرض) و حالت host. حالت ingress امکان دسترسی به یک سرویس از طریق هر نودی در کلاستر را فراهم می‌کند، حتی نودهایی که replica اجرا نمی‌کنند، به لطف یک مکانیزم مسیریابی لایه ۴ داخلی. در مقابل، حالت host فقط از طریق نودهایی که واقعاً یک replica اجرا می‌کنند دسترسی می‌دهد:

docker service create -d --name svc1 \
  --publish published=5005,target=80,mode=host \
  nginx

در حالت ingress، داکر به‌طور خودکار یک شبکه ویژه به نام ingress ایجاد می‌کند که هر نود swarm را به هم متصل می‌کند و هر ترافیکی که به پورت publish‌شده روی هر نودی برسد را به یک replica در دسترس مسیریابی می‌کند — و در صورت وجود چند replica، درخواست‌ها را به‌طور خودکار متعادل می‌کند.

نتیجه‌گیری

شبکه‌سازی macvlan، service discovery داخلی و مکانیزم مسیریابی ingress در Swarm، قابلیت‌های شبکه‌سازی داکر را فراتر از تنظیمات ساده تک‌هاست تکمیل می‌کنند. این‌ها در کنار هم امکان یکپارچه‌سازی کانتینرها با زیرساخت فیزیکی، شناسایی قابل‌اعتماد سرویس‌ها با نام یکدیگر، و توزیع یکپارچه ترافیک در سراسر یک کلاستر را فراهم می‌کنند.

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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه