پرش به محتویات

شب ۰۵: تنظیمات ایستا و پویا در Traefik

بخش ۰۵ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثال‌ها مطابق منبع با Traefik Proxy v3.7 نوشته شده‌اند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزموده‌شده یا digest مشخصی را ثابت کنید. تمرین‌ها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.

فهرست کامل دورهٔ ترافیک در ۳۰ شب

هدف‌های یادگیری

  • دنبال‌کردن درخواست در مدل اشیای Traefik.
  • شناخت تغییرهای نیازمند راه‌اندازی مجدد و ارائه‌دهنده‌های دارای بازخوانی زنده.
  • خواندن نام اشیا با پسوند ارائه‌دهنده و داده‌های تشخیصی API.

مدل ذهنی

client → entryPoint → router(rule + priority + TLS) → middleware chain
       → service(load balancer) → server/backend

تنظیمات نصب یا ایستا، entrypointها، ارائه‌دهنده‌ها، API و داشبورد، لاگ‌ها، متریک‌ها، ردیابی، حل‌کننده‌های گواهی و تنظیمات چرخهٔ عمر را می‌سازد. تنظیمات مسیریابی یا پویا، مسیریاب‌ها، میان‌افزارها، سرویس‌ها، گواهی‌ها و گزینه‌ها و مخزن‌های TLS و انتقال‌های سرور را تعریف می‌کند. هر شیء پویا به فضای نام یک ارائه‌دهنده تعلق دارد؛ مانند secure-headers@file، app@docker یا route@kubernetescrd.

تمرین عملی: تنظیم هر دو لایه

# static.yml — restart/redeploy to change
entryPoints:
  web: {address: ":80"}
providers:
  file:
    directory: /etc/traefik/dynamic
    watch: true
api: {dashboard: true}
ping: {}
log: {level: DEBUG}
# dynamic/routes.yml — atomically replace to hot-reload
http:
  routers:
    demo:
      entryPoints: [web]
      rule: "Host(`demo.example.test`)"
      middlewares: [response-header]
      service: demo
  middlewares:
    response-header:
      headers:
        customResponseHeaders: {X-Training-Night: "05"}
  services:
    demo:
      loadBalancer:
        servers:
          - url: "http://whoami:80"
docker run --rm traefik:v3.7 version
# Smoke-start mounted startup/routing files in an isolated lab and inspect startup logs;
# Traefik has no universal offline validator for every provider graph.
curl -sv -H 'Host: demo.example.test' http://127.0.0.1/
# Access the API only through a protected route or local port-forward:
curl -s http://127.0.0.1:8080/api/rawdata
curl -s http://127.0.0.1:8080/api/http/routers

عمداً service: typo را قرار دهید، فایل پویا را به‌صورت اتمی ذخیره کنید و لاگ‌ها، /api/rawdata و نتیجهٔ HTTP را مقایسه کنید. سپس service: demo را برگردانید. ارائه‌دهنده ممکن است هنگام نامعتبر بودن فایل جدید، آخرین تنظیمات معتبر را حفظ کند؛ بنابراین ثابت‌ماندن ترافیک را نشانهٔ موفقیت بازخوانی ندانید.

روش‌های پیشنهادی

  • برای هر شیء یک منبع اصلی انتخاب کنید؛ از نام تکراری و اولویت پنهان بپرهیزید.
  • تنظیمات ایستا را کوچک و بازبینی‌شده نگه دارید و نیاز آن به راه‌اندازی مجدد را لحاظ کنید.
  • تنظیمات پویا را ابتدا در فایل موقت بنویسید و در همان فایل‌سیستم تغییر نام دهید.
  • ارجاع میان ارائه‌دهنده‌ها را صریحاً با @provider مشخص کنید.
  • API و داشبورد را محافظت کنید؛ api.insecure فقط میان‌بری برای آزمایشگاه موقت است.
  • هم صفحهٔ کنترل، یعنی وجود شیء، و هم صفحهٔ داده، یعنی موفقیت درخواست، را اعتبارسنجی کنید.

نکته‌های عیب‌یابی

  • خطای 404 از Traefik: هیچ مسیریابی با entrypoint یا قاعده منطبق نشده، یا اولویت درخواست را جای دیگری فرستاده است.
  • مسیریاب در API وجود دارد اما قرمز است: میان‌افزار، سرویس یا گزینهٔ TLS ارجاع‌شده موجود نیست.
  • خطای 502 یا 504: مسیریابی منطبق شده؛ حالا پورت، شبکه، پروتکل و سلامت پشت‌صحنه را بررسی کنید.
  • فایل ویرایش‌شده بازخوانی نمی‌شود: اتصال پوشهٔ ارائه‌دهنده و رفتار نوشتن اتمی را بررسی کنید.
  • خطای name does not exist: پسوند درست ارائه‌دهنده، مثلاً auth@file، را اضافه کنید.

خودآزمایی

  1. entrypoint ایستا است یا پویا؟ ایستا.
  2. میان‌افزار ایستا است یا پویا؟ پویا.
  3. auth@file چه معنایی دارد؟ میان‌افزار auth که ارائه‌دهندهٔ فایل تأمین می‌کند.
  4. اثبات کنید: ارجاع سرویس را خراب کنید، خطا را در دادهٔ خام یا لاگ بیابید، اصلاح کنید و هدر سفارشی پاسخ را دریافت کنید.