تا چند سال پیش هر وقت صحبت از کانتینرهای لینوکسی میشد، بلافاصله بحث تفاوت تکنولوژی کانتینر و مجازی‌سازی هم در کنارش باز می‌شد.

اما از سال ۲۰۱۷، بنیاد Open-Stack پروژه‌ای به اسم Kata-Container رو شروع کرده تا بتونه چالش‌های مرتبط با این تفاوت‌‌ها رو کم کنه و امنیت کانتینرهای لینوکسی رو افزایش بده. 

کاتا از کلمه‌ی یونانی (Καταπίστευμα (“ka-ta-PI-stev-ma گرفته شده که مفهومش  "اعتماد کسی رو نسبت به چیزی جلب کردن" هست. 

تو سال ۲۰۱۵، تصمیم اینتل برای افزایش امنیت ایزوله بودن کانتینرها با استفاده از تکنولوژی مجازی‌سازی اینتل یا (Intel® VT)، منجر به تولید پروژه‌ی Intel® Clear Containers شد.

از طرف دیگه، در همون زمان Hyper.sh که یک استارتاپ سطح بالا در زمینه‌ی تکنولوژی توی چین بود، پروژه‌ای رو به اسم RunV راه‌اندازی کرد که هدف و استراتژی مشابهی با Intel® Clear Containers داشت، اونا می‌خواستن کانتینرها رو به اصطلاح خودشون توی یک سندباکس امن قرار بدن.

بعد از اون، در اواخر سال ۲۰۱۷، این دو شرکت با پشتیبانی Open-Stack تصمیم گرفتن این دو پروژه رو در قالب یک پروژه واحد به نام Kata Container ادغام و معرفی کنن. 

Kata Container، توسط بنیاد Open-Stack اداره می‌شه، اما بخشی از پروژه‌های زیرساخت‌های ابری اون‌ها نیست. از دیدگاه فنی کاتا‌کانتینر‌ها رو می‌‌شه روی Open-Stack اجرا کرد‌، همونطور که می‌‌شه روی سایر راه‌حل‌های ابری مانند Azure و Google Cloud Platform هم اجرا بشه. 

توی این پست باهم کاتا کانتینرها رو بررسی می‌کنیم. اول می‌بینیم مشکل چی بوده و چرا این کانتینرها به وجود اومدن و بعد، نحوه‌ی کار و ویژگی‌هاشون رو می‌سنجیم.

چرا کاتا کانتینر؟ یعنی اصلا مشکل چی بوده؟

در چند سال گذشته، تکنولوژی‌های کانتینر بر بازار تسلط زیادی پیدا کردن و به عنوان استانداری در اجرای زیرساخت‌های مدرن IT در نظر گرفته می‌شن و به دلیل سبک بودن، سرعت بالا و کارایی نسبت به ماشین‌های مجازی سنتی، اولویت بالاتری دارن. اما یکی از نگرانی‌های اصلی، مربوط به بحث ایزوله کردن و امنیت برنامه‌هاست. 

زمانی که کانتینرها رو اجرا می‌کنین، به خصوص زمانی که کانتینرهای Multi-Tenant رو در یک سیستم‌عامل واحد اجرا می‌کنین، مسائل امنیتی اهمیت زیادی پیدا می‌کنن. کانتینرها به طور مشترک از  یک کرنل، I/O، شبکه و حافظه استفاده می‌کنن، در نتیجه کانتینرها کرنل مشترکی رو به اشتراک می‌گذارن که معمولا نسبت به استفاده از مجازی‌سازی سنتی، ایمنی کم‌تری داره. برای رفع این چالش، کاتا کانتینرها شکل گرفته‌اند.

کانتینرها در برابر ماشین‌های مجازی 

تفاوت اصلی بین کانتینرها و ماشین‌های مجازی (VMs) به نحوه‌ی مدیریت سیستم‌عامل محلی‌شون برمی‌گرده.

در یک محیط ماشین مجازی، هر ماشین مجازی سیستم‌عامل مربوط به خودش رو داره و برنامه‌ها و توابع از منابع سیستم‌عامل مخصوص به خودشون استفاده می‌کنن، نه از سیستم‌عامل میزبان؛ به همین علت هم هست که ماشین‌های مجازی از امنیت بالایی برخوردارن.

اما در محیط کانتینر، برنامه‌ها مستقیما به سیستم‌عامل میزبان متصل می‌شن و به صورت اشتراکی از اون استفاده می‌کنن و دقیقا همون میزان از منابع رو استفاده می‌کنن که برنامه‌ بهشون احتیاج داره؛ در نتیجه کانتینر‌ها سرعت بیشتری نسبت به ماشین‌های مجازی دارن.

حالا با هم بیش‌تر بررسی می‌کنیم که امنیت ماشین مجازی و سرعت کانتینرها از کجا میاد.

ماشین‌های مجازی و امنیت

برنامه‌ها و سیستم‌عامل‌های مهمان، بر روی ماشین‌های مجازی نصب و اجرا می‌شن. تمامی VMWare‌های ماشین‌های مجازی از هم جدا هستن. این جداسازی باعث می‌‌‌‌‌شه ضمن به اشتراک‌گذاری سخت‌افزار، ماشین‌های مجازی بتونن ایمن و مجزا عمل کنن.

در نتیجه‌، اگر یک ماشین مجازی در حال اجرا از کار بیفته و یا دچار عوامل مخرب و ویروس بشه، سایر ماشین‌های مجازی روی همون هاست، همچنان به کار خودشون ادامه می‌دن و خطری تهدیدشون نمی‌کنه.

Virtual Machine Isolation

کانتینرها و سرعت

راه‌اندازی و اجرای کانتینرها مزیت مشخصی نسبت به ماشین‌های مجازی داره، یعنی سرعت.

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

اما از اون‌جایی که برنامه‌های مبتنی بر کانتینر، به ایجاد سیستم‌عامل مهمان برای انجام و مدیریت توابع حیاتی متکی نیستن، می‌تونن در کسری از ثانیه راه‌اندازی و اجرا بشن. برنامه‌های داخل کانتینر هم می‌تونن سریع‌تر اجرا بشن، چون منابع کم‌تری از سیستم‌عامل میزبان (Host) رو استفاده می‌کنن.

Containerized Applications

کاتا کانتینر؛ امنیت ماشین‌های مجازی و سرعت کانتینرها

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

کاتا کانتینر چطوری کار می‌کنه؟

همانطور که گفتیم کاتا کانتینرها جایگزین کانتینرها نیستن، بلکه برای حل مشکل امنیت در کانتینر استفاده می‌شن و پل ارتباطی بین امنیت و ایزوله بودن ماشین‌های مجازی با سرعت کانتینرها هستند. 

همونطور که در شکل می‌بینین، هر کانتینر، ماشین‌مجازی مخصوص خودش رو داره و با استفاده از مجازی‌سازی از کرنل میزبان جدا شده و همینطور از سایر کانتینرها هم ایزوله می‌شه؛ در نتیجه این امکان وجود نداره که یک برنامه‌ی مخرب از طریق کرنل مشترک به کانتینرهای همسایه دسترسی پیدا کنه و امنیت اون‌ها رو زیر سوال ببره. 

کانتینرهای سنتی
Traditional Container


کاتا کانتینر
Kata Container

ویژگی‌ها

 کاتا کانتینرها ویژگی‌های زیر رو دارن:  

  • امنیت

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

  • عملکرد

کاتا کانتینرها در مقایسه با کانتینرهای سنتی از عملکرد، امنیت و قابلیت اطمینان بالایی برخوردارن. فناوری مجازی‌سازی اینتل (Intel® VT) و فناوری مجازی‌سازی اینتل برای کنترل I/O‌ ، توانایی پشتیبانی و تسریع در عملیات مجازی‌سازی رو دارن و با پشتیبانی از سناریوهای محاسبات ابری پیشرفته، بهبود عملکرد مستمر رو تضمین‌ می‌کنن. 

کاتا کانتینر به عنوان کانتینر استاندارد لینوکس، کارایی و عملکرد مستمر رو فراهم می‌کنه و با افزایش تقاضای ماشین‌های مجازی هم امکان جداسازی و ایزوله شدن فراهم می‌شه.

  • سازگاری

کاتا کانتینرها از استانداردهای صنعت از جمله فرمت کانتینر OCI، رابط Kubernetes CRI و همچنین فناوری‌های مجازی‌سازی پشتیبانی می‌کنن و  توسط CRI با کوربونتز سازگار می‌شن.

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

  • چند کاربره

در کاتا کانتینرها هر کانتینر، ماشین مجازی سبک وزن و مینی کرنل مخصوص خودش رو داره که از طریق مجازی‌سازی سخت‌افزاری، امکان جداسازی کانتینر رو فراهم می‌کنه. این امر نفوذ به لایه‌ی امنیتی رو سخت می‌کنه و امکان ارائه‌ی مدل‌های Containers-as-a-Service و Software-as-a-Service رو فراهم می‌کنه. چون کاربران یا Tenantهای مختلف می‌تونن توی یک خوشه قرار بگیرن، شما می‌تونین کلاستری از کانتینرها رو به آسانی مدیریت کنین. 

  • جامعه‌ی کاربری وسیع

کاتا کانتینرها توسط جامعه‌ی وسیعی از شرکت‌های مهم پشتیبانی می‌شن و کدهای اوپن سورس‌ اون‌ها به‌طور مستمر و فعال توسعه پیدا می‌کنه. Ant Financial (وابسته به علی بابا)، Huawei، ARM همگی از معماری کاتا کانتینر استفاده می‌کنن و می‌تونن در انجمنی که عضو هستن، راهنمایی‌های فنی رو با هم به اشتراک بذارن و از این طریق به هم کمک کنن.  

  • سادگی

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

در پایان…

بنابراین، اگر به دنبال راه‌حلی برای مدیریت بارهای کاری کانتینرهای برنامه‌تون هستین، راه‌حل مناسب شما استفاده از کاتا کانتینرها ست. 

صرف نظر از اندازه‌ی کلاستر، می‌تونین با اجرای دستورات لازم، از کاتا کانتینرها استفاده و اونو در برنامه‌تون فعال کنین. 

منابع:‌

https://katacontainers.io/
https://katacontainers.io/learn/