Mit Diensterweiterungen können unterstützte Application Load Balancer Plug‑ins verwenden, um benutzerdefinierte Verarbeitung einzufügen in den Verarbeitungspfad. Edge-Erweiterungen werden im Anfrageverarbeitungspfad ausgeführt, wenn der Load Balancer Anfrageheader empfängt und bevor er die URL-Zuordnung auswertet oder Cloud CDN aufruft. So können Sie das Caching und das Routing beeinflussen. Auf dieser Seite wird beschrieben, wie Sie Edge-Erweiterungen konfigurieren.
Eine Übersicht über Application Load Balancer-Erweiterungen finden Sie unter Übersicht über Cloud Load Balancing-Erweiterungen.
Eine Erweiterung für einen Application Load Balancer verweist auf die folgenden Ressourcen:
- Eine Weiterleitungsregel, die angehängt werden soll
- Ein Plug‑in
Die Erweiterung verweist auf die Weiterleitungsregel des Load Balancers , die angehängt werden soll. Nachdem Sie die Ressource konfiguriert haben, sendet der Load Balancer übereinstimmende Anfragen an Erweiterungsdienste. Sie können nur eine Edge-Erweiterung an eine Weiterleitungsregel anhängen und nur ein Plug‑in in eine Edge-Erweiterungskette einfügen.
Informationen zu den Limits für Application Load Balancer-Erweiterungen, finden Sie auf der Seite Kontingente und Limits.
Mit Plug‑ins konfigurieren
In diesem Abschnitt wird anhand eines Beispiels gezeigt, wie Sie eine Edge-Erweiterung mit einem Plug‑in konfigurieren, das den Anfrageheader :host in service-extensions.com umschreibt, wenn der Pfad mit /extensions übereinstimmt. Der frühere Host und der neu konfigurierte Host werden Backend-Diensten in verschiedenen Regionen zugeordnet, was das Routingverhalten veranschaulicht.
Alle Erweiterungsressourcen, die auf ein bestimmtes Plug‑in verweisen, müssen denselben Typ haben. Die Erweiterungen müssen auch dasselbe Load-Balancing-Schema haben. Sie können Cloud Load Balancing-Erweiterungen nicht mit Plug‑ins konfigurieren, die bereits in Media CDN-Erweiterungen verwendet werden.
Hinweis
Erstellen Sie ein Plug‑in, das Ihren benutzerdefinierten Code enthält.
Erstellen und konfigurieren Sie einen Application Load Balancer, der Edge-Erweiterungs-Plug‑ins unterstützt.
Folgen Sie der Anleitung auf der Seite Globalen externen Application Load Balancer mit VM-Instanzgruppen-Backends einrichten für alle Schritte mit Ausnahme der folgenden:
- Nennen Sie den Backend-Dienst
service-one. - Verweisen Sie
service-oneauf eine VM-Instanz in RegionA. - Verweisen Sie
gl7-gxlb-url-mapstandardmäßig aufservice-one.
- Nennen Sie den Backend-Dienst
Richten Sie einen zusätzlichen Backend-Dienst ein,
service-two, und verweisen Sie ihn auf eine VM in RegionB.Fügen Sie der URL-Zuordnung einen Pfad-Matcher hinzu, der auf
service-twoverweist. Verwenden Sie dengcloud compute url-maps add-path-matcherBefehl mit den folgenden Beispielwerten:gcloud compute url-maps add-path-matcher gl7-gxlb-url-map \ --path-matcher-name=rewrite-host \ --default-service=service-two \ --new-hosts=service-extensions.com \ --location=globalRichten Sie eine Möglichkeit ein, Testanfragen an Ihren Dienst zu senden (z. B. durch Ausführen von curl).
Edge-Erweiterung mit einem Plug‑in konfigurieren
Prüfen Sie das Verhalten, bevor eine Erweiterung konfiguriert wird.
Prüfen Sie, ob eine Anfrage ohne expliziten Pfad an Region
Agesendet wird:curl FORWARDING_RULE_IP
Ersetzen Sie
FORWARDING_RULE_IPdurch die IP-Adresse der Weiterleitungsregel. Verwenden Sie dengcloud compute forwarding-rules describeBefehl, um die IP-Adresse zu finden.Die Ausgabe sieht in etwa so aus und gibt an, dass die Seite von einer VM in
region Abereitgestellt wird:Page served from region-A-vmPrüfen Sie, ob in der URL-Zuordnung keine Übereinstimmung für
/extensionsvorhanden ist:curl FORWARDING_RULE_IP/extensions
Ersetzen Sie
FORWARDING_RULE_IPdurch die IP-Adresse der Weiterleitungsregel. Verwenden Sie dengcloud compute forwarding-rules describeBefehl, um die IP-Adresse zu finden.Die Ausgabe gibt an, dass in der URL-Zuordnung keine Übereinstimmung für
/extensionsvorhanden ist. Die Ausgabe sieht etwa so aus:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
Konfigurieren Sie die Edge-Erweiterung.
Console
Rufen Sie in der Google Cloud Console die Seite Diensterweiterungen auf.
Klicken Sie auf Erweiterung erstellen.
Ein Assistent führt Sie durch einige erste Schritte.
Wählen Sie als Produkt Load Balancing aus. Klicken Sie anschließend auf Weiter.
Eine Liste der unterstützten Application Load Balancer wird angezeigt.
Wählen Sie als Load-Balancer-Typ „Globaler externer Application Load Balancer“ aus. Klicken Sie anschließend auf Weiter.
Wählen Sie als Erweiterungstyp Edge-Erweiterungen aus und klicken Sie dann auf Weiter.
Klicken Sie auf Weiter, um das Formular Erweiterung erstellen zu öffnen.
Im Formular Erweiterung erstellen können die vorherigen Auswahlen nicht bearbeitet werden.
Gehen Sie im Bereich Grundlagen so vor:
Geben Sie einen eindeutigen Namen für die Erweiterung an.
Der Name muss mit einem Kleinbuchstaben beginnen, gefolgt von bis zu 62 Kleinbuchstaben, Ziffern oder Bindestrichen. Das letzte Zeichen darf kein Bindestrich sein.
Optional: Geben Sie eine kurze Beschreibung der Erweiterung mit maximal 1.024 Zeichen ein.
Optional: Klicken Sie im Bereich Labels auf Label hinzufügen. Gehen Sie dann in der angezeigten Zeile so vor:
- Geben Sie für Schlüssel einen Schlüsselnamen ein.
- Geben Sie für Wert einen Wert für den Schlüssel ein.
Wenn Sie weitere Schlüssel/Wert-Paare hinzufügen möchten, klicken Sie auf Label hinzufügen. Sie können maximal 64 Schlüssel/Wert-Paare hinzufügen.
Weitere Informationen zu Labels finden Sie unter Labels für Projekte erstellen und aktualisieren.
Wählen Sie unter Weiterleitungsregeln eine oder mehrere Weiterleitungsregeln aus, die mit der Erweiterung verknüpft werden sollen, z. B.
cr-xlb-forwarding-rule.Weiterleitungsregeln, die bereits mit einer anderen Erweiterung verknüpft sind, können nicht ausgewählt werden und werden deaktiviert angezeigt.
Fügen Sie unter Erweiterungsketten eine oder mehrere Erweiterungsketten hinzu, die für eine übereinstimmende Anfrage ausgeführt werden sollen.
So fügen Sie eine Erweiterungskette hinzu: Gehen Sie so vor und klicken Sie dann auf Fertig:
Geben Sie für Neue Erweiterungskette einen eindeutigen Namen an.
Der Name muss RFC-1034 entsprechen, darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und darf maximal 63 Zeichen lang sein. Außerdem muss das erste Zeichen ein Buchstabe und das letzte Zeichen ein Buchstabe oder eine Ziffer sein.
Geben Sie für Übereinstimmungsbedingung einen CEL-Ausdruck (Common Expression Language) an, um Anfragen abzugleichen, für die die Erweiterungskette ausgeführt wird, z. B.
request.path.startsWith("/extensions").Bei Edge-Erweiterungen können Sie nur einen regulären Ausdruck pro CEL-Ausdruck verwenden.
Weitere Informationen zu CEL-Ausdrücken finden Sie unter Syntaxhilfe oder in der Referenz zur CEL-Matcher-Sprache.
Fügen Sie eine Erweiterung hinzu, die für eine übereinstimmende Anfrage ausgeführt werden soll. Bei Edge-Erweiterungen können Sie nur eine Erweiterung angeben.
Gehen Sie unter Erweiterungen so vor und klicken Sie dann auf Fertig:
Wählen Sie für Programmierbarkeitstyp die Option Plug‑ins aus.
Geben Sie für Erweiterungsname einen eindeutigen Namen an.
Der Name muss RFC 1034 entsprechen, darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und darf maximal 63 Zeichen lang sein. Außerdem muss das erste Zeichen ein Buchstabe und das letzte Zeichen ein Buchstabe oder eine Ziffer sein.
Wählen Sie unter Plug‑in ein Plug‑in aus, das mit Diensterweiterungen für dasselbe Produkt und denselben Erweiterungstyp erstellt wurde.
Wählen Sie unter Attribute weiterleiten die Attribute aus, die die Erweiterung weiterleiten soll. Weitere Informationen finden Sie unter Unterstützte Attribute.
Klicken Sie unter Header weiterleiten auf Header hinzufügen und fügen Sie dann HTTP-Header hinzu, die an die Erweiterung weitergeleitet werden sollen (vom Client oder vom Backend). Wenn kein Header angegeben ist, werden alle Header gesendet.
Optional: Wählen Sie unter Fail open die Option Aktiviert aus, wenn die Erweiterung im Fail-Open-Modus ausgeführt werden soll. Wenn der Aufruf der Erweiterung fehlschlägt oder das Zeitlimit überschritten wird, wird die Anfrage- oder Antwortverarbeitung ohne Fehler fortgesetzt. Alle nachfolgenden Erweiterungen in der Erweiterungskette werden ebenfalls ausgeführt.
Standardmäßig ist das Feld Fail open nicht ausgewählt. Wenn in diesem Fall keine Antwortheader an den nachgelagerten Client gesendet wurden, wird ein generischer HTTP-Statuscode
500an den Client zurückgegeben. Wenn Antwortheader gesendet wurden, wird der HTTP-Stream zum nachgelagerten Client zurückgesetzt.
Klicken Sie auf Erweiterung erstellen.
gcloud
Definieren Sie das Plug‑in in einer YAML-Datei und verknüpfen Sie es mit einer globalen Weiterleitungsregel, z. B.
cr-xlb-forwarding-rule.cat >edge-plugin.yaml <<EOF name: edge-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_HEADERS forwardAttributes: - request.host - request.path EOFErsetzen Sie Folgendes:
PROJECT_ID: die Projekt-IDWASM_PLUGIN: die ID oder der voll qualifizierte Name des Plug‑ins
Bei Edge-Erweiterungen können Sie nur einen regulären Ausdruck pro CEL-Ausdruck verwenden.
Weitere Informationen zu den Feldern in der YAML-Datei finden Sie in der API-Dokumentation unter ExtensionChain. Informationen zu unterstützten Attributen, siehe Unterstützte Attribute.
Importieren Sie die Edge-Erweiterung. Verwenden Sie den
gcloud service-extensions lb-edge-extensions importBefehl mit den folgenden Beispielwerten:gcloud service-extensions lb-edge-extensions import edge-ext \ --source=edge-plugin.yaml \ --location=global
Nachdem eine Edge-Erweiterung erstellt wurde, dauert es einige Zeit, bis das neue Plug‑in an allen Standorten verteilt ist. Die Zeit kann je nach Standort variieren, da das Plug‑in nicht gleichzeitig an alle Standorte gesendet wird.
Verwenden Sie denselben
curl-Befehl, um zu prüfen, ob die Edge-Erweiterung wie erwartet funktioniert:curl FORWARDING_RULE_IP/extensions
Die Ausgabe sieht in etwa so aus und gibt an, dass die Seite von einer VM in
region Bbereitgestellt wird:Page served from region-B-vmWiederholen Sie den
curl-Befehl ohne Pfad, um zu prüfen, ob das Plug‑in nur für Anfragen mit dem Pfadpräfix/extensionausgeführt wird.curl FORWARDING_RULE_IP
Die Ausgabe sieht etwa so aus:
Page served from region-A-vm
Einschränkungen für Edge-Erweiterungen
- Sie können nur eine Edge-Erweiterung an eine Weiterleitungsregel anhängen.
- Edge-Erweiterungen unterstützen keine HTTP-Body-Verarbeitung.
- Bei Edge-Erweiterungen können Sie nur einen regulären Ausdruck pro CEL-Ausdruck verwenden.
Einschränkungen, die für alle Erweiterungen gelten, finden Sie unter Einschränkungen für Erweiterungen.
Nächste Schritte
- Beispiele für Rust-, Go- und C++-Plug‑ins sowie Testtools finden Sie im GitHub-Repository für Diensterweiterungs-Plug‑ins.
- Erweiterungen verwalten