راهنمای پیکربندی CoreDNS
CoreDNS یک سرور DNS با معماری افزونهمحور است که به آن اجازه میدهد برای موارد استفاده مختلف فراتر از خدمات DNS سنتی تطبیق یابد. این ویژگی آن را به گزینهای مناسب برای محیطهای پویا مانند Kubernetes تبدیل میکند.
CoreDNS در درجه اول یک سرور DNS است که میتواند نام دامنهها را به آدرسهای IP تبدیل کند. این سرور از پروتکلهای مختلف DNS مانند (DNS over HTTPS (DoH، و (DNS over TLS (DoT و DNS مبتنی بر UDP/TCP پشتیبانی میکند. در محیطهای کوبرنتیز، CoreDNS به عنوان سرور DNS کلاستر عمل میکند و نام سرویسها را به آدرسهای IP متناظر برای ارتباط داخلی تبدیل میکند.
همچنین CoreDNS از معماری افزونهمحور (Plugin) استفاده میکند که امکان انعطافپذیری و گسترش آسان را فراهم میکند. افزونهها قابلیتهایی همچون کش کردن (caching)، ثبت لاگ (logging)، توزیع بار (load balancing) و مدیریت سفارشی DNS را فراهم میکنند.
در ستون، تیم ما مسئولیت تضمین آپتایم و ارتقای CoreDNS را بر عهده دارد. به این معنا که ما اطمینان حاصل میکنیم که CoreDNS در دسترس باشد و نسخههای جدید آن را منتشر میکنیم تا همواره عملکرد و امنیت آن را بهبود دهیم. اما پیکربندی CoreDNS مطابق نیازهای خاص اپلیکیشنها، باید توسط مشتریان انجام شود. البته ما در ستون برای راهنمایی و مشاوره در مورد نحوهی پیکربندی CoreDNS شما را همراهی میکنیم. در صورت مواجهه با چالش در تنظیمات، میتوانید از تیم پشتیبانی ستون درخواست کنید تا تغییرات لازم را در پیکربندی CoreDNS اعمال کنند.
تغییر تنظیمات CoreDNS از طریق فایلی به نام CoreFile انجام میشود. در ستون شما میتوانید میتوانید با استفاده از پنل کوبرنتیز فایل CoreFile را تغییر دهید. برای این کار میتوانید با رفتن به صفحه سرویس کوبرنتیز، در صفحه تنظیمات کلاستر، و در تب افزونه ها، با انتخاب افزونه CoreDNS به این تنظیمات دسترسی پیدا کنید.
توجه: تمامی تنظیمات و پیکربندیهای ارائهشده در این مستند بر اساس قالبهای رسمی Helm Charts برای CoreDNS تهیه شدهاند تا سازگاری و قابلیت اطمینان در محیطهای Kubernetes تضمین شود. برای اطلاع بیشتر از جزییات این تنظیمات به این لینک مراجعه بفرمایید.
در صفحه مربوط به افزونهها، در ادیتور یک پیکربندی مشابه زیر مشاهده میکنید:
حال میتوانید با ویرایش کردن بخش config در این فایل افزونه مورد نظر خود را اضافه یا حذف کنید. برای مثال شما میتوانید به شکل زیر افزونهی log که افزونهای برای چاپ و مدیریت لاگ CoreDNS است را در تنظیمات خود اضافه کنید:
توجه: تحت هیچ شرایطی بخشی از config که به شکل زیر است(افزونه kubernetes) را تغییر ندهید. تغییر این بخش از کد منجر به بروز اختلال در کلاستر شما میشود:
در نهایت، پس از اعمال تغییرات، فایل coreFile کلاستر شما پس از لحظاتی بروزرسانی میشود. سپس میتوانید با دستور زیر برای اطمینان از اعمال تغییرات در کلاستر خود بررسی کنید.
افزونه forward پرسوجوهای DNS را به سرورهای DNS بالادستی ارسال میکند و امکان حل نامهای خارجی را فراهم میسازد. این افزونه از مکانیزمهای Load Balancing و Failover برای سرورهای بالادستی پشتیبانی میکند. مثال پیکربندی این افزونه شامل موارد زیر میشود:
- policy sequential: سرورهای بالادستی لیستشده را به ترتیب پرسوجو میکند تا پاسخ دریافت شود.
سرورهای بالادستی: شامل IPهایی مانند 9.9.9.9، 1.1.1.1 و دیگران.
افزونه Cache
افزونه cache عملکرد را با ذخیره پاسخهای پرسوجوی DNS برای مدت زمان مشخصی بهبود میبخشد. این افزونه بار روی سرورهای بالادستی را کاهش داده و سرعت پرسوجوهای تکراری را افزایش میدهد. در پیکربندی، TTL برای ۳۰ ثانیه تنظیم شده است:
- cache 30: پاسخهای DNS را برای ۳۰ ثانیه ذخیره میکند.
توجه: میتوانید مقدار TTL را افزایش دهید تا در صورت بروز اختلال سراسری در شبکهی زیرساخت ایران در ارتباط با DNS های خارجی، از Cache بهرهمند شوید.
افزونههای Health و Ready
افزونه health یک نقطه پایش سلامت ارائه میدهد و افزونه ready پروبهای آمادهسازی را در دسترس قرار میدهد. این افزونهها برای پایش و یکپارچهسازی CoreDNS با بررسیهای سلامت Kubernetes ضروری هستند. پیکربندی شامل:
- lameduck 5s: سرور DNS را برای پنج ثانیه پس از دریافت سیگنال خاموشی فعال نگه میدارد تا در طی انتقالها خدمات بدون وقفه ارائه شوند.
افزونه Prometheus
افزونه prometheus متریکهایی را برای مشاهدهپذیری جمعآوری میکند و عملکرد و رفتار پرسوجوی CoreDNS را قابل مشاهده میسازد. این افزونه با:
- prometheus 0.0.0.0:9153: متریکها را در پورت 9153 برای Prometheus قابل دسترس میکند.
افزونههای Loop و Reload
افزونه loop از حلقههای پرسوجوی بینهایت که ممکن است باعث اختلال شوند جلوگیری میکند. افزونه reload بهطور خودکار پیکربندی را زمانی که تغییرات تشخیص داده میشوند بارگذاری میکند و CoreDNS را بدون نیاز به راهاندازی مجدد بهروز نگه میدارد.
افزونه Loadbalance
افزونه loadbalance پرسوجوهای DNS را بین سرورهای بالادستی توزیع میکند و زمان پاسخدهی و قابلیت اطمینان را بهبود میبخشد. این افزونه از استراتژیهای مختلفی مانند round-robin و کمترین اتصالها پشتیبانی میکند.
در صورتی که در هر مرحله از نکات گفتهشده، دچار ابهام یا چالش شدید، میتوانید در کانال پشتیبانی ستون جهت راهنمایی و رفع مشکل، ارتباط برقرار کنید.