آشنایی با Network در IaaS


SDN
SDN

در این پست قصد داریم پس از بیان یک مقدمه پیرامون مفهوم زیرساخت به عنوان سرویس (IaaS)، به بیان مفهوم شبکه (Network) در این ساختار بپردازیم.

مقدمه:

در سال‌های اخیر با رشد تکنولوژی‌های حوزه مخابرات نظیر ظهور نسل پنجم (5G) و ششم (6G) تلفن همراه، اینترنت اشیاء، شبکه‌های ارائه محتوا (CDNs)، گسترش زیرساخت‌های مبتنی بر مخابرات نوری همچون فیبر نوری (Fiber Optic)، بهبود روش‌های ارسال و آشکارسازی دیتا در شبکه‌های بی‌سیم (Wireless) و ... موجب رشد روز افزون تکنولوژی‌های حوزه فناوری اطلاعات (IT) شده است. استفاده از پیام‌رسان‌ها، مشاهده ویدئو بر بستر اینترنت، ارسال صوت بر بستر اینترنت (VoIP)، گسترش تراکنش‌های بانکی و موارد بسیاری دیگر شواهدی بر این ادعا هستند.

مطابق با مطالب گفته‌شده، سازمان‌های گوناگون برحسب خدماتی که ارائه می‌دهند با حجم زیادی از دیتا مواجه خواهند بود که مدیریت و نگهداری از آن‌ها کاری سخت و هرینه‌بر است. ساختارهای ابری (cloud) از راهکارهایی هستند که برای حل این مشکلات ارائه شده اند. لازم به توضح است که حجم زیاد دیتا تنها انگیزه لازم برای حرکت به سمت ابر نیست. بسیاری از مواقع سازمان‌ها با حجم زیادی از محاسبات روبرو هستند و سخت‌افزارها و تجهیزاتی که در اختیار دارند پاسخ‌گوی نیاز آن‌ها نسیت و به همین دلیل لازم خواهند داشت از تجهیزاتی با قدرت پردازشی بالاتر استفاده کنند. ساختارهای ابری تامین‌کننده نیازهای کاربران به منظور ذخیره‌سازی داده‌های حجیم (Big Data) و پردازش‌های پیچیده خواهند بود.

در ادامه، ابتدا به معرفی کلی مفهوم زیرساخت به عنوان سرویس می‌پردازیم و پس از آن سعی می‌کنیم اهمیت و جایگاه شبکه‌بندی (Networking) را در این ساختار بیان کنیم.

معرفی کلی:

مطابق مفاهیم بیان‌شده در قسمت مقدمه اهمیت ساختارهای مبتنی بر ابر مشخص شد. سرویس‌های ابری معمولا به دسته‌های زیر تقسم می‌شوند:

  • زیرساخت به عنوان سرویس (IaaS)
  • نرم‌افزار به عنوان سرویس (SaaS)
  • پلتفرم به عنوان سرویس (PaaS)
  • دیتابیس به عنوان سرویس (DBaaS)
  • شبکه به عنوان سرویس (NaaS)

شکل زیر جایگاه بخش‌های ذکرشده در بالا را بهتر نشان می‌دهد.

IaaS, PaaS, SaaS
IaaS, PaaS, SaaS

در اینجا قصد داریم به طور خاص به زیرساخت به عنوان سرویس (IaaS) و نیز مفهوم شبکه (Network) در آن ساختار بپردازیم.

مفهوم IaaS در سال 2012 توسط کمپانی اوراکل برای بیان مدلی از سرویس‌های ابری ارائه شد که در آن منابع محاسباتی و زیرساختی در ابرهای عمومی یا خصوصی نگهداری می‌شدند. IaaS کاربران را قادر می‌سازد تا با بهره‌گیری از واسط‌های برنامه‌نویسی (APIs)، بدون نیاز به ارتباط مستقیم با سخت‌افزارها و تجهیزات زیرساختی، نیازمندی‌های خود در حوزه پردازش و ذخیره‌سازی دیتا را رفع کنند.

در ساختارهای ابری با بهره‌گیری از Hypervisor های متعدد نظیر Xen، Oracle VirtualBox، Oracle VM، KVM، VMWare ESX/ESXi می‌توان نمونه‌های متعددی از ماشین‌های مجازی را بر روی یک سرور فیزیکی به اجرا در آورد.

type-1 and type-2 hyoervisor
type-1 and type-2 hyoervisor


