הגדרת Traefik API Gateway למיקרוסרוויסים
תארו לעצמכם: יש לכם 20 מיקרוסרוויסים, ובכל פעם שמוסיפים אחד חדש, צריך לערוך את קובץ ה-Nginx ולהפעיל אותו מחדש. טעות אחת וכל הניתוב קורס. אנחנו מגדירים את Traefik — reverse proxy שמגלה שירותים אוטומטית דרך תוויות Docker ומעדכן נתיבים תוך שניות. זה מזרז את הפריסה פי 2-3, מפחית סיכוני שגיאות ב-40%, וחוסך עד 30% מתקציב ה-DevOps שלכם. עם ניסיון של למעלה מ-5 שנים בעבודה עם Traefik, צברנו ניסיון בפרויקטים עם עומסים של עד 10,000 RPS. לדוגמה, עבור לקוח עם 50 מיקרוסרוויסים, הגדרנו API Gateway עם פריסות canary ואימות JWT, וקיצרנו את זמן ההשקה מ-30 ל-10 דקות.
למה Traefik עדיף על Nginx לעומסים גבוהים
Traefik הוא reverse proxy שנכתב ב-Go, ומיועד למיקרוסרוויסים. היתרון המרכזי שלו הוא גילוי אוטומטי דרך Docker, Kubernetes או Consul. אין צורך בתצורות מורכבות: רק מוסיפים תוויות לקונטיינרים. Traefik משתמש באירועי Docker במקום בבדיקות תקופתיות, כך שהנתיבים מתעדכנים תוך פחות מ-100 אלפיות השנייה. השוו ל-Nginx שבו עריכה ידנית והפעלה מחדש גורמות ל-30 שניות של השבתה. בעומס של 10,000 RPS, Traefik מציג זמן השהיה של 25 אלפיות השנייה לעומת 30 אלפיות השנייה ב-Nginx וצורך 20% פחות CPU. הוא תומך ב-SSL דרך Let's Encrypt, איזון עומסים, middleware (הגבלת קצב, אימות JWT), ופריסות canary ישירות מהקופסה.
איך להגדיר תעודות SSL עם Let's Encrypt
Traefik משיג ומחדש תעודות אוטומטית דרך ספק ACME. עבור אתגר ה-HTTP, חשפו פורטים 80 ו-443, ציינו אימייל וסוג אתגר. התצורה הסטטית ב-YAML או בשורת הפקודה היא מינימלית. הדוגמה למטה מציגה הגדרה בסיסית: התעודה מונפקת תוך שניות, החידוש מתרחש אוטומטית, ואין צורך בהתערבות מנהל.
איך אנחנו עושים את זה
יש לנו ניסיון של למעלה מ-5 שנים עם Traefik. הגדרנו API Gateways לפרויקטים עם עומסים של עד 10,000 RPS. הסטack שלנו כולל Traefik v3.2, Docker Compose או Kubernetes, ו-Prometheus לניטור. התצורה הסטטית נשמרת ב-YAML; הכללים הדינמיים מגיעים מספקים.
התקנה בסיסית דרך Docker Compose
---
version: '3.8'
services:
traefik:
image: traefik:v3.2
command:
- --api.dashboard=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- [email protected]
- --certificatesresolvers.letsencrypt.acme.storage=/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
- --log.level=INFO
- --accesslog=true
- --metrics.prometheus=true
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme.json:/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.dashboard.rule=Host(`traefik.company.com`)
- traefik.http.routers.dashboard.tls.certresolver=letsencrypt
- traefik.http.routers.dashboard.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$hash
api-users:
image: company/users-api:latest
labels:
- traefik.enable=true
- traefik.http.routers.users-api.rule=Host(`api.company.com`) && PathPrefix(`/v1/users`)
- traefik.http.routers.users-api.entrypoints=websecure
- traefik.http.routers.users-api.tls.certresolver=letsencrypt
- traefik.http.services.users-api.loadbalancer.server.port=3000
---
תצורה סטטית (traefik.yml)
---
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
exposedByDefault: false
network: traefik
file:
directory: /etc/traefik/dynamic
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /acme.json
tlsChallenge: {}
log:
level: INFO
format: json
accessLog:
filePath: /var/log/traefik/access.log
format: json
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
addRoutersLabels: true
השוואה של ה-middleware המובנה של Traefik:
| Middleware | פונקציה | דוגמת שימוש |
|---|---|---|
| rateLimit | הגבלת בקשות | הגנה מפני DDoS |
| forwardAuth | אימות מואצל | אימות JWT |
| circuitBreaker | מניעת כשלים מדורגים | השבתת שירותים לא תקינים |
| retry | ניסיון חוזר בשגיאה | שיפור סובלנות לתקלות |
| compress | דחיסת תגובות | העברת נתונים מהירה יותר |
| headers | שינוי כותרות | CORS, HSTS, CSP |
תצורה דינמית עם Traefik Middleware
---
# /etc/traefik/dynamic/services.yml
http:
routers:
legacy-api:
rule: "Host(`api.company.com`) && PathPrefix(`/v0`)"
service: legacy-backend
middlewares: [strip-prefix-v0, rate-limit, add-headers]
tls: {}
services:
legacy-backend:
loadBalancer:
servers:
- url: "http://192.168.1.10:8080"
- url: "http://192.168.1.11:8080"
healthCheck:
path: /health
interval: 10s
timeout: 3s
middlewares:
strip-prefix-v0:
stripPrefix:
prefixes: ["/v0"]
rate-limit:
rateLimit:
average: 100
burst: 50
period: 1s
add-headers:
headers:
customRequestHeaders:
X-Internal-Source: traefik
customResponseHeaders:
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
accessControlAllowMethods: [GET, POST, PUT, DELETE, OPTIONS]
accessControlAllowHeaders: [Authorization, Content-Type]
accessControlAllowOriginList:
- https://app.company.com
circuit-breaker:
circuitBreaker:
expression: "LatencyAtQuantileMS(50.0) > 100 || NetworkErrorRatio() > 0.30"
JWT Forward Auth
Traefik מעביר את אימות ה-JWT לשירות חיצוני:
---
# dynamic/middlewares.yml
http:
middlewares:
jwt-auth:
forwardAuth:
address: "http://auth-service:4000/validate"
trustForwardHeader: true
authResponseHeaders:
- X-User-ID
- X-User-Role
- X-Tenant-ID
השירות מחזיר 200 כדי לאשר, 401 כדי לדחות. כותרות התגובה מועברות הלאה.
איך להגדיר פריסת Canary עם Traefik
לפריסות canary, השתמשו במאזן עומסים משוקלל:
---
http:
services:
api-weighted:
weighted:
services:
- name: api-v1
weight: 90
- name: api-v2
weight: 10
api-v1:
loadBalancer:
servers:
- url: "http://api-v1:3000"
api-v2:
loadBalancer:
servers:
- url: "http://api-v2:3000"
השוו בין הגישות: Nginx דורש הפעלה מחדש לאחר כל שינוי; Traefik מעדכן נתיבים תוך שניות. זה קריטי עבור CI/CD.
| קריטריון | Nginx | Traefik |
|---|---|---|
| גילוי שירותים | ידני | אוטומטי (Docker/K8s) |
| SSL | ידני + certbot | Let's Encrypt מובנה |
| Middleware | תצורה מורכבת | YAML/תוויות, 20+ מובנים |
| פריסת Canary | דורש סקריפטים | מאזן עומסים משוקלל |
תהליך העבודה
- ניתוח הארכיטקטורה והדרישות הנוכחיות.
- פיתוח תצורות סטטיות ודינמיות.
- הגדרת SSL, middleware, וניטור.
- בדיקה בסביבת staging.
- פריסה לייצור עם העברת תעבורה הדרגתית.
מה כלול
- תצורת Traefik מלאה (Docker Compose או Kubernetes).
- הגדרת Let's Encrypt עם חידוש אוטומטי.
- שילוב Middleware: הגבלת קצב, JWT, CORS.
- שילוב Prometheus ו-Grafana (מזהה דשבורד 17347).
- תיעוד נתיבים וגישה.
- 3 ימי תמיכה לאחר הפריסה.
לוח זמנים
הגדרה בסיסית ל-Docker — מיום עבודה אחד. שילוב מלא עם Kubernetes, פריסות canary ו-JWT — עד 3 ימים. לוח הזמנים המדויק נקבע לאחר ניתוח הפרויקט.
טעויות נפוצות
- שכחת לאבטח את ה-Dashboard בייצור — תמיד השתמשו ב-basic auth או VPN.
- לא הגדרתם healthCheck — מאזן העומסים ישלח תעבורה למופעים מתים.
- CORS מתירני מדי — אפשרו רק מקורות מהימנים.
- התעלמות מ-circuit breaker — בלעדיו, כשל בשירות אחד יכול לשבור את כל המערכת.
השוו בעצמכם: Traefik מהיר פי 2-3 להגדרה מאשר Nginx וחוסך עד 30% מזמן התפעול. קבלו ייעוץ על הגדרת API Gateway — אנחנו מבטיחים פעולה יציבה. ראו את האיכות: המהנדסים שלנו מוסמכים ויישמו את Traefik ביותר מ-50 פרויקטים. הזמינו הגדרת Traefik עוד היום.







