設定以主體為基礎的轉送功能


瞭解如何設定「以主體為準的轉送」,這是 GKE Inference Gateway 的功能,可讓您直接從 HTTP 要求主體擷取模型名稱,藉此轉送推論要求。

對於遵循 OpenAI API 等規格的應用程式來說,這項功能特別實用,因為模型 ID 通常會內嵌在要求酬載中,而不是標頭或網址路徑。

身體型轉送的運作方式

GKE Inference Gateway 會實作以主體為準的路由,做為 Envoy Proxy 的擴充功能。ext_proc要求流程的設計宗旨是與現有 Gateway API 設定無縫整合:

  1. 接收要求:第 7 層負載平衡器會接收傳入的推論要求。
  2. 擷取主體參數:第 7 層負載平衡器會將要求轉送至「Body to Header」擴充功能。這項擴充功能會從 HTTP 要求主體擷取標準 model 參數。
  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 也能將流量智慧地導向正確的後端服務。

設定以主體為基礎的轉送功能

GKE Inference Gateway 的 Body-Based Routing (BBR) 擴充功能會以服務的形式執行,您可以在 Kubernetes 叢集中管理這項服務。從第 7 層負載平衡器的角度來看,BBR 擴充功能是外部 gRPC 伺服器。當負載平衡器需要檢查要求主體,以判斷模型名稱時,會對 BBR 服務發出 gRPC 呼叫。接著,BBR 服務會處理要求,並將資訊傳回負載平衡器,例如要插入的標頭以供轉送。

如要啟用以主體為準的路由,請將 BBR 擴充功能部署為 Pod,並使用 GCPRoutingExtensionHTTPRoute 資源整合。

必要條件

部署主體型路由器

主體導向的轉送擴充功能會以 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,以進行模型感知路徑設定

部署及設定擴充功能後,您可以定義使用插入標頭 (X-Gateway-Model-Name) 的 HTTPRoute 資源,以做出轉送決策。

以下是模型感知路徑的 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

注意事項和限制

規劃實作 Body-Based Routing 時,請考量下列事項:

  • 故障時關閉行為:身體位置路由擴充功能的設計是採用「故障時關閉」模式運作。如果擴充功能無法使用或無法處理要求,就會導致錯誤 (例如,如果未設定預設後端,則會傳回 404 或 503 回應代碼),而不是錯誤地轉送要求。確保部署作業的可用性高,以維持服務可靠性。

  • 要求主體大小和串流:處理大型 HTTP 要求主體 (尤其是啟用串流時) 可能會造成複雜情況。如果 Envoy Proxy 必須強制串流處理要求主體 (通常是主體大於 250 KB 時),可能就無法插入新標頭。這可能會導致轉送失敗 (例如,如果無法套用標頭比對規則,就會發生 404 錯誤)。

  • 長期維護:Body-Based Routing 擴充功能會在 GKE 叢集內以元件形式執行。您必須負責管理生命週期,包括升級、安全性修補程式,以及確保持續運作。

後續步驟