Kubernetes چیست؟ باید در نظر داشت که Kubernetes بهصورت پیشفرض ایمن نمی باشد، طبیعت پویای Kubernetes و هدف افزایش چابکی سازمانی که معمولاً در استفاده از آن لحاظ میشود، رویکردهای موجود برای امنیت سازمان و Cloud را به چالش میکشد. ایمنسازی، مشاهده و عیبیابی موفق میکروسرویسهای حیاتی در این محیط جدید نیازمند یک درک جامع از میزان ملاحظات لازم است. این ملاحظات شامل چالشهای سازمانی، چگونگی کمک رویکردهای Cloud-Native جدید به چالشها و بهترین راهکارهای جدید و نحوهی عملیاتی کردن آنها است.
بااینکه منابع زیادی برای Kubernetes وجود دارد، بررسی آنها و تشکیل یک استراتژی جامع امنیت و مشاهدهپذیری میتواند کار دشواری باشد که در بسیاری از مواقع منجر میشود به شکافهایی که تأثیر بسیار منفی روی وضعیت امنیتی مطلوب میگذارند.
هدف از این مقاله نیز ارائهی راهنمایی به افراد است تا بتوانند با توجه به تمام این ملاحظات، به سمت یک استراتژی امنیتی و مشاهدهپذیری جامع حرکت کنند و بهترین راهکارها و ابزار را که در مسیر انتقال برنامههای کاربردی به Kubernetes به ایشان کمک میکنند، بشناسند.
کاربران زیادی هستند که تمرکزشان پیادهسازی بارهای کاری خود در Kubernetes است، بدون اینکه به استراتژی امنیت و مشاهدهپذیری خود فکر بکنند، این افراد به مشکل برمیخورند زیرا باید راهی برای ایمنسازی و مشاهدهی این سیستم توزیعی پیچیده پیدا کنند. هدف این مقاله این است که تا جای ممکن این مشکلات را به حداقل برساند. در این مقاله ابزار مختلفی معرفی میشوند که Calico یکی از آنها است. هرچند Calico گزینهی بسیار عالی و محبوبی است، اما ابزار خوب دیگری مثل Weave Net ،Mware Tanzu ،Aqua Security و Datadog نیز وجود دارند.
مراحل استفاده از Kubernetes چیست
برای استفاده از Kubernetes بهصورت موفقیتآمیز، همیشه باید سه مرحلهی بهخصوص را پیروی کرد:
مرحلهی یادگیری
کاربران جدید با یادگیری نحوهی کار Kubernetes، تنظیم یک محیط Sandbox و فکر کردن به نحوهی استفاده از Kubernetes در آن محیط شروع به کار میکنند. در این مرحله، باید از منابع آنلاین Kubernetes که در دسترس هستند و همچنین از تکنولوژیهای متنباز استفاده کرد.
برای مشاوره رایگان و یا راهاندازی مجازیسازی دسکتاپ VDI با کارشناسان شرکت APK تماس بگیرید. |
مرحلهی پیشتولید/آزمایش
پسازاینکه کاربران با Kubernetes آشنا شده و نحوهی کار آن را درک کردند، باید در مورد یک استراتژی در سطح بالا برای استفاده از کوبرنتیس اقدام کرد. در این مرحله، معمولاً یک پروژهی آزمایشی انجام میشود تا کلاستر تنظیم گردد و چند برنامه کاربردی وارد شود. با پیشروی در این مرحله، متوجه خواهیم شد که باید از چه پلتفرمهایی استفاده کنیم و اینکه آیا این پلتفرمها On-Premises خواهند بود یا در کلود حضور خواهند داشت. اگر کلود را انتخاب کنیم، باید تصمیم بگیریم که آیا خودمان کلاستر را Host میکنیم یا از یک سرویس Kubernetes مدیریتشده از یک ارائهدهندهی کلود استفاده مینماییم.
بیشتر بخوانید: معرفی و نحوه عملکرد Kubernetes در vSphere به همراه بررسی مزایای این تکنولوژی
همچنین باید در مورد استراتژیهای لازم برای ایمنسازی برنامههای کاربردی فکر کرد. تا این زمان، متوجه خواهیم شد که Kubernetes به دلیل طبیعتی که دارد، متفاوت می باشد. این یعنی، پلتفرم جزئیات زیادی را در مورد شبکه، زیرساخت، Host و غیره جداسازی میکند و به همین دلیل استفاده از پلتفرم را برای برنامههای کاربردی بسیار ساده مینماید. به همین دلیل، روشهای کنونی مورداستفاده برای ایمنسازی برنامههای کاربردی، زیرساخت و شبکه کارآمد نیستند، پس حالا باید به امنیتی فکر کنیم که برای Kubernetes بهصورت Native وجود داشته باشد.
مرحلهی تولید
تا این مرحله، پروژهی آزمایشی انجام شده است و چندین برنامههای کاربردی با موفقیت وارد شدهاند. اکنون تمرکز ما روی اجرای برنامههای کاربردی حیاتی در تولید است و همچنین اینکه آیا باید اکثر برنامههای کاربردی خود را به Kubernetes منتقل کنیم یا خیر. در این مرحله باید برنامههای دقیقی برای امنیت، تطبیقپذیری، عیبیابی و مشاهدهپذیری داشته باشیم تا بهطور ایمن و کارآمد برنامههای کاربردی خود را به بخش تولید منتقل کنیم و از تمام مزایای پلتفرم Kubernetes بهره ببریم.
بیشتر بخوانید: بررسی VMware vSphere با Kubernetes و Cloud Foundation به عنوان یک پلتفرم انعطاف پذیر
محبوبیت و موفقیت Kubernetes بهعنوان یک پلتفرم برای برنامههای کاربردی مبتنی بر Container باعث شده است که افراد زیادی علاقهمند باشند از آن استفاده کنند. در چند سال گذشته، ارائهکنندگان خدمات کوبرنتیس مدیریتشده تلاش کردهاند دست به نوآوری بزنند و استفاده از آن را آسان کنند. شاید کاربران جدید وسوسه شوند از مراحل یادگیری و آزمایش عبور کنند و سریعتر به مرحلهی تولید برسند. اما این کار خطراتی دارد، پیش از اینکه برنامههای کاربردی حیاتی به کوبرنتیس وارد شوند، باید امنیت و مشاهدهپذیری را بهعنوان مراحل اولیه حیاتی مدنظر قرار داد؛ زیرا بدون آنها استفاده از Kubernetes ناقص و احتمالاً ناامن می باشد.
تیم امنیت
حرکت بهسوی برنامههای کاربردی Cloud Native بیشترین تأثیر را روی تیم امنیت میگذارد. برنامههای کاربردی Cloud Native، برنامههایی هستند که برای محیطهای کلودی طراحی شدهاند و با برنامههای کاربردی قدیمی متفاوتاند. مثلاً، این برنامه کاربردی روی زیرساخت شبکه توزیع میشوند.
تیم تطبیقپذیری
تیم تطبیقپذیری در یک سازمان مسئول است تا این اطمینان حاصل را حاصل نماید که عملیات و فرایندها در یک سازمانها پاسخگوی الزامات استانداردهای تطبیقپذیری اتخاذشده توسط سازمان باشند. در این مقاله هرچند جزئیات الزامات تطبیقپذیری و استانداردهای مختلف پوشش داده نمیشوند، اما استراتژیها، مثالها و ابزار لازم برای پاسخ به الزامات تطبیقپذیری ارائه میگردند.
تیم عملیات
تیم عملیات تیمی متشکل از مهندسان توسعهدهنده، ابزار و عملیات می باشد که مسئول ساخت و حفظ و نگهداری برنامههای کاربردی هستند. آنها تحت عنوان DevOps یا مهندسان قابل اطمینان سایت یا SRE نیز شناخته میشوند. آنها اطمینان حاصل میکنند که برنامههای کاربردی پاسخگوی سطح خدمات یا SLAها باشند. مشاهدهپذیری در یک پلتفرم Kubernetes به معنای توانایی درک جزئیات در مورد عملیات کلاستر خود، از طریق مشاهدهی داده از پلتفرم است. این روش مدرنِ مانیتورینگ یک برنامه کاربردی توزیعی است و در این مقاله آموزش داده میشود که مشاهدهپذیری چه اهمیتی در امنیت دارد و چطور میتوان آن را پیادهسازی کرد.
استراتژی امنیت و مشاهدهپذیری Kubernetes چیست
در مرحلهی آزمایش/پیشتولید در مسیر Kubernetes، باید به استراتژی امنیت فکر شود، پس این فصل برای تیم امنیت بسیار مهم است. همچنین این فصل به تیم شبکه، پلتفرم یا برنامه کاربردی نشان میدهد که چطور میتوانند بخشی از استراتژی امنیتی باشند و در مورد اهمیت همکاری بین امنیت، پلتفرم و تیمهای برنامه کاربردی بحث خواهد شد.
مفاهیم زیر که در مسیر رسیدن به استراتژی امنیت و مشاهدهپذیری مفید هستند،
- تفاوت ایمنسازی Kubernetes با روشهای امنیتی قدیمی
- چرخه عمر پیادهسازی بارهای کاری در کلاستر Kubernetes و بهترین راهکارها برای هر مرحله
- نحوهی پیادهسازی مشاهدهپذیری برای کمک به امنیت
- چارچوبهای امنیتی معروف و نحوهی استفاده از آنها در استراتژی امنیت
امنیت برای Kubernetes: دنیایی جدید و متفاوت
در این بخش دلیل تفاوت Kubernetes و اینکه چرا روشهای امنیتی قدیمی در پیادهسازی Kubernetes کار نمیکنند، بیان میشود. با حرکت بارهای کاری به کلود، متداولترین Orchestrator برای مدیریت آنها Kubernetes است، دلیل محبوبیت Kubernetes، طبیعت آن است؛ زیرا جزئیات زیرساخت را جداسازی میکند و به کاربران اجازه میدهد مشخص کنند که میخواهند کدام بار کاری اجرا شود و نتیجهی دلخواه آنها چیست. نیاز نیست که تیم برنامه کاربردی نگران این که بارهای کاری چگونه پیادهسازی میشوند، کجا اجرا میشود یا هر جزئیات دیگری مثل نحوهی کار شبکه باشند؛ فقط کافی است پیکربندیهایی را در Kubernetes تنظیم کنند تا برنامههای کاربردی پیادهسازی گردند.
Kubernetes با مدیریت ساخت بارهای کاری، خاموش شدن و ریاستارت به این جداسازی دست پیدا میکند. در یک پیادهسازی معمولی، میتوان با توجه به الزامات بار کاری، آن را روی هر منبع قابلدسترس در شبکه؛ Host فیزیکی یا ماشین مجازی برنامهریزی کرد. گروهی از منابع که بار کاری روی آن اجرا میشود، تحت عنوان کلاستر Kubernetes شناخته میشود. Kubernetes وضعیت بارهای کاری که بهعنوان Pod در Kubernetes پیادهسازی شدهاند را مانیتور میکند و طبق نیاز خود، دست به اقدامات اصلاحی میزند (مثلاً ریاستارت کردن Nodeهای بیپاسخ). این راهکار همچنین تمام اقدامات شبکه لازم برای ارتباط Podها و Hostها با یکدیگر را مدیریت مینماید. کاربران این توانایی را دارند که با انتخاب کردن از بین مجموعهای از افزونههای شبکه تحت پشتیبانی، در مورد تکنولوژی شبکه تصمیم بگیرند. بااینکه گزینههایی برای پیکربندی افزونههای شبکه وجود دارد، کاربران نخواهند توانست مستقیماً رفتار شبکه را کنترل کنند (یا برای تخصیص آدرس IP یا در یک پیکربندی عادی که Node در آن برنامهریزی شده است).
Kubernetes برای تیمهای امنیت، دنیای متفاوتی است، روش قدیمی آنها این است که «شبکهای از ماشینها» را بسازند و سپس بارهای کاری (برنامههای کاربردی) را وارد کنند. بهعنوان بخشی از فرایند ورود، باید IPها تخصیص داده میشد، شبکه طبق نیاز بهروزرسانی میگشت و قواعد کنترل دسترسی شبکه پیادهسازی میشد. پس از این مراحل، برنامه کاربردی برای کاربران آماده بود، این فرایند اطمینان حاصل میکرد که تیمهای امنیت کنترل زیادی داشته باشند و میتوانست بهراحتی برنامههای کاربردی را وارد و ایمنسازی کند. ایمنسازی برنامههای کاربردی ساده بود، زیرا برنامههای کاربردی از نظر IP اختصاص دادهشده، محل پیادهسازی و غیره استاتیک بودند.
اما در دنیای Kubernetes، بارهای کاری بهعنوان Imageهای Container ساختهشده و با استفاده از یک فایل پیکربندی yaml در یک کلاستر Kubernetes پیادهسازی میشوند. معمولاً این کار با فرایند توسعه یکپارچهسازی میشود و اکثر تیمهای توسعه از یکپارچهسازی مداوم یا CI و ارائهی مداوم یا CD استفاده میکنند تا اطمینان حاصل کنند که ارائهی نرمافزار بهسرعت و بهطور قابلاطمینانی انجام میگردد. این یعنی تیم امنیت دارای قابلیت دید محدودی به تأثیر هر تغییر برنامه کاربردی روی امنیت کلاستر است. اضافه کردن یک مرحله برای بررسی امنیت به این فرایند تأثیر معکوس دارد، زیرا تنها جای منطقی برای اضافه کردن این مرحله زمانی است که کد Commit میشود. فرایند توسعه پس از این نقطه خودکارسازی میشود و ایجاد اختلال در آن با مدل CI/CD در تضاد است. پس چطور میتوان بارهای کاری را در این محیط ایمنسازی کرد؟ برای درک بهتر نحوهی ایمنسازی بارهای کاری در Kubernetes، مهم است که مراحل مختلفی که بخشی از پیادهسازی یک بار کاری هستند درک شود.