شهریار بیات
شهریار بیات
خواندن ۳ دقیقه·۴ ماه پیش

بررسی عمیق تر کشف خودکار سرویس‌ها در traefik

کشف خودکار سرویس‌ها در traefik
کشف خودکار سرویس‌ها در traefik


حالا که با Traefik آشنا شدیم، توی این مقاله می‌خوام در مورد یکی از قابلیت‌های جذاب و پرکاربردش به اسم "کشف خودکار سرویس‌ها" (Automatic Service Discovery) صحبت کنم. این ویژگی باعث می‌شه سرویس‌ها و کانتینرهای جدید به‌صورت خودکار توسط Traefik شناسایی بشن و نیازی به کانفیگ دستی نداشته باشیم.




اول بریم ببینیم اصلا کشف خودکار سرویس‌ها چیه؟

فرض کن داری تو محیطی مثل Docker یا Kubernetes کار می‌کنی که پر از سرویس‌ها و کانتینرهای مختلفه. این سرویس‌ها ممکنه خیلی داینامیک باشن؛ یعنی هر لحظه بالا بیان یا از بین برن. اگر بخوای هر بار که سرویس جدیدی راه افتاد یا متوقف شد، تنظیمات رو به‌صورت دستی تغییر بدی، عملاً از کار و زندگی می‌افتی! اینجاست که قابلیت کشف خودکار سرویس‌های Traefik به دادمون میرسه. این ویژگی به Traefik این توانایی رو می‌ده که خودش سرویس‌های جدید رو کشف کنه و بر اساس تنظیماتی که براش تعریف کردی، به‌طور خودکار ترافیک رو به اون‌ها هدایت کنه.




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

تو Traefik دو روش برای کانفیگ کردن وجود داره: داینامیک و استاتیک

روش داینامیک همین لیبل هایی که توی داکر تعریف میشه یا anotation های کوبرنتیز رو میگن.

روش استاتیک کانفیگ هایی که توی فایل کانفیگ خود traefik مینویسیم یا توی cli وارد میکنیم یا متغیر هایی که تو فایل env میزاریم.


تو Traefik هر سرویسی که بخواد شناسایی بشه، باید از طریق label (توی Docker) یا annotation (توی Kubernetes) معرفی بشه. این لیبل ها به Traefik می‌گن که چطور و از کجا باید ترافیک رو به سرویس مربوطه هدایت کنه.

اما جالب‌ترین بخش ماجرا اینجاست که این پروسه کاملاً داینامیکه. مثلاً وقتی یه سرویس جدید میاد بالا، Traefik به کمک سیستم کشف خودکار سرویس‌ها، اون رو شناسایی می‌کنه و ترافیک رو به‌طور خودکار به سمتش هدایت می‌کنه، بدون اینکه لازم باشه دست به تنظیمات بزنی. برعکس، وقتی سرویس از کار می‌افته یا متوقف می‌شه، Traefik هم ترافیک رو به اون سرویس هدایت نمی‌کنه.

حالا بریم ببینیم این فرایند دقیقا چطور اتفاق می‌افته و under the hood چه خبره؟

وقتی Traefik به یه سیستم مدیریت کانتینر مثل Docker یا Kubernetes متصل می‌شه، به APIهای اون‌ها گوش می‌ده. مثلاً تو Docker، Traefik به Docker Daemon متصل می‌شه و وقتی کانتینر جدیدی راه‌اندازی می‌شه یا سرویس جدیدی بالا میاد، این تغییرات رو از طریق Docker Events دریافت می‌کنه. به همین ترتیب، وقتی سرویسی از کار می‌افته یا حذف می‌شه، Traefik از این تغییرات هم مطلع می‌شه و تنظیمات خودش رو آپدیت می‌کنه.

این یعنی هر تغییری تو سیستم Docker یا Kubernetes فوراً توسط Traefik دریافت و پردازش می‌شه و این پردازش به‌طور کامل داینامیکه. تو Kubernetes هم Traefik همین روش رو استفاده می‌کنه و از APIهای Kubernetes برای شناسایی و مدیریت سرویس‌ها کمک می‌گیره.



چه تنظیماتی لازمه؟

برای اینکه سرویس‌ها به‌طور خودکار توسط Traefik کشف بشن، باید براشون label یا annotation مناسب تعریف بشه. مثلاً تو Docker، می‌تونی این برچسب‌ها رو به کانتینرت اضافه کنی:

labels: - &quottraefik.enable=true&quot - &quottraefik.http.routers.myservice.rule=Host(`example.com`)&quot -&quottraefik.http.services.myservice.loadbalancer.server.port=80&quot

این مثال نشون می‌ده که کانتینر موردنظر ترافیک رو به پورت ۸۰ هدایت می‌کنه و هر درخواست HTTP که به دامین example.com بیاد، به این کانتینر فرستاده می‌شه. همین روند تو Kubernetes هم به همین شکل انجام می‌شه با استفاده از annotationها.



مقایسه با Nginx و Caddy

خب، حالا که با Traefik و قابلیت کشف خودکار سرویس‌هاش آشنا شدیم، بد نیست یه مقایسه کوچیک هم با ابزارهای دیگه مثل Nginx و Caddy داشته باشیم. تو Nginx، هر وقت سرویس جدیدی میاد بالا یا کانفیگ تغییر می‌کنه، باید فایل‌های کانفیگ به‌صورت دستی ویرایش بشن و Nginx هم باید reload بشه. اما تو Traefik این کارها داینامیک و خودکار انجام می‌شه. Caddy هم تا حدودی شبیه Traefik عمل می‌کنه و قابلیت‌های خوبی برای کشف سرویس‌ها داره، ولی توی یکپارچگی با سیستم‌های پیچیده مثل Kubernetes و Docker به‌اندازه Traefik انعطاف‌پذیر نیست.




نتیجه‌گیری

ابزار Traefik با قابلیت کشف خودکار سرویس‌ها کار رو تو محیط‌های پیچیده و داینامیک مثل Docker و Kubernetes خیلی راحت کرده. این ویژگی نه‌تنها نیاز به تنظیمات دستی رو از بین می‌بره، بلکه باعث می‌شه زیرساختت همیشه آپدیت بشه و ترافیک بدون هیچ وقفه‌ای به سمت سرویس‌های درست هدایت بشه.

اگر تو محیط‌هایی کار می‌کنی که سرویس‌ها مدام در حال تغییرن، Traefik یه انتخاب عالیه که کارها رو برات راحت و بی‌دردسر می‌کنه.

traefikdockerkubernetes
شهریار بیات هستم برنامه نویس مهندس نرم افزار و مدیر فنی پلتفرم هومسا علاقه مند به تکنولوزی های روز و مباحث مرتبط به SRE و devops اینجا تجربیاتمو باهاتون به اشتراک میزارم
شاید از این پست‌ها خوشتان بیاید