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

شب ۱۲: مسیریابی و کشف سرویس در Swarm

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

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

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

  • درک روش کشف سرویس‌های Swarm و دسترسی Traefik به taskهای آن‌ها.
  • افزایش مقیاس پشت‌صحنه‌ها، محدودکردن کشف و عیب‌یابی شبکه یا برچسب نادرست.
  • مقایسهٔ حالت‌های endpoint بدون اشتباه‌گرفتن توزیع بار Swarm و Traefik.

تمرین عملی: محدودسازی و تغییر مقیاس

یک برچسب مالکیت خارج از فضای Traefik و محدودیت ارائه‌دهنده اضافه کنید:

services:
  traefik:
    command:
      - --providers.swarm=true
      - --providers.swarm.exposedbydefault=false
      - --providers.swarm.constraints=Label(`edge.owner`,`platform`)
  whoami:
    deploy:
      replicas: 3
      labels:
        edge.owner: platform
        traefik.enable: "true"
        traefik.swarm.network: traefik-public
        traefik.http.routers.whoami.rule: "Host(`whoami.swarm.example.test`)"
        traefik.http.services.whoami.loadbalancer.server.port: "80"

محدودیت را در پوسته با دقت کوتیشن‌گذاری کنید یا مانند بالا در YAML نگه دارید. بررسی کنید:

docker stack deploy -c swarm.yml edge
docker service scale edge_whoami=3
docker service ps edge_whoami
docker service inspect edge_whoami --format '{{json .Spec.EndpointSpec}}'
for i in $(seq 1 10); do
  curl -s --resolve whoami.swarm.example.test:80:127.0.0.1 \
    http://whoami.swarm.example.test/ | sed -n 's/^Hostname: /task=/p'
done
docker network inspect traefik-public

با ارائه‌دهندهٔ Swarm، Traefik سرویس Swarm را کشف می‌کند و با اطلاعات ارائه‌دهنده و شبکه به آن می‌رسد. VIP پیش‌فرض Swarm می‌تواند لایهٔ داخلی دیگری برای توزیع بار اضافه کند؛ DNSRR آدرس taskها را در اختیار مصرف‌کنندگان سازگار قرار می‌دهد. حالت endpoint انتخابی را با نسخهٔ Traefik و نیازهای عملیاتی خود بیازمایید و فرض نکنید «توزیع بار دوگانه» الزاماً زیان‌آور است.

نمونهٔ حالت endpoint سرویس:

services:
  whoami:
    deploy:
      endpoint_mode: vip # compare with dnsrr in a disposable lab

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

  • برچسب‌های traefik.* را از deploy.labels خارج کنید؛ ناپدیدشدن مسیر را ببینید و سپس برگردانید.
  • پورت پشت‌صحنه را 9999 بگذارید؛ پاسخ 502 را ببینید و سپس اصلاح کنید.
  • overlay مشترک را حذف کنید؛ خطاهای سرور کشف‌شده یا شبکه را بررسی و سپس بازیابی کنید.
  • edge.owner=platform را حذف کنید و تأیید کنید محدودیت، سرویس را کنار می‌گذارد.
  • تعداد نمونه‌ها را از ۳ به ۰ و دوباره به ۳ تغییر دهید و رفتار مسیر و پشت‌صحنه را ببینید.

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

  • فقط یک نام میزبان دیده می‌شود: شاید برنامه هویت سرویس یا کانتینر را متفاوت گزارش می‌کند؛ taskها و لاگ دسترسی را بررسی کنید.
  • محدودیت بی‌سروصدا تمام مسیرها را حذف می‌کند: نحو، کلید یا مقدار برچسب با برچسب‌های سرویس فرق دارد.
  • چند overlay وجود دارد: traefik.swarm.network را صریح تعیین کنید تا شبکهٔ ناخواسته انتخاب نشود.
  • پاسخ 503 هنگام صفر بودن نمونه‌ها: ممکن است مسیر باقی بماند اما سرور سالمی نباشد؛ آن را از 404 ناشی از نبود مسیریاب جدا کنید.

خودآزمایی

  1. exposedByDefault: false چه الزامی دارد؟ وجود traefik.enable=true روی سرویس‌های موردنظر.
  2. چرا محدودیت مالکیت جدا می‌گذاریم؟ حتی اگر کسی برچسب فعال‌سازی اضافه کند، کشف به سرویس‌های تأییدشدهٔ پلتفرم محدود می‌ماند.
  3. تفاوت VIP و DNSRR کدام لایه را تغییر می‌دهد؟ حل آدرس endpoint و توزیع بار سرویس Swarm.
  4. اثبات کنید: سه task و پاسخ‌ها یا متریک‌های نشان‌دهندهٔ توزیع میان پشت‌صحنه‌ها را ارائه کنید.