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

شب ۱۷: مسیرها و میان‌افزارها در Nomad

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

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

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

  • بیان تنظیمات مسیر و سرویس در تگ‌های سرویس Nomad.
  • ارجاع به میان‌افزارهای مشترک ارائه‌دهندهٔ فایل.
  • اعتبارسنجی فیلتر endpointها هنگام تغییر مقیاس و شکست بررسی‌ها.

تمرین عملی

ارائه‌دهندهٔ فایل را به تنظیمات راه‌اندازی تولیدشده اضافه کنید:

providers:
  file:
    directory: /local/dynamic
    watch: true
  nomad:
    exposedByDefault: false
    watch: true
    constraints: "Tag(`edge.public=true`) && Tag(`edge.env=lab`)"

میان‌افزار قابل‌استفادهٔ مجدد را از job تولید کنید:

template {
  destination = "local/dynamic/policy.yml"
  change_mode  = "noop"
  data = <<-EOH
http:
  middlewares:
    standard:
      chain: {middlewares: [headers, compression]}
    headers:
      headers: {contentTypeNosniff: true, frameDeny: true}
    compression:
      compress: {}
EOH
}

ارائه‌دهندهٔ فایل Traefik پوشه را پایش می‌کند، بنابراین noop مانع restart شدن task برای تغییر صرفاً مسیریابی می‌شود. نوشتن اتمی قالب Nomad و رفتار watch در Traefik را در فایل‌سیستم و محیط اجرای خود بیازمایید. پوشه‌ای را mount کنید یا در آن بنویسید که داخل کانتینر دیده می‌شود؛ در task داکری Nomad، /local است.

تگ‌های برنامه را به‌روز کنید:

service {
  name = "whoami"
  port = "http"
  provider = "nomad"
  tags = [
    "edge.public=true",
    "edge.env=lab",
    "traefik.enable=true",
    "traefik.http.routers.whoami.rule=Host(`whoami.nomad.example.test`) && PathPrefix(`/app`)",
    "traefik.http.routers.whoami.entrypoints=web",
    "traefik.http.routers.whoami.middlewares=standard@file",
    "traefik.http.services.whoami.loadbalancer.healthcheck.path=/",
    "traefik.http.services.whoami.loadbalancer.healthcheck.interval=10s",
  ]
}
nomad job plan whoami.nomad
nomad job run whoami.nomad
nomad job scale whoami web 3
nomad service info whoami
for i in $(seq 1 12); do
  curl -si --resolve whoami.nomad.example.test:80:INGRESS_IP \
    http://whoami.nomad.example.test/app | sed -n '1p;/^Hostname:/p;/^X-Content-Type-Options:/Ip'
done

تمرین‌های خرابی

  • edge.env=lab را حذف و کنارگذاشته‌شدن سرویس بر اثر محدودیت را تأیید کنید.
  • @file را اشتباه بنویسید و خطای مسیریاب یا رفتار عدم تطابق را ببینید.
  • address_mode سرویس را به گزینه‌ای دسترس‌ناپذیر تغییر دهید و 502 یا 504 را ببینید.
  • بررسی یک allocation را ناموفق کنید و ببینید ارائه‌دهندهٔ Nomad آن را حذف می‌کند یا نه.
  • وضعیت را برگردانید و زمان همگرایی watch ارائه‌دهنده را تأیید کنید.

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

  • ویرگول یا پرانتز در تگ: هر تنظیم کامل Traefik را در یک رشتهٔ HCL نگه دارید.
  • میان‌افزار غایب است: مسیر فایل از کانتینر دیده نمی‌شود یا ارجاع @file ندارد.
  • مسیر هست اما endpoint نیست: بررسی‌های سرویس Nomad شکست می‌خورند یا آدرس و پورت نادرست‌اند.
  • دستور تغییر مقیاس با نسخهٔ Nomad یا ساختار job فرق دارد: در صورت تردید count گروه را در HCL تغییر دهید و plan و run اجرا کنید.

خودآزمایی

  1. چرا نام تگ‌های محدودیت traefik.* نیست؟ این فضای نام برای تنظیمات Traefik رزرو شده و برای محدودیت سفارشی مناسب نیست.
  2. مالک standard@file کدام ارائه‌دهنده است؟ ارائه‌دهندهٔ فایل.
  3. دو لایهٔ سلامت چیست؟ بررسی‌های ثبت Nomad و بررسی‌های اختیاری سلامت متعادل‌کنندهٔ بار سرویس Traefik.
  4. اثبات کنید: فقط با تغییر تگ محیط، سرویس را حذف و دوباره وارد کشف کنید.