הגדרה של ניתוב לפי תנוחת הגוף

מידע על הגדרת ניתוב מבוסס-גוף, יכולת של GKE Inference Gateway שמאפשרת לכם לנתב בקשות הסקה על ידי חילוץ שם המודל ישירות מגוף בקשת ה-HTTP.

האפשרות הזו שימושית במיוחד לאפליקציות שפועלות לפי מפרטים כמו OpenAI API, שבהם מזהה המודל מוטמע לעיתים קרובות במטען הייעודי (payload) של הבקשה ולא בכותרות או בנתיבי כתובות URL.

איך פועל ניתוב על סמך מיקום הגוף

‫GKE Inference Gateway מטמיע ניתוב מבוסס-גוף כext_proc הרחבה של Envoy proxy. תהליך הבקשה נועד להשתלב בצורה חלקה עם ההגדרות הקיימות של Gateway API:

  1. קבלת הבקשה: מאזן העומסים בשכבה 7 מקבל בקשת הסקה נכנסת.
  2. שליפת פרמטרים מהגוף: מאזן העומסים בשכבה 7 מעביר את הבקשה לתוסף Body to Header. התוסף הזה מחלץ את הפרמטר הרגיל model מגוף הבקשה מסוג HTTP.
  3. החדרת כותרת: הערך של פרמטר המודל שחולץ מוחדר ככותרת בקשה חדשה (עם המפתח X-Gateway-Model-Name).
  4. החלטה לגבי ניתוב: שם המודל זמין עכשיו בכותרת של בקשה, ולכן GKE Inference Gateway יכול להשתמש במבנים קיימים של Gateway API ‏HTTPRoute כדי לקבל החלטות לגבי ניתוב. לדוגמה, כללי HTTPRoute יכולים להתאים לכותרת המוזרקת כדי להפנות את התנועה אל InferencePool המתאים.
  5. בחירת נקודת קצה: מאזן העומסים בשכבה 7 בוחר את InferencePool (BackendService) המתאים ואת קבוצת נקודות הקצה. לאחר מכן, התוסף מעביר את פרטי הבקשה ונקודת הקצה לתוסף Endpoint Picker כדי לבחור נקודת קצה ספציפית מתוך המאגר שנבחר.
  6. ניתוב סופי: הבקשה מנותבת לרפליקה ספציפית של המודל שנבחרה על ידי התוסף Endpoint Picker.

התהליך הזה עוזר לוודא שגם כשפרטי המודל נמצאים עמוק בתוך גוף הבקשה, GKE Inference Gateway יכול לנתב את תעבורת הנתונים בצורה חכמה לשירותי הקצה העורפי הנכונים.

הגדרה של ניתוב לפי תוכן ההודעה

תוסף ניתוב מבוסס-גוף (BBR) ל-GKE Inference Gateway פועל כשירות שמנוהל באשכול Kubernetes. מנקודת המבט של מאזן העומסים בשכבה 7, תוסף ה-BBR הוא שרת gRPC חיצוני. כשמאזן העומסים צריך לבדוק את גוף הבקשה כדי לקבוע את שם המודל, הוא מבצע קריאת gRPC לשירות BBR. לאחר מכן, שירות ה-BBR מעבד את הבקשה ומחזיר מידע למאזן העומסים, כמו כותרות להחדרה לצורך ניתוב.

כדי להפעיל ניתוב מבוסס-גוף, צריך לפרוס את התוסף BBR כ-Pod ול��לב אותו באמצעות משאבי GCPRoutingExtension ו-HTTPRoute.

דרישות מוקדמות

פריסת הנתב שמבוסס על גוף

התוסף לניתוב מבוסס-גוף נפרס כ-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. באחריותכם לנהל את מחזור החיים של המערכת, כולל שדרוגים, תיקוני אבטחה והבטחה שהיא תמשיך לפעול.

המאמרים הבאים