הפוך פרוקסי וניתוב
1) תפקיד פרוקסי הפוך
פרוקסי הפוך - ”קו החזית” של הפלטפורמה: מקבל TLS, מפיץ תנועה בין מעלה הזרם, מיישם מדיניות אבטחה וביצועים. המטרה היא איחור מינימלי, ניתוב צפוי ובידוד מהיר של מקרים/אזורים משפילים.
2) שכבות ופרוטוקולים
L4: TCP/UDP proxy (SNI מבוסס TLS passrough, QUIC). מחיר נמוך, בלי להבין HTTP.
שעה 7: HTTP/1. 1-2-3, GRPC, שקע אינטרנט. ניתוב עשיר (מארח, נתיב, כותרות, עוגיות), שינויים ומטמון.
מודל TLS: לסיים על ההיקף (NGINX/Enveloy), בתוך - mTLS/mesh. SNI מאפשר מארחים וירטואליים באותו IP.
3) אסטרטגיות ניתוב (L7)
1. מבוסס מארח: על ידי תחום ('api. מותג. com 'acher' מותג-api ').
2. מבוסס מסלול: '/v1/תשלומים '#' תשלומים-svc ', '/v1/ארנקים' # 'ארנקים-svc.
3. מבוסס כותרת: ”X-Region: Eu-Central”, ”X-Tenant: 42”, ”User-Agent ”/” קבל”.
4. מבחן א/ב, פגישות דביקות.
5. משוקלל/קנרי: אחוז התעבורה לגרסה החדשה (1-5% -100%).
6. Geo/ASN: על ידי Country/ASN שנשלח לאזור POP/הקרוב ביותר.
7. חשיש עקבי: קשירת מקש (user_id/tenant_id) למקרה של מקום מטמון/דביקות.
8. Shadow/Mirroring: העתק התנועה אל ”הצל” במעלה הזרם מבלי להשפיע על התגובה (עבור מבחני רגרסיה).
4) איזון וסובלנות פסולה
אלגוריתמים: סיבוב-רובין, פחות בקשה, אקראי, טבעת-חשיש (עקבי).
בדיקות בריאות: פעיל (HTTP/TCP) + פסיבי (על ידי קודים/פסק זמן).
פליטה חריגה יותר: ”לדפוק” זמנית פונדקאי עם שגיאה/איחור מוגבר.
רסיסים: מוגבל, עם לכל ניסיון פסק זמן וליצן; לא לחזור בשיטות לא בטוחות ללא אידמפוטנציה.
בריכות חיבור: לשמור על בריכות חמות במעלה הזרם, להגביל את העליות.
5) ביצועים היקפיים
Catching: by key (שיטה + מארחת + path + vary), ETag/IF-None-Match, TTL ו-Tale-Back-Revalition.
דחיסה: brootli/gzip לתגובות טקסט.
HTTP/2/3: ריבוי, כיווץ כותרת; ודא תאימות WAF/IDS.
בקשות מתמזגות - התמוטטות בקשות במקביל לאותו מפתח מטמון.
6) ביטחון במיופה הכוח
TLS: 1. 2 + (טוב יותר מ-1. 3), הידוק OCSP, HSTS.
מסנני WAF/bot: לפני ניתוב לאפליקציה.
CORS/CSP/Fetch-Metadata: לפי המדיניות.
כותרת: ”X-העברה עבור/פרוטו”, ”העברה”, ”טרקפרנט”; זריקת כותרת והגנה גדולה מדי.
גבולות גוף/כותרת: תחילת 413/431 עבור דפוסי DOS.
MTLS לשילוב שותפים ו-API פנימי.
7) פריסת תוכניות: קנרית/כחול-ירוק/גרסאות
ניתוב משוקלל ברמה 7 (1%, 5%, 25%, 50%, 100%).
כותרת-שער: אפשר את התכונה על ידי דגל/כותרת (internal/testing).
כחול-ירוק: החלפה מלאה של DNS/מסלול, החלפה מהירה.
צל: ריצה מקבילה של הגרסה החדשה עם כניסה של מדדים/יומנים.
8) מפגשים דביקים וניתוב חשיש
קוקי-דביקות ("Set-Cookie: SRV = resard-a; נתיב =/; HttpOnly) לעומסים סטטוטוריים.
Ring-hash/stable by "user _ id/terenant _ id' - הפחת צולבות מטמון.
זהירות: הימנעו מדביקות ”נצחית” עבור כתיבה-עומס * נקודה חמה; תשתמש בדייר מכסה.
9) ניתוב אזורי וגיאו
כל Cast + Geo-DNS לבחירת ה ־ POP הקרוב ביותר.
עוקף-כותרת (לדוגמה, X-Region) לבדיקות ודיבוג.
תיאום עם לוקליזציה של מידע נדרש מבחינה חוקית (מסלול לפי שטח/תחום שיפוט).
10) יכולת תצפית ושליטה
מדדים אדומים: RPS, שגיאה-קצב (לפי רמה), latency p95/p99 לכל מסלול/אשכול.
אאוטלייה/בריאות: מספר העריכה/מפסיד, קצב שיחה איטי.
יומנים: מובנים, ללא PII; קורלציה 'trace _ id'/' span _ id'.
התחקות אחר (Otel): מוטות חודרים = נתב x במעלה הזרם; מופת על גרפים p99.
11) דוגמאות הגדרות
11. 1 NGINX: מארח/נתיב/משוקלל + atlected
nginx map $http_x_canary $canary { default 0; "1" 1; }
upstream app_v1 { least_conn; server 10. 0. 0. 1:8080 max_fails=3 fail_timeout=10s; }
upstream app_v2 { least_conn; server 10. 0. 0. 2:8080; }
server {
listen 443 ssl http2;
server_name api. example. com;
Кэш proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=apicache:256m max_size=10g inactive=10m use_temp_path=off;
location /v1/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Request-ID $request_id;
proxy_read_timeout 300ms; proxy_connect_timeout 100ms;
Weighted: 5% on v2 if canary = 1, otherwise 0%
set $backend app_v1;
if ($canary) { set $backend app_v2; }
proxy_pass http://$backend;
}
Static with cache location/assets/{
proxy_cache apicache;
proxy_cache_valid 200 10m;
add_header Cache-Control "public, max-age=600";
proxy_pass http://static_cluster;
}
}
11. 2 שליח: ניתוב כותרת, כנרית, פליטה חיצונית, שיקוף
yaml static_resources:
clusters:
- name: svc_v1 type: STRICT_DNS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
- name: svc_v2 type: STRICT_DNS lb_policy: LEAST_REQUEST
- name: mirror_svc type: STRICT_DNS
listeners:
- name: https filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match:
prefix: "/v1"
headers:
- name: "X-Region"
exact_match: "eu"
route:
cluster: svc_v1 timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx num_retries: 1 per_try_timeout: 200ms request_mirror_policies:
- cluster: mirror_svc runtime_key: mirror. enabled
- match: { prefix: "/v1" }
route:
weighted_clusters:
clusters:
- name: svc_v1 weight: 95
- name: svc_v2 weight: 5
11. 3 Traefik: חוקים + תוכנות בינוניות
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc middlewares: [hsts, compress]
middlewares:
hsts:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true compress:
compress: {}
services:
svc:
weighted:
services:
- name: v1 weight: 95
- name: v2 weight: 5
11. 4 קוברנטס: מניפסט אינגרס + לקנרית (NGINX Ingress)
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "5"
spec:
rules:
- host: api. example. com http:
paths:
- path: /v1 pathType: Prefix backend:
service:
name: svc-v1 port: { number: 8080 }
12) שינויים ותאימות
נורמליזציה של כותרות/שבילים, מפקד אוכלוסין 'מיקום', בקרת 'מטמון-בקרה'.
GRPC ↔ HTTP/JSON באמצעות מתרגמים (grpc-json-transcoder).
שדרוגים WebSocket/HTTP2 - ודא פרוקסי מדלג 'שדרוג '/' חיבור'.
13) בדיקות ותרחישי כאוס
טעינה: התפרצויות, מכשור ארוך, גוף ”ארוך” (slow-POST).
הזרקת השהייה/איבוד ל-upstream = reteries/timeout/outlier check.
מדדים קנריים: p95/p99, שגיאה-קצב של הגרסה החדשה נגד הישן; גלגול אוטומטי על ידי SLO.
צל: השוואה של תגובות (דגימה) ולוגיקה מצד לצד.
14) תרופות אנטי ־ פטריות
נסיגה גלובלית לא כולל אידמפוטנטיות ומועד אחרון כפול וסערה.
מפגשים דביקים ללא רסיסים חמים שולטים בעומס פי.
מחסור בבדיקות בריאות/פליטה חיצונית = = מקרים ”רקובים” בבריכה.
כותרות/גופים בלתי מוגבלים = DOS הפשוט ביותר.
ערבוב טרנספורמציות וביטחון ללא סכימה גירסה = נסיגות בלתי צפויות.
מטמון מפתח גלובלי אחד ללא ”Vary” = תגובות שגויות.
15) פרטים של iGaming/Finance
אזוריות: ניתוב על ידי תחום השיפוט של נגן/מותג; בידוד של אזורי תשלום.
מסלולים קריטיים (מרבצים/יציאות): פסקי זמן קצרים, חזרה אחת, אידמפוטנטיות; אשכולות בודדים.
PSP/KYC: בריכות ייעודיות במעלה הזרם, מדיניות ריטייה/פסק זמן קפדני, מפסק מעגל חשמלי, גיאו-פינים.
ערוצי AB: ניסויים בטוחים עם תשלומים/גבולות רק עבור נתיב הקריאה; לכתוב - דרך דגלים ואחוזים קטנים.
16) רשימת מוכנות תומכת
[ ] TLS 1. 2+/1. 3, הידוק OCSP, HSTS; תקן את ”אקס-פורוורד”.
[ ] חוקי ניתוב נקיים: מארח/שביל/כותרת/עוגייה; תיעוד.
[ ] בדיקות בריאות, פליטה חיצונית, לכל ניסיון, מגשים מוגבלים.
[ ] Weighted/Canary + Shadow; גלגול אוטומטי על ידי SLO/התראה.
[ ] מטמון/דחיסה/ETag; גבולות גוף/כותרת; מבקש קואליציות.
[ ] לוגים/שבילים עם "trace _ id'; RED + יוצא/מדדי בריאות; לוחות מחוונים לכל מסלול/אשכול.
[ ] מסנני WAF/BOT/CORS; גדול מדי והגנה איטית פוסט.
[ ] חשיש דביק/עקבי במקום הדרוש; שליטה בשברים חמים.
[ תצורות ] מבוססות, הגירות מאובטחות, סודות בקמרון/KMS.
17) TL; DR
לסיים TLS על ההיקף ומסלול אל L7 דרך מארח/נתיב/כותרת/עוגייה. לשחרורים - קנרית משוקללת וצל; עבור יציבות - בדיקות בריאות, פליטה חיצונית, החזרה מוגבלת עם זמן ניסיון. השתמש במטמון, דחיסה וחשיש עקבי שבו הוא משפר p95. מודדים אותות אדומים ומצב אשכול, מחזיקים בגבולות WAF וגודל. עבור מסלולי תשלום קריטיים - אשכולות נפרדים, שלוחות SLA קצרות וניהול קפדני של רטרס/אידמפוטנטיות.