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

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

شبکه OverlayVXLANDocker Swarm

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

مقدمه

شبکه‌های overlay امکان می‌دهند کانتینرهای در حال اجرا روی هاست‌های کاملاً متفاوت، مستقیماً از طریق یک شبکه مسطح، امن و لایه ۲ با یکدیگر ارتباط برقرار کنند، صرف‌نظر از توپولوژی فیزیکی شبکه زیرین. داکر این قابلیت را بر پایه libnetwork و درایور داخلی overlay آن می‌سازد، که پیکربندی آن ساده و به‌طور پیش‌فرض امن است.

ساخت یک Swarm

شبکه‌های overlay به فروشگاه کلید-مقدار و ویژگی‌های امنیتی swarm متکی هستند، بنابراین به یک کلاستر Swarm نیاز است. یک swarm دونودی را می‌توان با راه‌اندازی نود اول و پیوستن نود دوم با توکن تولیدشده ساخت:

docker swarm init
docker swarm join --token SWMTKN-1-... 172.31.1.5:2377

ارتباط بین نودها نیازمند باز بودن چند پورت است: 2377/tcp برای ترافیک مدیریتی، 7946/tcp و 7946/udp برای gossip در control plane، و 4789/udp برای ترافیک data plane مبتنی بر VXLAN.

ساخت یک شبکه Overlay

یک شبکه overlay رمزنگاری‌شده که کل swarm را در بر می‌گیرد، با یک دستور واحد قابل ساخت است:

docker network create -d overlay -o encrypted uber-net

فلگ -o encrypted تضمین می‌کند هم ترافیک control plane و هم data plane با استفاده از AES در حالت GCM رمزنگاری شوند، و کلیدهای رمزنگاری هر ۱۲ ساعت به‌طور خودکار چرخانده شوند. بدون این فلگ، به‌طور پیش‌فرض فقط ترافیک control plane رمزنگاری می‌شود، زیرا رمزنگاری data plane می‌تواند عملکرد را حدود ۱۰٪ کاهش دهد.

جالب اینجاست که یک شبکه overlay تازه‌ساخته‌شده فقط روی نود manager قابل‌مشاهده است تا زمانی که یک نود worker واقعاً کانتینری اجرا کند که به آن نیاز دارد — داکر شبکه‌های overlay را به‌صورت تنبل (lazy) گسترش می‌دهد تا gossip غیرضروری شبکه در سراسر کلاستر کاهش یابد.

اتصال کانتینرها و تست اتصال

به‌طور پیش‌فرض، فقط کانتینرهایی که متعلق به سرویس‌های swarm هستند می‌توانند به شبکه‌های overlay بپیوندند، مگر اینکه شبکه با فلگ --attachable ساخته شده باشد. استقرار یک سرویس با replicaهای پخش‌شده بین نودها این موضوع را عملاً نشان می‌دهد:

docker service create --name test \
  --network uber-net \
  --replicas 2 \
  ubuntu sleep infinity

پس از استقرار، کانتینرها روی نودهای فیزیکی مختلف می‌توانند مستقیماً با استفاده از IP شبکه overlay خود یکدیگر را ping کنند، و ردیابی مسیر یک hop واحد را تأیید می‌کند — اثباتی بر اینکه کانتینرها مستقیماً از طریق overlay ارتباط برقرار می‌کنند، کاملاً بی‌اطلاع از توپولوژی شبکه زیرینی که واقعاً از آن عبور می‌کنند.

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

در پشت صحنه، داکر شبکه‌های overlay را با استفاده از تونل‌های VXLAN (Virtual Extensible LAN) می‌سازد، که یک شبکه مجازی لایه ۲ روی زیرساخت لایه ۳ موجود ایجاد می‌کنند. از آنجا که VXLAN یک فناوری کپسوله‌سازی است، کاملاً برای روترها و سوییچ‌های شبکه زیرین (Underlay Network) شفاف است — آن‌ها فقط ترافیک معمولی IP/UDP را می‌بینند.

هر انتهای تونل به یک VXLAN Tunnel Endpoint (VTEP) ختم می‌شود که مسئول کپسوله‌سازی و رمزگشایی ترافیک هنگام ورود و خروج از تونل است. روی هر هاست، داکر یک sandbox شبکه با یک سوییچ مجازی ایجاد می‌کند، یک VTEP را به آن متصل می‌کند و سمت رو-به-هاست VTEP را به پورت UDP 4789 متصل می‌کند. سپس دو VTEP تونل VXLAN را تشکیل می‌دهند که تمام ترافیک overlay بین هاست‌ها را حمل می‌کند.

ردیابی مسیر یک بسته

وقتی یک کانتینر دیگری را از طریق overlay ping می‌کند، bridge محلی آن از طریق پروتکل gossip داکر که اطلاعات کانتینرها را در سراسر swarm منتشر می‌کند، یاد می‌گیرد چگونه از طریق VTEP به مقصد برسد. VTEP بسته را با یک هدر VXLAN که شامل VXLAN Network ID (VNID) صحیح است کپسوله می‌کند، آن را در یک بسته UDP آدرس‌دهی‌شده به VTEP راه‌دور می‌پیچد، و آن را در سراسر شبکه زیرین ارسال می‌کند. هنگام رسیدن، VTEP هاست دریافت‌کننده بسته را رمزگشایی کرده و به کانتینر مقصد صحیح ارسال می‌کند — همه این‌ها برای شبکه فیزیکی زیرین نامرئی است.

درایور overlay داکر همچنین از مسیریابی لایه ۳ بین چند subnet روی یک شبکه overlay واحد پشتیبانی می‌کند که به‌طور خودکار و بدون پیکربندی اضافی مدیریت می‌شود.

نتیجه‌گیری

چیزی که شبیه یک دستور ساده به نظر می‌رسد — docker network create -d overlay — سیستمی واقعاً پیچیده از سوییچ‌های مجازی، endpointهای تونل و کپسوله‌سازی را پنهان می‌کند که در کنار هم امکان ارتباط یکپارچه کانتینرها در سراسر هر شبکه زیرینی را فراهم می‌کنند. درک این مکانیزم هم برای عیب‌یابی استقرارهای تولیدی Swarm و هم برای گفتگوهای آگاهانه با تیم‌های شبکه ارزشمند است.

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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه