Plug-ins – Übersicht

Auf dieser Seite finden Sie einen Überblick über die Integration von Plug-ins in Application Load Balancer von Cloud Load Balancing und Media CDN.

Dieses Feature befindet sich im Vorschaumodus für Media CDN.

Plug-ins werden im WebAssembly-Format (Wasm) erstellt und verwenden Proxy-Wasm-APIs.

  • Wasm ist ein offenes und standardisiertes binäres Anweisungsformat, mit dem ein Host Wasm-Module mit kundenseitigem Code laden und ausführen kann. Wasm bietet eine Reihe von Vorteilen für die Ausführung von Kundencode, darunter Sandboxing für Sicherheit, Unterstützung für mehrere Sprachen, Portabilität, breite und wachsende Unterstützung in der Branche sowie eine verbesserte Leistung im Vergleich zu anderen VM-basierten Optionen wie JavaScript.

  • Proxy-Wasm ist ein Open-Source-Projekt, das von Google ins Leben gerufen wurde. Sie definiert APIs, mit denen Sie das Verhalten von Netzwerkproxys anpassen können, indem Sie Callbacks implementieren, die während der Verarbeitung von HTTP-Anfragen und ‑Antworten ausgeführt werden.

Funktionsweise von Plug-ins

Sie können Diensterweiterungen mit Application Load Balancern und Media CDN so verwenden:

  1. Plug‑in-Code vorbereiten:

    1. Benutzerdefinierten Code mit einem der Proxy-Wasm SDKs erstellen:

    2. Kompilieren Sie Ihren Code in ein Wasm-Modul.

    3. Laden Sie den kompilierten Plug-in-Code in ein Artifact Registry-Repository hoch.

  2. Erstellen Sie ein Plug‑in, das den hochgeladenen Plug‑in-Code enthält.

  3. Konfigurieren Sie das Plug-in in Cloud Load Balancing-Erweiterungen oder Media CDN-Erweiterungen.

Plug‑in-Ressourcen

Mit Service Extensions können Sie die folgenden wichtigen Ressourcen erstellen, mit denen Sie benutzerdefinierten Code in den Verarbeitungspfad einfügen können:

  • Plug-ins, die den benutzerdefinierten Code enthalten, den Sie bereitstellen möchten.

  • Plug-in-Versionen, die Versionen Ihres Wasm-Moduls sind. Sie können angeben, welche Version Ihres Wasm-Moduls ein Plug-in als Hauptversion (aktiv) verwenden soll.

Beschränkungen

In diesem Abschnitt werden einige Einschränkungen bei der Verwendung von Plug-ins aufgeführt.

Einschränkungen bei Ressourcen

Die Nutzung von Ressourcen durch Plugins ist streng begrenzt:

  • Ein Plug-in kann pro Aufruf bis zu 1 Millisekunde normalisierter vCPU verwenden. Eine CPU-Millisekunde ist plattformabhängig. Die normalisierte Plattform entspricht jedoch ungefähr einem Prozessor mit einer Taktfrequenz von 4 GHz. Ein Aufruf ist eine unabhängig abgerechnete Ausführungsphase, die aus Anfrageheadern, Anfragetext, Antwortheadern oder Antworttext bestehen kann.

  • Ein Plug-in kann bis zu 16 MiB Arbeitsspeicher pro VM-Instanz verwenden. Eine Instanz muss bis zu 1.000 gleichzeitige Anfragen verarbeiten können. Das bedeutet, dass ein Plug-in bis zu 16 KiB Speicher pro Stream belegen kann. Beachten Sie, dass die gesamte Speichernutzung globale Status- und Stapelzuweisungen umfasst.

Verwenden Sie den Plugin-Tester, um die CPU- und Arbeitsspeicher-Eigenschaften eines Plugins zu testen.

Einschränkungen für APIs

  • Plug-ins können eine Teilmenge der Proxy-Wasm-ABI verwenden. Plug-ins unterstützen keine Timer, benutzerdefinierten Messwerte, freigegebenen Daten, freigegebenen Warteschlangen oder ausgehenden Netzwerkaufrufe.

  • HTTP-Trailer-Ereignisse werden nicht unterstützt.

Einschränkungen bei der Header-Bearbeitung

  • Die maximale Größe einer Mutation (Header- oder Textblöcke) beträgt 128 KiB.

  • Plug-ins können den Verarbeitungsmodus des ext_proc-Streams nicht überschreiben.

  • Die Bearbeitung von Headern über Plug-ins wird für einige Header nicht unterstützt. Der Prozessor ignoriert alle Änderungen an diesen Headern und verarbeitet die Anfrage weiter.

    Für Media CDN-Plug-ins werden die folgenden Funktionen nicht unterstützt:

    • Header: CDN-Loop, connection, keep-alive, proxy-authenticate, proxy-authorization, proxy-connection, te, trailers, transfer-encoding, upgrade oder X-user-IP.
    • Header, die mit x-forwarded,x-goog-, x-google, x-gfe oder x-amz- beginnen.

    Für Cloud Load Balancing-Plug-ins werden die folgenden Elemente nicht unterstützt:

    • Header: connection, keep-alive, proxy-authenticate, proxy-authorization, proxy-connection, sec-user-ip, te, trailer, transfer-encoding, upgrade, x-dont-count-ads, x-dont-show-ads, x-gr, x-proxyuser-ip oder x-user-ip.

      Außerdem werden für LbTrafficExtension die folgenden Header nicht unterstützt: method, authority, scheme oder Host-Header.

    • Header, die mit sec-gfe-, sec-google-, x-amz-, x-forwarded-, x-gfe-, x-goog-, x-google- oder x-gproxy- beginnen.

Einschränkungen bei HTTP/1.1-Clients und ‑Back-Ends

Wenn Sie entweder REQUEST_BODY oder RESPONSE_BODY für eine Erweiterung konfigurieren und der Load Balancer eine entsprechende Anfrage erhält, entfernt er den Content-Length-Header aus der Antwort und wechselt zur Chunked-Body-Codierung.

Nächste Schritte