برای فراهم آوردن و مدیریت منابع زیرساختی ابری در قالب IaaS باید از تکنولوژی‌های cloud orchestration نظیر OpenStack, Apache CloudStack یا OpenNebula استفاده کرد. به بیان دیگر برای ایجاد زیرساخت به عنوان سرویس باید پس از نصب Hypervisor و ماشین‌های مجازی (VMs)، نرم‌افزارهای مربوط به Orchestration را نصب کنیم تا بتوانیم منابع زیرساختی را مدیریت و کنترل کنیم.

Cloud Orchestrator
Cloud Orchestrator

لازم به توضیح است که مدیریت زیرساخت ابری شامل مدیریت و نظارت بر احراز هویت کاربران، مدیریت منابع محاسباتی و ذخیره‌سازی، مدیریت نحوه اتصال و شبکه‌بندی کاربران و ... می‌شود. همان‌طور که در ابتدای پست گفته شد قصد داریم راجع به شبکه (Network) در IaaS توضیح بدهیم.

شبکه در IaaS:

دیتاسنترهای امروزی شبکه‌ها شامل تجهیزات بسیار زیادی هستند. سرورها، سوییچ‌ها، روترها و منابع حافظه‌ای که در گذشته فضای زیادی را در دیتاسنترها اشغال می‌کرند امروزه در قالب ماشین‌های مجازی ارائه می‌شوند. این رویکرد موجب می‌شود بتوانیم از منابع سخت‌افزاری و فضای دیتاسنتر به نحو بهینه‎‌تر استفاده بکنیم و توانایی Automation را افزایش خواهد داد. فرآیند جایگزینی منابع سخت‌افزاری با ماشین‌های مجازی، مجازی‌سازی (Virtualization) نام دارد که به مدیران شبکه و کاربران اجازه می‌دهد بتوانند منابع در اختیار خود ار بهتر مدیریت کنند.

شبکه‌بندی (Networking) در ساختار‌های ابری به چه معناست؟

تا این قسمت از بحث اهمیت ساختارهای ابری برای ما مشخص شده است و متوجه شدیم که برای استفاده بهینه، درست و هدفمند از منابعی که در اختیار داریم باید آن‌ها را مدیریت کنیم. در گذشته با تجهیزات مخصوص شبکه نظیر سوییچ (switch)، مسیریاب (router)، دیوار آتش (Firewall) و ... مواجه بودیم و کمپانی‌های معروفی همچون سیسکو (Cisco) از سازندگان اصلی این تجهیزات به شمار می‌آمدند. اما با گسترش دنیای نرم‌افزار سعی شد بخش‌های نرم‌افزاری از بخش‌های سخت‌افزاری جدا شوند. به این ترتیب کافی است سازندگان سخت‌افزارهای استاندارد را بسازند و برنامه‌نویسان، در قالب گروه‌هایی مستقل از سازندگان تجهیزات، به برنامه‌نویسی و ایجاد منطق مناسب برای این تجهیزات بپردازند. به این شیوه افراد و گروه‌های مختلف قادر خواهند بود با استفاده از تجهیزات موجود، قابلیت‌ها و عملکردهای (functions) مورد نظر خود را ایجاد کنند.

Data Plane and Control Plane
Data Plane and Control Plane


شبکه‌های دیتا مانند هر شبکه دیگری از تعداد بسیار زیادی مولفه تشکیل شده‌اند که هرکدام وظایف خاص خود را انجام میدهند. فرض کنید شما در یک شرکت هستید و سازمان شما چندین شعبه در مناطق مختلف کشور دارد. شرکت شما علاقمند است شبکه مخصوص خود را داشته باشد که از طریق آن شعبه‌های مختلف بتوانند با یکدیگر در ارتباط باشند (مثل شبکه‌ی مخصوص یک بانک). هنگامی‌که از تجهیزات سنتی استفاده می‌شد لازم بود افرادی در محل‌های استقرار تجهیزات حاضر شوند و با توجه به نوع تجهیز و ایجاد تنظمات مناسب (configuration)، شبکه‌بندی مناسب برای ایجاد یک شبکه خصوصی (Private Network) را ایجاد کنند. اما امروزه و مطابق با استانداردهای جدیدی که سازندگان باید رعایت کنند، مستقل از نوع تجهیزات، قادر هستیم تنظیمات مورد نظر را از راه دور و نه فقط بر روی یک تجهیز، بله بر روی تجهیزات متعدد و به یکباره انجام دهیم.

