راهکار کمکی دریافت ایمیج از رجیستریهای پابلیک
میدانیم برای دریافت Imageها در کوبرنتیز از راهکارهای کمکی مختلفی مانند Container Registry Mirror و Proxy استفاده میشود. در صورت نیاز به تغییر این تنظیمات در ماشینهای کارگر (Worker) در نودپولهای فعلی، بدون تاثیر پذیرفتن پادهای در حال اجرا، برای کوبرنتیز نسخهی ۱.۲۴ و نسخههای بهروزتر، امکان انجام وجود دارد که در این مستند روش انجام آن بیان میشود.
به دلایل امنیتی، IP های ماشینهای Worker، تنها از داخل Subnet مربوط به کلاستر قابل دسترسی است. در نتیجه برای اتصال ssh به ماشینهای کارگر (Worker Node) و تغییر پیکربندی containerd نیاز داریم یک ماشین کامپیوت دارای ExternalIP در داخل آن Subnet بسازیم. معمولا از این ماشین با نام Bastion یاد میشود. این ماشین نیاز به ریسورس زیادی ندارد و با حداقل ریسورس (مثلا از نوع b2) قابل استفاده است.
نکته: سابنت مربوط به کلاستر کوبرنتیز، در صفحهی مشخصات کلاستر در پنل قابل مشاهده است.
نکته: برای دریافت IP ماشینهای کارگر (worker) مورد نظر میتوانید از دستور kubectl get nodes -owide استفاده نمایید.
برای راحتی کار میتوانید از Ansible مشابه نمونهای که در انتهای این مستند آمده است، استفاده کنید. این انسیبل، در صورتی که آن را در فایلی با نام playbook.yml ذخیره کرده باشید؛ با دستوری مشابه زیر قابل اجرا است.
نکات
- در پارامتر inventory، لیست IP ماشینهای کارگری که میخواهید تنظیمات روی آن اعمال شود را وارد نمایید.
- در پارامتر mirror_url و default_mirror_url آدرس میرور مورد نظرتان را وارد نمایید.
- در پارامتر ProxyJump نیاز است username و IP ماشین Bastion خود را وارد نمایید.
یک مثال از دستور مشابه با مقادیر وارد شده:
محتوای فایل playbook.yml میتواند مطابق مثال زیر باشد. در این playbook، آدرس دو Mirror یکی برای رجیستریهای عمومی (Public Registry) پراستفاده و یکی به عنوان میرور پیشفرض (Default Mirror) تنظیم میشود. میرور کمکی ستون با آدرس https://mirror.registry.platform.ske.sotoon.ir نیز برای رجیستریهای معروف مشخص شده در کد تنظیم میشود.
توجه: در حال حاضر راهکار میرور ستون تنها برای رجیستریهای معروف زیر قابل استفاده است و تضمینی برای پشتیبانی رجیستریهای دیگر نمیدهد.
- docker.io
- ghcr.io
- gcr.io
- quay.io
- registry.k8s.io
توجه: راهکار میرور ستون، تنها امکان دریافت ایمیجهای عمومی (Public Images) را از طریق رجیستریهای عمومی (Public Registries) میدهد و در صورت تنظیم کردن Authentication روی یک ایمیج در رجیستری عمومی، امکان دریافت آن از طریق میرور ستون وجود ندارد. مثلا اگر ایمیج اپلیکیشن خود را روی ghcr.io قرار دادهاید (Push) و روی آن Authentication تنظیم کردهاید، میرور ستون آن را پشتیبانی نمیکند. برای حل این مساله میتوانید از رجیستریهای تحریمنشده استفاده کنید که نیازمند میرور نباشند یا ایمیج مورد نظر را با در نظر گرفتن موارد امنیتی عمومی کنید.
توجه: راهکار کمکی دریافت ایمیج از رجیستریهای عمومی (Public Registry) به عنوان یک محصول کمکی رایگان (Best Effort)، تنها در سرویس کوبرنتیز ستون، ارائه میشود و تضمین عملکردی (SLA) روی آن قابل تعریف نیست چرا که مسالهی نوع و پروتکلهای انواع محدودیتها و تحریمهایی که از سوی رجیستریهای عمومی روی IPهای ایران اعمال میشود، قابل کنترل نیست.
نکته: محیط اجرایی Containerd به ازای هر رجیستری عمومی یا اصطلاحا Namespace، میتواند از لیستی از Mirror ها استفاده کند. در نتیجه میتوانید برای هر namespace چندین میرور متفاوت تنظیم نمایید تا در صورت بروز مشکل در یکی، همچنان کلاستر در دریافت ایمیجها دچار مشکل نشود. مثلا برای docker.io میتوانید در کنار میرور ستون، میرورهای مد نظر خود را نیز اضافه کنید.
دو کامنت #StartSKEMirrorConfig و #EndSKEMirrorConfig برای سهولت تغییر این تنظیمات توسط پشتیبانی ستون به درخواست کاربر است، توصیه میشود آن را حذف نکنید.