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

شب ۱۵: کشف سرویس و شبکه در Nomad

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

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

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

  • بررسی صفحهٔ کنترل Nomad، clientها، ثبت سرویس‌ها و فرض‌های شبکه.
  • ثبت سرویس دارای بررسی سلامت با تگ‌های سازگار با Traefik.
  • انتخاب آگاهانهٔ کشف بومی Nomad یا Consul Catalog.

تمرین عملی: بررسی مقدماتی و سرویس نمونه

nomad status
nomad server members
nomad node status
nomad node status -verbose NODE_ID
nomad operator autopilot health
nomad acl token self  # ACL-enabled lab; do not paste the Secret ID into notes.
# whoami.nomad
job "whoami" {
  datacenters = ["dc1"]
  type = "service"
  group "web" {
    count = 2
    network {
      mode = "bridge"
      port "http" { to = 80 }
    }
    service {
      name         = "whoami"
      port         = "http"
      provider     = "nomad"
      address_mode = "alloc"
      tags = [
        "edge.public=true",
        "traefik.enable=true",
        "traefik.http.routers.whoami.rule=Host(`whoami.nomad.example.test`)",
        "traefik.http.routers.whoami.entrypoints=web",
      ]
      check {
        name     = "http-ready"
        type     = "http"
        path     = "/"
        interval = "10s"
        timeout  = "2s"
      }
    }
    task "whoami" {
      driver = "docker"
      config { image = "traefik/whoami:v1.11"; ports = ["http"] }
      resources { cpu = 100; memory = 64 }
    }
  }
}
nomad job validate whoami.nomad
nomad job plan whoami.nomad
nomad job run whoami.nomad
nomad job status whoami
nomad service info whoami
nomad alloc status ALLOC_ID

اگر clientها تنظیمات bridge در CNI ندارند، در آزمایشگاه موقت از network { mode = "host" } استفاده و پیامدش را مستند کنید: حالت host ساده‌تر است اما پورت میزبان مصرف می‌کند و جداسازی را کاهش می‌دهد. حالت آدرس را بی‌توضیح تغییر ندهید؛ Traefik باید آدرسی دریافت کند که از allocation خودش دسترس‌پذیر باشد.

کشف بومی Nomad مستقیماً ثبت‌های سرویس Nomad را می‌خواند. Consul Catalog زمانی مناسب است که بارهای کاری در Consul ثبت می‌شوند و Consul مرجع کاتالوگ شماست، یا مسیریابی آگاه از Connect لازم است. فعال‌کردن هر دو برای سرویس‌های یکسان می‌تواند اشیای تکراری یا متعارض بسازد.

# Native provider baseline
providers:
  nomad:
    endpoint: {address: "https://127.0.0.1:4646"}
    exposedByDefault: false
    watch: true
    constraints: "Tag(`edge.public=true`)"

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

  • nomad job plan جایگزینی مخرب نشان می‌دهد: پیش از تأیید، تغییر شبکه، driver و هویت task را بررسی کنید.
  • allocation در حالت pending است: صلاحیت گره، محدودیت‌ها، driverها، CNI، منابع و تعارض پورت را بررسی کنید.
  • بررسی سلامت شکست می‌خورد اما کانتینر کار می‌کند: حالت آدرس و پورت را از دید client بررسی کنید.
  • سرویس در Consul دیده می‌شود اما در Nomad نه: ارائه‌دهندهٔ ثبت انتخابی با ارائه‌دهنده‌ای که Traefik می‌خواند متفاوت است.

خودآزمایی

  1. آدرس ثبت‌شدهٔ سرویس چه شرطی دارد؟ باید از Traefik قابل‌دسترسی باشد، نه فقط از client در Nomad.
  2. address_mode = "alloc" چه چیزی را انتخاب می‌کند؟ آدرس شبکهٔ allocation.
  3. چرا از ارائه‌دهنده‌های تکراری کشف پرهیز می‌کنیم؟ می‌توانند نام و مسیر تکراری و مالکیت مبهم ایجاد کنند.
  4. اثبات کنید: دو ثبت سرویس سالم را همراه آدرس و پورت نشان دهید.