Zusatzinformationen – Übersicht

Mit Service Extensions können Sie Erweiterungen mit Zusatzinformationen von Netzwerkproxys aus aufrufen. Erweiterungen mit Zusatzinformationen werden von den meisten Application Load Balancern unterstützt. Sie werden auch von Secure Web Proxy (in der Vorschau) unterstützt.

Datenfluss von Erweiterungen mit Zusatzinformationen

Ein Netzwerkproxy kommuniziert mit einer Erweiterung mit Zusatzinformationen über eines der folgenden Envoy-gRPC-Protokolle:

  • Das Protokoll für die externe Verarbeitung oder ext_proc.

    Dieses Protokoll wird für Routen-, Traffic- und Autorisierungserweiterungen unterstützt und standardmäßig verwendet.

    Mit dem Protokoll ext_proc kann der Erweiterungsdienst auf Ereignisse im Lebenszyklus einer HTTP-Anfrage reagieren, indem er die Header oder den Text der Anfrage prüft und ändert.

  • Das Protokoll für die externe Autorisierung oder ext_authz.

    Dieses Protokoll wird nur für Autorisierungserweiterungen unterstützt.

    Das Protokoll ext_authz delegiert Autorisierungsentscheidungen für eingehende Anfragen an einen externen, unabhängigen Dienst. Mit dieser API kann der Erweiterungsdienst auf Ereignisse im Lebenszyklus einer HTTP-Anfrage für komplexe Autorisierungsentscheidungen reagieren, indem er die Header oder Metadaten der Anfrage prüft.

    Sie können dieses Protokoll mit der wireFormat Option angeben, wenn Sie eine Autorisierungserweiterung konfigurieren.

Sie können diese Erweiterungsdienste auf VM-Instanzen oder in GKE bereitstellen und eine Instanzgruppe oder Netzwerk-Endpunktgruppe (NEG) konfigurieren, um die Endpunkte für diese Dienste darzustellen.

Beispiel für ein Bereitstellungsszenario

Das folgende Diagramm zeigt ein Beispiel für ein Bereitstellungsszenario. Sie können den Backend-Dienst für Erweiterungen mit Zusatzinformationen mit einem gRPC-Server auf einer vom Nutzer verwalteten Compute-Ressource wie einer VM-Instanz oder einem Google Kubernetes Engine-Cluster (GKE) bereitstellen und ihn dem Load-Balancer als regulären Backend-Dienst präsentieren.

Application Load Balancer verwenden Callouts, um benutzerdefinierte Logik aus Callout-Backend-Diensten einzufügen.
Application Load Balancer senden Service Extensions-Callouts an Backend-Dienste für Callouts (zum Vergrößern anklicken).

Funktionsweise von Erweiterungen mit Zusatzinformationen mit ext_proc

Eine gekürzte Version der ext_proc-gRPC-API sieht so aus:

// The gRPC API to be implemented by the external processing server
service ExternalProcessor {
  rpc Process(stream ProcessingRequest) returns (stream ProcessingResponse) {
  }
}

// Envoy sets one of these fields depending on the processing stage.
message ProcessingRequest {
  oneof request {
    HttpHeaders request_headers = 2;
    HttpHeaders response_headers = 3;
    HttpBody request_body = 4;
    HttpBody response_body = 5;
  }
}

message ProcessingResponse {
  oneof response {
    HeadersResponse request_headers = 1;
    HeadersResponse response_headers = 2;
    BodyResponse request_body = 3;
    BodyResponse response_body = 4;

    ImmediateResponse immediate_response = 7;
  }
}

Nachdem die Proxys für Application Load Balancer und Secure Web Proxy die Header für eine HTTP-Anfrage empfangen haben, senden sie die Nachricht ProcessingRequest an den Erweiterungsdienst. Das Feld request_headers ist dabei auf die HTTP-Header vom Client festgelegt.

Der Erweiterungsdienst muss auf die Nachricht ProcessingRequest mit einer entsprechenden Nachricht ProcessingResponse antworten, die alle konfigurierten Änderungen an den Headern oder dem Text der Nachricht ProcessingRequest enthält. Alternativ kann der Dienst das Feld immediate_response festlegen, damit der Netzwerkproxy die Verarbeitung der Anfrage beendet und die angegebene Antwort an den Client zurücksendet.

Bei REQUEST_HEADER- und RESPONSE_HEADER-Ereignissen kann der Erweiterungsdienst die HTTP-Header in der Anfrage oder Antwort bearbeiten. Der Dienst kann Header hinzufügen, ändern oder löschen, indem er das Feld request_headers oder response_headers in der Nachricht ProcessingResponse entsprechend festlegt. Verwenden Sie das Feld raw_value für Header.

Mit Traffic-Erweiterungen können die Header und der Text von Anfragen und Antworten geändert werden. Der Erweiterungsserver kann den Verarbeitungsmodus dynamisch überschreiben und die Erweiterung für nachfolgende Phasen der Anfragenverarbeitung aktivieren oder deaktivieren. Load Balancer werten Routenregeln nicht neu aus, nachdem sie eine Traffic-Erweiterung aufgerufen haben.

Edge-, Autorisierungs- und Routenerweiterungen unterstützen nur HTTP-Header. Diese Erweiterungen können HTTP-Texte nicht prüfen oder ändern.

Bei Routen- und Traffic-Erweiterungen können Erweiterungen mit Zusatzinformationen asynchron ausgeführt werden, wenn observabilityMode für die Erweiterung auf true gesetzt ist und der Modus für die Textverarbeitung ist STREAMED (Standard). Aufrufe des Erweiterungs-Backends werden asynchron ausgeführt, ohne die Verarbeitung der laufenden Anfrage zu unterbrechen. Antworten werden gegebenenfalls ignoriert.

Auf Attribute in Erweiterungen mit Zusatzinformationen zugreifen

Bei Erweiterungen mit Zusatzinformationen, die das Protokoll ext_proc verwenden, werden die konfigurierten Attribute in der Nachricht ProcessingRequest gesendet. Die Attribute werden in einem Zuordnungsfeld gespeichert, in der Regel unter einem Schlüssel wie envoy.filters.http.ext_proc.

Die Schlüssel in der Zuordnung entsprechen den Attributnamen, die Sie im Feld forwardAttributes Ihrer Erweiterungskonfiguration angegeben haben.

Das folgende Beispiel zeigt die Struktur von ProcessingRequest.attributes:

attributes {
  key: "envoy.filters.http.ext_proc"
  value {
    fields {
      key: "request.host"
      value { string_value: "example.com"