حال فرض کنید شما تجهیزات بسیار زیادی در اختیار دارید و میخواهید زیرساخت را به عنوان سرویس ارائه دهید. شما باید قادر باشید با استفاده از تجهیزات استانداردی که در اختیار دارید شبکه‌های مورد انتظار کاربران خود را ایجاد کنید. حتی کاربران نیز باید بتوانند شبکه‌های مورد نظر خود را بسازند و همه این موارد باید بصورت نرم‌افزاری و از طریق پروتکل‌ها و واسط‌های برنامه‌نویسی انجام شود. شکل زیر گویای این واقعیت است.

Software Defined Networking
Software Defined Networking

شکل زیر نیز نمایی کلی از پروژه Neutron را نشان می‌دهد که برای مدیریت شبکه‌بندی در نرم‌افزار OpenStack پیاده‌سازی شده است.

Neutron Project in OpenStack Software
Neutron Project in OpenStack Software

همانطور که از شکل بالا نیز واضح است پیکربندی‌های (Configurations) مورد نظر که از طریق سرور Neutron ایجاد می‌شود در یک پایگاه داده ذخیره می‌شوند. همچنین دستوراتی که سرور Neutron صادر می‌کند از طریق کانال ارتباطی مناسب بر روی تجهیزات اعمال خواهد شد.

اکنون که با مفاهیم IaaS و Network آشنا شده‌ایم به طور عمیق‌تر به بررسی مولفه‌های مورد نیاز برای ارائه سرویس مناسب می‌پردازیم.

  • سوییچ (Switch):
    در معماری جدید سوییچ مجازی به صورت یک اپلیکیشن یا سرویس نرم‌افزاری تعریف می‌شود که ماشین‌های مجازی (Virtual Machines) را به شبکه مجازی (Virtual Network) به صورت لایه 2 در مدل OSI متصل می‌کند. سوییچ‌های مجازی در قالب‌های متعدد و بصورت متن‌باز (Open Source) نظیر Linux Bridge و Open vSwitch ارائه شده‌اند و از پروتکل‌هایی نظیر NetFlow، SPAN، RSPAN، LACP و 801.1q VLAN Tagging پشتیبانی می‌کنند. ارکستراتور (Orchestrators) های ابری ممکن است قادر نباشند از همه این ویژگی‌ها پشتیبانی کنند. در این شرایط لازم است کاربران و مدیران شبکه تلاش کنند ت واسط‌های برنامه‌نویسی مناسب برای خودشان را ایجاد کنند. علاوه بر پشتیبانی از VLAN Tagging، سوییچ‌های مجازی از پروتکل‌های مبتنی بر Tunneling نظیر VXLAN و GRE نیز پشتیبانی می‌کنند.
  • مسیریاب (Router):
    از مسیریاب‌ها برای ایجاد مسیر مناسب به منظور هدایت بسته‌ها از مبدا به مقصد استفاده می‌شود. در معماری جدید، مسیریاب‌ها به صورت مجازی و در قالب‌های زیر ایجاد می‌شوند:
    1. IP Forwarding
    2. IP Tables
    3. Linux Namespace
    هر یک از Namespace ها دارای IP Table، Routing Table و interface های مخصوص خود هستند. با پیکربندی مناسب مسیریاب‌ها می‌توانیم به ترافیک مورد نظر خود اجازه عبور یا عدم عبور را بدهیم و امنیت سیستم را کنترل کنیم.
  • متعادل‌کننده بار (Load Balancer):
    از متعادل‌کننده‌های بار به منظور توزیع بار محاسباتی و پردازشی بر روی سرورهای مختلف استفاده می‌شود. هنگامی که سرویس زیرساختی ارائه می‌دهیم، با توجه به اهمیت سرویس باید قادر باشیم پایداری آن را نیز تامین کنیم که این کار به کمک HAProxy ها انجام می‌شود. به عنوان مثال پروژه Neutron به طور پیش‌فرض از HAProxy به عنوان Load Balancer استفاده می‌کند.
  • دیوار آتش (Firewall):
    امنیت شبکه از مسائل مهمی است که باید در ارائه زیرساخت مورد توجه قرار گیرد. برای تامین امنیت باید ترافیک‌های ورودی به شبکه و خروجی از آن تحت کنترل باشند. ارکستراتورهای مختلف نظیر OpenStack واسط‌های برنامه‌نویسی را در اختیار کاربران قرار می‌دهند که به کمک آن‌ها می‌توان ترافیک را کنترل کرد. این واسط‌های برنامه‌نویسی از قابلیت‌های زیر استفاده می‌کنند:
    1. Security Groups --> instance port level
    2. Security Policies --> instance and router port level