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

شب ۱۸: TLS، ACL و دسترس‌پذیری در Nomad

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

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

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

  • محدودکردن دسترسی ارائه‌دهنده با سیاست ACL اختصاصی و TLS تأییدشده.
  • مشخص‌کردن صلاحیت گرهٔ ورودی، پورت‌های ثابت و جابه‌جایی هنگام خرابی.
  • چرخش اعتبارنامه و گواهی بدون افشای آن‌ها.

تمرین عملی: نقطهٔ شروع با حداقل دسترسی

مستندات ارائه‌دهندهٔ Nomad در Traefik، read-job را دسترسی لازم معرفی می‌کند. این سیاست محدود را با نسخهٔ Nomad، namespaceها و لاگ‌های ممیزی خود اعتبارسنجی کنید:

# traefik-provider-policy.hcl
namespace "default" {
  capabilities = ["read-job"]
}
nomad acl policy apply -description 'Traefik discovery read-only' \
  traefik-provider traefik-provider-policy.hcl
nomad acl token create -name 'traefik-provider' -policy traefik-provider
# Store the Secret ID directly in the approved secret/variable system; do not echo it again.
nomad acl token list

تنظیمات ارائه‌دهنده با TLS که از قالب‌های محافظت‌شده تولید می‌شود:

providers:
  nomad:
    endpoint:
      address: https://nomad.service.consul:4646
      token: REDACTED_AT_RUNTIME
      tls:
        ca: /secrets/nomad-ca.pem
        cert: /secrets/nomad-client.pem
        key: /secrets/nomad-client-key.pem
    exposedByDefault: false
    watch: true

فقط اگر تنظیمات API در Nomad گواهی کلاینت می‌خواهد از mTLS استفاده کنید. همیشه CA و نام را بررسی کنید؛ insecureSkipVerify: true را به رویهٔ عادی تبدیل نکنید.

تمرین دسترس‌پذیری روی client آزمایشگاهی:

nomad node status
nomad node eligibility -disable -self
nomad node drain -enable -deadline 10m -yes NODE_ID
nomad job status traefik
nomad alloc status REPLACEMENT_ALLOC
nomad node drain -disable NODE_ID
nomad node eligibility -enable NODE_ID

برای system job با پورت ثابت میزبان، جایگزینی فقط روی گرهٔ واجد شرایط دیگری رخ می‌دهد که allocation آن system job را از قبل ندارد؛ معمولاً هر گرهٔ ورودی یکی دارد. متعادل‌کنندهٔ بار خارجی باید گرهٔ drainشده یا ناسالم را از هدف‌ها خارج کند. صدور گواهی برای دسترس‌پذیری بالا باید روندی خارجی باشد که secretها و گواهی‌های نسخه‌دار برای مصرف تمام allocationها تولید کند.

فهرست چرخش اعتبارنامه

  • توکن یا گواهی دوم بسازید و همان حداقل دسترسی را بدهید.
  • ارجاع Nomad Variable یا قالب را به‌روز کنید و بگذارید allocationها تدریجی restart شوند.
  • watch ارائه‌دهنده، مسیرها و ترافیک آزمایشی را تأیید کنید.
  • فقط پس از استفادهٔ تمام allocationها از اعتبارنامهٔ جدید، قبلی را لغو کنید.
  • درخواست‌های مجاز و ردشدهٔ API را ممیزی و قابلیت‌های سیاست را محدودتر کنید.

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

  • خطای نام x509 در TLS: نام میزبان endpoint در SAN گواهی نیست؛ PKI یا آدرس‌دهی را اصلاح کنید.
  • با وجود سیاست پاسخ 403 می‌گیرید: namespace یا endpoint کشف سرویس شاید قابلیتی خارج از نمونهٔ پایه بخواهد؛ از شواهد ممیزی استفاده کنید.
  • گرهٔ drainشده هنوز ترافیک می‌گیرد: وضعیت زمان‌بند عوض شده اما سلامت هدف در متعادل‌کنندهٔ بار خارجی نه.
  • چرخش همهٔ allocationها را هم‌زمان restart می‌کند: بخش update و رفتار system job به برنامه‌ریزی دقیق‌تر انتشار نیاز دارد.

خودآزمایی

  1. چرا پیش از لغو، چرخش انجام می‌دهیم؟ هنگام انتشار اعتبارنامهٔ سالم حفظ می‌شود و بازگشت ممکن می‌ماند.
  2. چه کسی گرهٔ drainشده را از ترافیک عمومی خارج می‌کند؟ متعادل‌کنندهٔ بار یا سامانهٔ سلامت بالادستی؛ زمان‌بندی Nomad به‌تنهایی کافی نیست.
  3. چرا توکن مدیریتی پذیرفتنی نیست؟ دامنهٔ خسارت آن بسیار بیشتر از کشف فقط‌خواندنی است.
  4. اثبات کنید: هر مجوز API واقعاً استفاده‌شده توسط Traefik را شناسایی و چرخش دو توکن را کامل کنید.