מידע על הגדרת ניתוב מבוסס-גוף, יכולת של GKE Inference Gateway שמאפשרת לכם לנתב בקשות הסקה על ידי חילוץ שם המודל ישירות מגוף בקשת ה-HTTP.
האפשרות הזו שימושית במיוחד לאפליקציות שפועלות לפי מפרטים כמו OpenAI API, שבהם מזהה המודל מוטמע לעיתים קרובות במטען הייעודי (payload) של הבקשה ולא בכותרות או בנתיבי כתובות URL.
איך פועל ניתוב על סמך מיקום הגוף
GKE Inference Gateway מטמיע ניתוב מבוסס-גוף כext_proc
הרחבה של Envoy proxy. תהליך הבקשה נועד להשתלב בצורה חלקה עם ההגדרות הקיימות של Gateway API:
- קבלת הבקשה: מאזן העומסים בשכבה 7 מקבל בקשת הסקה נכנסת.
- שליפת פרמטרים מהגוף: מאזן העומסים בשכבה 7 מעביר את הבקשה לתוסף Body to Header. התוסף הזה מחלץ את הפרמטר הרגיל
modelמגוף הבקשה מסוג HTTP. - החדרת כותרת: הערך של פרמטר המודל שחולץ מוחדר ככותרת בקשה חדשה (עם המפתח
X-Gateway-Model-Name). - החלטה לגבי ניתוב: שם המודל זמין עכשיו בכותרת של בקשה, ולכן GKE Inference Gateway יכול להשתמש במבנים קיימים של Gateway API
HTTPRouteכדי לקבל החלטות לגבי ניתוב. לדוגמה, כלליHTTPRouteיכולים להתאים לכותרת המוזרקת כדי להפנות את התנועה אלInferencePoolהמתאים. - בחירת נקודת קצה: מאזן העומסים בשכבה 7 בוחר את
InferencePool(BackendService) המתאים ואת קבוצת נקודות הקצה. לאחר מכן, התוסף מעביר את פרטי הבקשה ונקודת הקצה לתוסף Endpoint Picker כדי לבחור נקודת קצה ספציפית מתוך המאגר שנבחר. - ניתוב סופי: הבקשה מנותבת לרפליקה ספציפית של המודל שנבחרה על ידי התוסף Endpoint Picker.
התהליך הזה עוזר לוודא שגם כשפרטי המודל נמצאים עמוק בתוך גוף הבקשה, GKE Inference Gateway יכול לנתב את תעבורת הנתונים בצורה חכמה לשירותי הקצה העורפי הנכונים.
הגדרה של ניתוב לפי תוכן ההודעה
תוסף ניתוב מבוסס-גוף (BBR) ל-GKE Inference Gateway פועל כשירות שמנוהל באשכול Kubernetes. מנקודת המבט של מאזן העומסים בשכבה 7, תוסף ה-BBR הוא שרת gRPC חיצוני. כשמאזן העומסים צריך לבדוק את גוף הבקשה כדי לקבוע את שם המודל, הוא מבצע קריאת gRPC לשירות BBR. לאחר מכן, שירות ה-BBR מעבד את הבקשה ומחזיר מידע למאזן העומסים, כמו כותרות להחדרה לצורך ניתוב.
כדי להפעיל ניתוב מבוסס-גוף, צריך לפרוס את התוסף BBR כ-Pod ול��לב אותו באמצעות משאבי GCPRoutingExtension ו-HTTPRoute.
דרישות מוקדמות
מוודאים שיש לכם אשכול GKE (גרסה 1.32 ואילך).
פועלים לפי המדריך הראשי להגדרת GKE Inference Gateway.
פריסת הנתב שמבוסס על גוף
התוסף לניתוב מבוסס-גוף נפרס כ-Kubernetes Deployment וכ-Service, יחד עם משאב GCPRoutingExtension בתוך האשכול.
אפשר להשתמש ב-Helm כדי לפשט את ההתקנה.
כדי לפרוס את המשאבים הנדרשים לנתב מבוסס-גוף, מריצים את הפקודה הבאה:
helm install body-based-router oci://registry.k8s.io/gateway-api-inference-extension/charts/body-based-routing \
--set provider.name=gke \
--set inferenceGateway.name=GATEWAY_NAME
מחליפים את GATEWAY_NAME בשם של משאב ה-Gateway.
הפקודה הזו פורסת את המשאבים הבאים:
- שירות ופריסה לתוסף Body-Based Routing.
- משאב
GCPRoutingExtensionומשאבGCPHealthCheckPolicyכדי לצרף את התוסף Body-Based Routing למשאב GKE Gateway.
הגדרת HTTPRoute לניתוב שמודע למודל
אחרי שפורסים ומגדירים את התוסף, אפשר להגדיר משאבים HTTPRoute שמשתמשים בכותרת המוזרקת (X-Gateway-Model-Name) כדי לקבל החלטות לגבי ניתוב.
זוהי דוגמה למניפסט HTTPRoute של ניתוב מודע למודל:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: routes-to-llms
spec:
parentRefs:
- name: GATEWAY_NAME
rules:
- matches:
- headers:
- type: Exact
name: X-Gateway-Model-Name
value: chatbot # Matches the extracted model name
path:
type: PathPrefix
value: /
backendRefs:
- name: gemma # Target InferencePool for 'chatbot' model
kind: InferencePool
group: "inference.networking.k8s.io"
- matches:
- headers:
- type: Exact
name: X-Gateway-Model-Name
value: sentiment # Matches another extracted model name
path:
type: PathPrefix
value: /
backendRefs:
- name: llama # Target InferencePool for 'sentiment' model
kind: InferencePool
group: "inference.networking.k8s.io"
כדי להחיל את קובץ המניפסט הזה על האשכול, שומרים אותו כ-httproute-for-models.yaml
ומריצים את הפקודה הבאה:
kubectl apply -f httproute-for-models.yaml
הערות ומגבלות
כשמתכננים את ההטמעה של ניתוב לפי תנועות הגוף, כדאי לקחת בחשבון את הנקודות הבאות:
התנהגות של fail-closed: התוסף Body-Based Routing מתוכנן לפעול במצב fail-closed. אם התוסף לא זמין או שהוא לא מצליח לעבד בקשה, תופיע שגיאה (לדוגמה, קוד תגובה 404 או 503 אם לא הוגדר קצה עורפי שמוגדר כברירת מחדל) במקום ניתוב שגוי. כדי לשמור על אמינות השירות, חשוב לוודא שהפריסות זמינות מאוד.
גודל גוף הבקשה וסטרימינג: עיבוד של גופים גדולים של בקשות HTTP, במיוחד כשהסטרימינג מופעל, עלול להיות מורכב. אם שרת ה-proxy של Envoy נאלץ להזרים את תוכן הבקשה (בדרך כלל עבור תוכן גדול מ-250KB), יכול להיות שהוא לא יוכל להוסיף כותרות חדשות. זה יכול להוביל לבעיות בניווט (לדוגמה, שגיאה 404 אם אי אפשר להחיל את הכללים להתאמת הכותרת).
תחזוקה לטווח ארוך: התוסף Body-Based Routing פועל כרכיב באשכולות GKE. באחריותכם לנהל את מחזור החיים של המערכת, כולל שדרוגים, תיקוני אבטחה והבטחה שהיא תמשיך לפעול.
המאמרים הבאים
- איך מתאימים אישית את GKE Inference Gateway
- מידע נוסף על GKE Inference Gateway
- מידע נוסף על Gateway API