متاسفانه به دلیل مشغول کردن مردم به نیازهای اولیه، خیلی از استعدادهای ما مشغول رفع این نیازها هستند: دور زدن تحریم، داخلی و خارجی. حتما موقع مطالعه مقالات خارجی دیدید که نویسنده با چند کامند ساده یک زیرساخت کامل اجرا میکنه و سراغ مباحث پیشرفته تر میره. اما ما در اجرای چند کامند اول با خطای ناجوانمردانه ی 403 روبرو میشیم. حتی اگه نصب هم انجام بشه، چند روز بعد برای آپگرید کردن یا اضافه کردن یک نود جدید به کلاستر دوباره با همین مشکل مواجه میشیم. اما تسلیم نمیشیم. راهکارهای مختلفی رو بکار میگیریم. در ادامه چند راهکاری که رایج هست رو ذکر میکنم و در نهایت ارزون ترین و راحت ترین روشی که بهش رسیدم رو با شما به اشتراک میزارم.
1- شکن، 403 آنلاین و سرویس مشابه برای مشتریان داخلی بعضی هاستینگ ها: با تنظیم DNS بروی سرورهای این مجموعه ها، کل درخواست های ترجمه دامنه به آی پی رو بهشون بسپارید و هر سایتی که ادعا کردن یا مایل باشن رو خودشون میگیرن و براتون پروکسی میکنن. ضمن اینکه اکثرا کند هستند، شاید حس خوبی از اینکه کل درخواست های DNS شما توسط یک مجموعه مدیریت بشه نداشته باشید.
اگر با اکراه مجبور به استفاده هستید، یک روش ساده برای محدود کردن درخواست هایی که به این مجموعه ها ارسال میشه اینه که آدرس سروری که برای پروکسی کردن درخواست شما استفاده میکنن رو پیدا کنید و فقط برای دامین هایی که مایل هستید ترافیک رو به اونها ارسال کنید. (آی پی بعد @ آدرس دی ان اس سرور یکی از این سرویس دهنده هاست.)
root@linux:~# dig @178.22.122.100 k8s.io 50.7.87.83
در بالا میبینید که آی پی 50.7.87.83 بجای آی پی اصلی دامنه k8s.io که برای کابران ایرانی تحریم هست برگشت داده میشه. آی پی اصلی این دامنه رو در نتیجه کامند زیر مشاهده میکنید:
root@linux:~# dig @1.1.1.1 k8s.io 34.107.204.206
میتونید از فایل hosts در لینوکس یا ویندوز استفاده کنید که صرفا بروی سیستم خودتون آی پی سرور پروکسی این تحریم شکن ها رو فقط برای دامنه ی مورد نظر استفاده کنید و DNS کلی سیستم رو تغییر ندید:
# on windows: "C:\Windows\System32\drivers\etc\hosts" root@linux:~# nano /etc/hosts # Add the below line to the editor 50.7.85.222 k8s.io proxy.golang.org [other censored domains]
2- راه اندازی تحریم شکن خودتان: شاید بجز تحریم های خارجی، مایل باشید تحریم های داخلی رو هم بی اثر کنید تا بتونید از سرویس هایی مثل youtube.com و خیلی سایت های دیگه برای افزایش دانش و رفع نیازهای خودتون استفاده کنید. در این حالت یک سرویس محدود، گرون، یا ناامن و ارزون باید بخریم، یا سرویس خودمون رو راه بندازیم. آموزش های خوبی به فارسی برای راه اندازی این ابزارهای ضدسانسور که توسط توسعه دهنگان چینی برای درد مشابه توسعه داده شده وجود داره. بسته به میزان دسترسی به سرور داخلی با اینترنت کمتر محدود شده یا سرور خارجی با آی پی ای که در ISP های کمتری بلاک شده باشه، ستاپ های مختلفی میشه کرد که فکرمیکنم تا الان هممون یکبار تجربه کردیم یا هنوز داریم استفاده میکنیم. مشکل این روش میزان هزینه، مسدود شدن آی پی توسط داخل یا خارج و گاهی پیچیدگی راه اندازی امنشون هست.
3- میرورهای داخلی: برای ایمیج های داکر، سرویس docker.ir کیفیت خوبی تا الان ارائه کرده طبق تجربه شخصی خودم. اما سرویس دولتی iranrepo.ir برای ایمیج های کوبرنیتیز ناقص هست و با وجود مکاتبه و درخواست برای بهبودی سرویس، با وجود اینکه دسترسی نامحدود به اینترنت و همه چیز دارند، بی پاسخ مونده که متاسفانه همین انتظار هم میرفت. میرور داخلی دیگه ای برای کوبرنیتیز نمیشناسم. لطفا اگه میشناسید معرفی کنید.
4- میرور Alibaba Cloud به نام Aliyun: از این میرور میشه هم برای نصب پکیج های apt/yum و هم برای پول کردن ایمیج های registry.k8s.io استفاده کرد. نصب پکیج های apt/yum ساده ست اما به دلیل اینکه ایمیج های k8s.io رو روی پوشه ی google_containers ارائه میکنه، نیاز به کار بیشتری برای استفاده داره.
4-1- نصب پکیج های apt/yum: نصب کوبرنیتیز با استفاده از این میرور نکته خاصی نداره و فقط باید کامندهایی که گفته شده رو دنبال کنید.
https://developer.aliyun.com/mirror/kubernetes/
4-2- پول کردن ایمیج های k8s.io: دو راه وجود داره:
4-2-1- تنظیم رجیستری موقع انجام kubeadm init: میتونید از فلگ --image-repository استفاده کنید:
kubeadm init --image-repository=registry.aliyuncs.com/google_containers
برای تست کردن اینکه برای شما کار میکنه یا نه میتونید بجای init کردن، فقط پول کنید ایمیج هارو:
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
4-2-2- تنظیم رجیستری میرور برای containerd: در این حالت باید در فایل /etc/containerd/config.toml آدرس میرور رو معرفی کرد. فقط نکته ای که وجود داره اینه که باید مقدار v2 رو به اول آدرس اضافه کرد که آدرس صحیح برای رجیستری تولید بشه:
[plugins."io.containerd.grpc.v1.cri".registry] # ... [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] endpoint = ["https://registry.aliyuncs.com/v2/google_containers"]
همچنین اگر از ابزار Nexus استفاده میکنید برای کش کردن ایمیج ها در زیرساخت خودتون و کاهش سربار اینترنت در کلاسترهای چند نودی، و مایل به استفاده از Repository Connectors ها بخاطر پیچیدگیشون نیستید، میتونید از Url رجیستری ای که از نوع Proxy با مقصد https://registry.aliyuncs.com ایجاد کردید استفاده کنید. بجای خط آخر کدهای بالا، خط زیر رو قرار بدید:
endpoint = ["https://nexus.myteam.ir/repository/registry-k8s-io/v2/google_containers/"]
لطفا ری استارت کردن containerd بعد از اعمال تغییرات رو فراموش نکنید:
systemctl restart containerd.service
و اما تست:
root@linux:~# crictl -r unix:///run/containerd/containerd.sock pull registry.k8s.io/pause:3.9
Image is up to date for sha256:e6f1816883972d4be47bd48879a08919b96afcd344132622e4d444987919323c
همچنین اگر در ستاپ روش های گفته شده مشکلی داشتید خوشحال میشم بصورت رایگان راهنماییتون کنم و اگه به کمک بیشتری برای راه اندازی زیرساخت های پیچیده تر نیاز داشتید، با افتخار همراهتون باشم.
از وقتی که صرف مطالعه این مطلب کردید متشکرم.