Erweiterte Trafficverwaltung
Dieses Dokument richtet sich an Mesh- oder Plattform-Administratoren und Dienstentwickler, die fortgeschrittene Kenntnisse von Cloud Service Mesh und Service Mesh-Konzepten haben und bestimmen und konfigurieren, wie Traffic in einer Cloud Service Mesh-Bereitstellung verwaltet wird.
Cloud Service Mesh bietet erweiterte Funktionen zur Trafficverwaltung, mit denen Sie besser steuern können, wie Traffic verarbeitet wird. Cloud Service Mesh unterstützt die folgenden Anwendungsfälle:
- Detailliertes Traffic-Routing von Anfragen an einen oder mehrere Dienste.
- Gewichtete Trafficaufteilung, um den Traffic auf mehrere Dienste zu verteilen.
- Trafficspiegelungsrichtlinien, die Anfragen an einen Debugging-Dienst senden und
in eine andere kopiert. Trafficspiegelung wird mit dem
TCPRoute
nicht unterstützt oder dieTLSRoute
-Ressource. - Optimierte Traffic-Verteilung auf die Back-Ends eines Dienstes zur Verbesserung der Last für ein ausgewogenes Verhältnis.
Mit diesen erweiterten Trafficverwaltungsfunktionen können Sie Ihre Verfügbarkeits- und Leistungsziele erreichen. Einer der Vorteile der Verwendung von Cloud Service Mesh für diese Anwendungsfälle besteht darin, dass Sie die wird verwaltet, ohne dass Sie Ihren Anwendungscode ändern müssen.
Die Trafficverwaltung in einem Cloud Service Mesh-Service Mesh basiert auf den folgenden Ressourcen:
Mesh
-Ressource, die das Service Mesh identifiziert und den Komponente, die für die Weiterleitung von Traffic und die Anwendung Richtlinien. DieMesh
-Ressource identifiziert auch den Port für die Traffic-Abfangung.Gateway
-Ressource, die Middle-Proxys identifiziert und die Komponente darstellt, die eine Liste von IP‑Adresse:Port-Paaren überwacht, Traffic weiterleitet und Richtlinien anwendet.Route
-Ressource, die einen von mehreren Typen haben kann und Informationen zum Traffic-Routing für das Mesh enthält.Route
-Ressourcen identifizieren Hostnamen und Ports, mit denen Clients Traffic an Backend-Dienste weiterleiten können. Es gibt folgende Arten vonRoute
-Ressourcen:HTTPRoute
, das nur in Meshes mit Envoy-Proxys verfügbar ist. Wenn Sie die RessourceHTTPRoute
zum Konfigurieren der Envoy-Proxys zum Senden von HTTP-Anfragen verwenden, sind alle Funktionen in diesem Dokument verfügbar.TCPRoute
, das nur in Mesh-Netzwerken mit Envoy-Proxys verfügbar ist.TLSRoute
, das nur in Meshes mit Envoy-Proxys verfügbar ist.GRPCRoute
, die in Meshes mit Envoy-Sidecar-Proxys und proxylosem gRPC verfügbar ist. Wenn Sie proxylose gRPC-Dienste oder ‑Anwendungen mit Cloud Service Mesh verwenden, sind einige der in diesem Dokument beschriebenen Funktionen nicht verfügbar.
- Back-End-Dienst, mit dem
Route
-Ressourcen verknüpft sind.
Konfiguration
Zum Konfigurieren der erweiterten Trafficverwaltung verwenden Sie dieselben Route
- und Back-End-Dienstressourcen, die Sie bei der Einrichtung von Cloud Service Mesh verwenden.
Cloud Service Mesh wiederum konfiguriert Ihre Envoy-Proxys und proxylose gRPC-Dienste
Anwendungen, um die von Ihnen festgelegten Richtlinien für die erweiterte Traffic-Verwaltung zu erzwingen
nach oben.
Auf übergeordneter Ebene führen Sie diese Schritte aus:
- Konfigurieren Sie eine
Mesh
-Ressource, um das Service Mesh zu identifizieren. Konfigurieren Sie
Route
-Ressourcen für Folgendes, basierend auf dem Eigenschaften der ausgehenden Anfrage:Wählen Sie den Back-End-Dienst aus, an den Anfragen weitergeleitet werden sollen.
Führen Sie ggf. weitere Aktionen aus.
Konfigurieren Sie den Backend-Dienst, um zu steuern, wie Traffic nach der Auswahl eines Zieldienstes an Backends und Endpunkte verteilt wird.
Trafficrouting und -aktionen
In Cloud Service Mesh wird Traffic basierend auf Werten in der Ressource Mesh
weitergeleitet.
Route
und Back-End-Dienstressource. Alle erweiterten Trafficverwaltungsfunktionen in Verbindung mit Routing und Aktionen werden über die Route
-Objekte konfiguriert.
In den folgenden Abschnitten werden die erweiterten Features zur Trafficverwaltung beschrieben, die Sie in den Route
-Objekten einrichten können.
Anfragen verarbeiten
Wenn ein Client eine Anfrage sendet, wird sie wie in den folgenden Schritten beschrieben verarbeitet:
Die Anfrage wird so einer bestimmten
Route
-Ressource zugeordnet:- Wenn Sie Envoy verwenden:
- Der Host-Header in der HTTP-Anfrage wird mit dem
hostnames
-Feld in jederHTTPRoute
- oderGRPCRoute
-Ressource abgeglichen, um die richtigeRoute
-Ressource für die Anfrage auszuwählen. Nur die RessourcenHTTPRoute
undGRPCRoute
haben das Feldhostnames
. - Die IP-Adresse wird für das Routing von TCP-Traffic mit
TCPPRoute
abgeglichen. - SNI und ALPN werden für die TLS-Weiterleitung mit
TLSRoute
verwendet. - Die
HTTPRoute
- undGRPCRoute
-Ressourcen, die mit einerMesh
oderGateway
verknüpft sind, müssen eindeutige Hostnamen haben. Wenn Sie versuchen, mehrere Routen mit in Konflikt stehenden Hostnamen anzuhängen, wird die Konfiguration abgelehnt. - Ebenso muss das
IP:Port
-Feld derTCPRoute
eindeutig sein, andernfalls wird die Konfiguration abgelehnt. - Ebenso müssen SNI und ALPN für die
TLSRoute
eindeutig sein. - Wenn sich Hostnamen wie
a.example.com
und*.example.com
stimmt die Anfrage mit der spezifischeren Route überein.
- Der Host-Header in der HTTP-Anfrage wird mit dem
- Wenn Sie proxylose gRPC-Dienste verwenden:
- Proxylose gRPC-Clients verwenden das Namensauflösungsschema
xds
. Siehostname[:port]
im Ziel-URI auflösen, indem Sie eine Anfrage senden zum Cloud Service Mesh. - Nur der Port einer
GRPCRoute
-Ressource wird mit dem Port im Ziel-URI verglichen (z. B.xds:///example.hostname:8080
). Der Ziel-URI muss genau mit dem String im Feldhostnames
derGRPCRoute
übereinstimmen.
- Proxylose gRPC-Clients verwenden das Namensauflösungsschema
- Wenn Sie Envoy verwenden:
Die
Route
-Ressource kann weitere Routinginformationen und -regeln enthalten.Nachdem der Ziel-Back-End-Dienst ausgewählt wurde, wird der Traffic verteilt. zwischen den Back-Ends oder Endpunkten für diesen Ziel-Back-End-Dienst, basierend für die Konfiguration in der Back-End-Dienstressource.
Der zweite Schritt wird im folgenden Abschnitt Einfaches Routing nach Host und Pfad beschrieben. Der dritte Schritt wird unter Erweitertes Routing und erweiterte Aktionen beschrieben.
Einfaches Routing nach Host und Pfad
Cloud Service Mesh unterstützt ein vereinfachtes Routingschema und eine erweiterten Schemas. Im einfachen Schema geben Sie einen Host und optional einen Pfad. Der Host und der Pfad der Anfrage werden ausgewertet, um den Back-End-Dienst zu ermitteln an den die Anfrage weitergeleitet wird.
- Der Host der Anfrage ist der Teil einer URL mit dem Domainnamen. Der Hostteil der URL
http://example.com/video/
lautet beispielsweiseexample.com
. - Der Pfad der Anfrage ist der Teil der URL, der auf den Hostnamen folgt. Der Pfadteil der URL
http://example.com/video/
lautet beispielsweise/video
.
Sie richten ein einfaches Routing basierend auf Host und Pfad in der Routingregelzuordnung ein, die aus Folgendem besteht:
- Ein globales
Mesh
- Ein
HTTPRoute
oder einGRPCRoute
Der Großteil der Konfiguration erfolgt in der HTTPRoute
. Nach dem Erstellen der
anfängliche Routingregelzuordnung verwenden, müssen Sie nur die HTTPRoute
-Ressource ändern.
Am einfachsten ist eine Standardregel, in der Sie nur eine Platzhalter-Hostregel (*
) und ein Tool zum Abgleich von Pfaden mit einem Standarddienst angeben. Nachdem Sie die Standardregel erstellt haben, können Sie zusätzliche Regeln hinzufügen, mit denen verschiedene Hosts und Pfade angegeben werden. Ausgehende Anfragen werden folgendermaßen ausgewertet:
Wenn der Host einer Anfrage (z. B.
example.com
) mit dem Hostnamen vonHTTPRoute
übereinstimmt:- Als Nächstes wird
RouteRule
ausgewertet. MitRouteRule
wird festgelegt, wie Traffic abgeglichen und weitergeleitet wird, wenn ein Abgleich erfolgt. - Jede
RouteRule
enthält eine oder mehrere Routenübereinstimmungen, die ausgewertet werden mit dem Anfragepfad vergleichen. - Wird eine Übereinstimmung gefunden, wird die Anfrage an den Dienst weitergeleitet, der in
RouteAction
.
- Als Nächstes wird
Weitere Informationen zu den Ressourcenfeldern von HTTPRoute
und ihrer Funktionsweise finden Sie in der API-Dokumentation für Netzwerkdienste.
Erweitertes Routing und erweiterte Aktionen
Wenn Sie nicht nur eine Anfrage weiterleiten möchten, die auf dem Host und dem Pfad der Anfrage basiert, können Sie auch erweiterte Regeln einrichten, um Anfragen weiterzuleiten und Aktionen auszuführen.
Auf übergeordneter Ebene funktionieren erweitertes Routing und erweiterte Aktionen so:
- Wie beim einfachen Routing wird der Host der Anfrage mit dem Host
Regeln, die Sie in
HTTPRoute
oderGRPCRoute
konfigurieren. Wenn der Host einer Anfrage mit dem Hostnamen übereinstimmt, wirdHTTPRoute
oderGRPCRoute
ausgewertet. - Nachdem eine Route ausgewählt wurde, können Sie Aktionen anwenden.
Erweitertes Routing
Das erweiterte Routing ähnelt dem oben beschriebenen einfachen Routing, mit der Ausnahme, dass Sie zusätzliche Abgleichsbedingungen festlegen können. Sie können beispielsweise festlegen, dass eine Regel mit dem Header einer Anfrage übereinstimmt, wenn der Name des Headers genau oder nur teilweise übereinstimmt, z. B. anhand eines Präfixes oder Suffixes. Dabei können der Name des Headers mit einem regulären Ausdruck verglichen oder andere Kriterien herangezogen werden. Beispielsweise kann geprüft werden, ob ein Header vorhanden ist.
Weitere Abgleichsbedingungen und Details zu headerMatches
und queryParameterMatches
finden Sie auf der Seite network services
REST API.
Durch die Kombination von Host-, Pfad-, Header- und Abfrageparametern mit Abgleichsbedingungen können Sie besonders ausdrucksstarke Regeln erstellen, die genau den Anforderungen Ihrer Trafficverwaltung entsprechen. Weitere Informationen finden Sie in der folgenden Tabelle.
HTTP-basierte Anwendung | gRPC-basierte Anwendung | |
---|---|---|
HTTP-Hosts im Vergleich zu gRPC-Hosts | Der Host ist der Teil einer URL mit dem Domainnamen, die von der Anwendung aufgerufen wird. Der Hostteil der URL |
Der Host ist der Name, den ein Client im Kanal-URI verwendet, um eine Verbindung zu einem bestimmten Dienst herzustellen. Der Hostteil des Kanal-URI |
HTTP-Pfade im Vergleich zu gRPC-Pfaden | Der Pfad ist der Teil der URL, der dem Hostnamen folgt. Der Pfadteil der URL |
Der Pfad befindet sich im Header Wenn Sie beispielsweise die Methode |
Andere gRPC-Header (Metadaten) | gRPC unterstützt das Senden von Metadaten zwischen dem gRPC-Client und dem gRPC-Server, um zusätzliche Informationen zu einem RPC-Aufruf bereitzustellen. Diese Metadaten liegen in Form von Schlüssel/Wert-Paaren vor, die als Header in der HTTP/2-Anfrage bereitgestellt werden. |
Aktionen
Mit Cloud Service Mesh können Sie Aktionen festlegen, die von Envoy-Proxys oder proxylosen gRPC-Anwendungen übernommen werden, wenn eine Anfrage verarbeitet wird. Folgende Aktionen können mit Cloud Service Mesh konfiguriert werden.
Aktion | API-Feldname | Beschreibung |
---|---|---|
Weiterleitungen | redirect |
Gibt einen konfigurierbaren 3xx-Antwortcode zurück. Außerdem wird der Antwortheader Location mit dem entsprechenden URI festgelegt, wobei der Host und der Pfad wie in der Weiterleitungsaktion angegeben ersetzt werden.
|
URL-Umschreibungen | urlRewrite |
Der Teil der URL mit dem Hostnamen, dem Pfad oder beide werden umgeschrieben, bevor eine Anfrage an den ausgewählten Back-End-Dienst gesendet wird. |
Headertransformationen | requestHeaderModifier/responseHeaderModifier |
Fügt Anfrageheader hinzu oder entfernt diese, bevor eine Anfrage an den Back-End-Dienst. Kann Antwortheader auch nach dem eine Antwort vom Back-End-Dienst zu erhalten. |
Traffic-Spiegelung | requestMirrorPolicy |
Zusätzlich zur Weiterleitung der Anfrage an das ausgewählte Backend -Dienst, sendet eine identische Anfrage an das konfigurierte Spiegel-Back-End Service auf einem Feuer und Vergessenwerden. Der Load-Balancer wartet nicht auf eine Antwort vom Back-End, und sendet die gespiegelte Anfrage. Die Spiegelung ist hilfreich zum Testen einer neuen Version eines Back-End-Dienstes. Sie können sie auch verwenden, um Produktionsfehler in einer Debugversion von in Ihrem Back-End-Dienst und nicht in der Produktionsversion. |
Gewichtete Trafficaufteilung | weiDestination.serviceNameght |
Lässt zu, dass Traffic für eine übereinstimmende Regel an mehrere Back-End-Dienste verteilt wird, proportional zu einer benutzerdefinierten Gewichtung, die dem jeweiligen Back-End-Dienst zugewiesen ist. Diese Funktion eignet sich zur Konfiguration abgestufter Bereitstellungen oder von A/B-Tests. Die Routingaktion könnte beispielsweise so konfiguriert werden, dass 99 % des Traffics an einen Dienst gesendet werden, der eine stabile Version einer Anwendung ausführt, während 1 % des Traffics an einen separaten Dienst mit einer neueren Version dieser Anwendung gesendet wird. |
Neuversuche | retryPolicy |
Dient zum Konfigurieren von Bedingungen, unter denen der Load-Balancer fehlgeschlagene Anfragen wiederholt, der Wartezeit des Load-Balancers bis zum erneuten Versuch sowie der maximal zulässigen Anzahl an Wiederholungsversuchen. |
Zeitlimit | timeout |
Gibt das Zeitlimit für die ausgewählte Route an. Das Zeitlimit wird vom Zeitpunkt der vollständigen Verarbeitung der Anfrage bis zur vollständigen Verarbeitung der Antwort berechnet. Das Zeitlimit umfasst alle Wiederholungen. |
Fault Injection | faultInjectionPolicy |
Kann Fehler bei der Bearbeitung von Anfragen einbringen, um Störungen zu simulieren, einschließlich hoher Latenz, Dienstüberlastung, Dienstfehlern und Netzwerkpartitionierung. Dieses Feature ist hilfreich, um die Ausfallsicherheit eines Dienstes gegenüber simulierten Störungen zu testen. |
Sicherheitsrichtlinien | corsPolicy |
Richtlinien für Cross-Origin Resource Sharing (CORS) verarbeiten die Einstellungen für die Erzwingung von CORS-Anfragen. |
Weitere Informationen zu Aktionen und ihrer Funktionsweise findest du in der Network Services API.
In jeder Routingregel können Sie eine der folgenden Routingaktionen angeben:
- Traffic an einen einzelnen Dienst weiterleiten (
destination.serviceName
) - Traffic auf mehrere Dienste aufteilen (
destination.weight
) - Weiterleitungs-URLs (
redirect
)
Darüber hinaus können Sie eine der zuvor genannten Routingaktionen mit einer oder mehreren der folgenden Routingaktionen kombinieren. Diese werden in der Cloud Console als Add-on-Aktionen bezeichnet:
- Anfrage- oder Antwortheader bearbeiten (
requestHeaderModifier/responseHeaderModifier
) - Trafficspiegelung (
requestMirrorPolicy
) - URL-Host, -Pfad oder beides umschreiben (
urlRewrite
) - Fehlgeschlagene Anfragen wiederholen (
retryPolicy
) - Zeitlimit festlegen (
timeout
) - Fehler in einem Prozentsatz des Traffics einführen (
faultInjectionPolicy
) - CORS-Richtlinie hinzufügen (
corsPolicy
)
Da Aktionen bestimmten Regeln zugeordnet sind, kann der Envoy-Proxy oder Eine proxylose gRPC-Anwendung kann basierend auf der Anfrage die es verarbeitet.
Traffic auf die Back-Ends eines Dienstes verteilen
Wenn ein Client eine ausgehende Anfrage verarbeitet, wird wie unter Anfragen verarbeiten beschrieben zuerst ein Zieldienst ausgewählt. Nachdem ein Zieldienst ausgewählt wurde, muss er herausfinden, Back-End oder Endpunkt die Anfrage erhalten soll.
Im obigen Diagramm wurde die Regel vereinfacht. Die Regel ist häufig eine Hostregel, ein Tool zum Abgleich von Pfaden und mindestens eine Pfad- oder Routingregel. Die Der Zieldienst ist der Back-End-Dienst. Die Anfrage wird von Back-End 1, … und Back-End n empfangen und verarbeitet. Diese Back-Ends können beispielsweise Compute Engine-VM-Instanzen sein, die Ihren serverseitigen Anwendungscode hosten.
Standardmäßig sendet der Client, der die Anfrage verarbeitet, Anfragen an das nächstgelegene fehlerfreie Back-End, das noch Kapazitäten frei hat. Um eine Überlastung eines bestimmten wird der Round-Robin-Load-Balancing-Algorithmus nachfolgende Anfragen über andere Back-Ends des Zieldienstes. In bestimmten Fällen muss dieses Verhalten jedoch genauer gesteuert werden.
Load-Balancing, Sitzungsaffinität und Schützen von Back-Ends
Sie können für jeden Dienst die folgenden Richtlinien zur Trafficverteilung festlegen.
Richtlinie | API-Feldname | Beschreibung |
---|---|---|
Load-Balancing-Modus | balancingMode |
Steuert, wie eine Netzwerk-Endpunktgruppe (NEG) oder eine verwaltete Instanzgruppe (Managed Instance Group, MIG) ausgewählt wird, nachdem ein Zieldienst ausgewählt wurde. Sie können den Balancing-Modus so konfigurieren, dass die Last auf der Grundlage von gleichzeitigen Verbindungen und der Anfragerate verteilt wird. |
Load-Balancing-Richtlinie | localityLbPolicy |
Legt den Load-Balancing-Algorithmus fest, der zur Verteilung des Traffics auf Back-Ends innerhalb einer NEG oder MIG verwendet wird. Zur Optimierung der Leistung können Sie aus verschiedenen Algorithmen auswählen (z. B. Round-Robin oder Least-Request). |
Sitzungsaffinität | sessionAffinity |
Bietet einen Best-Effort-Versuch zum Senden von Anfragen von einem bestimmten Client zum selben Back-End gesendet, dass das Back-End fehlerfrei ist und Kapazität hat. Cloud Service Mesh unterstützt vier Optionen für die Sitzungsaffinität: Client-IP-Adresse, HTTP-Cookie-basiert, HTTP-Header-basiert und Cookie-Affinität, die von Cloud Service Mesh selbst generiert wird. |
Konsistenter Hash | consistentHash |
Stellt Soft-Sitzungsaffinität basierend auf HTTP-Headern, Cookies oder anderen Attributen bereit. |
Schutzschalter | circuitBreakers |
Legt Obergrenzen für die Anzahl von Verbindungen und Anfragen pro fest. Verbindung zu einem Back-End-Dienst. |
Ausreißererkennung | outlierDetection |
Gibt die Kriterien zum Entfernen (1) fehlerhafter Back-Ends oder von MIGs oder NEGs und (2) fügen Sie ein Back-End oder Endpunkt zurück, wenn er als fehlerfrei genug für den Empfang von Traffic gilt. noch einmal. Die mit dem Dienst verknüpfte Systemdiagnose bestimmt, ob ein Back-End oder Endpunkt als fehlerfrei gilt. |
Weitere Informationen zu den verschiedenen Optionen zur Traffic-Verteilung und Informationen zur Funktionsweise finden Sie in den folgenden Dokumenten:
Anwendungsbeispiele
Die erweiterte Trafficverwaltung deckt viele Anwendungsfälle ab. Dieser Abschnitt enthält einige allgemeine Beispiele.
Weitere Beispiele einschließlich Beispielcode finden Sie unter Erweiterte Trafficverwaltung mit Envoy konfigurieren und Erweiterte Trafficverwaltung mit proxylosen gRPC-Diensten konfigurieren.
Detailliertes Traffic-Routing für die Personalisierung
Sie können Traffic anhand der Parameter der Anfrage an einen Dienst weiterleiten. Beispielsweise können Sie mit diesem Dienst Android-Nutzern ein personalisiertes Erlebnis ermöglichen. Im folgenden Diagramm konfiguriert Cloud Service Mesh Ihr Service Mesh so, dass Anfragen mit dem Header user-agent:Android
an den Android-Dienst statt an den generischen Dienst gesendet werden.
Gewichtete Trafficaufteilung für sicherere Bereitstellungen
Die Bereitstellung einer neuen Version eines bestehenden Produktionsdienstes birgt in der Regel ein gewisses Risiko. Auch wenn die Tests in einer Testumgebung erfolgreich sind, möchten Sie unter Umständen nicht sofort alle Nutzer an die neue Version weiterleiten.
Mit Cloud Service Mesh können Sie gewichtete Trafficaufteilungen definieren, um den Traffic auf mehrere Dienste zu verteilen. Sie können beispielsweise 1% des Traffics an die neue Version Ihres Dienstes senden, dessen Leistung überwachen und dann den Anteil des Traffics an den neuen Dienst nach und nach erhöhen.
Trafficspiegelung für das Debugging
Wenn Sie ein Problem beheben möchten, kann es hilfreich sein, Kopien des Produktionstraffics an einen Debugging-Dienst zu senden. Mit Cloud Service Mesh können Sie Anfragen Spiegelrichtlinien, sodass Anfragen an einen Dienst und Kopien dieser Richtlinien -Anfragen an einen anderen Dienst gesendet.
Optimiertes Load-Balancing für bessere Leistung
Je nach den Eigenschaften Ihrer Anwendung stellen Sie möglicherweise fest, dass Sie die Leistung und Verfügbarkeit verbessern können, wenn Sie die Verteilung des Traffics auf die Back-Ends eines Dienstes optimieren. Mit Cloud Service Mesh können Sie und fortschrittlichen Load-Balancing-Algorithmen Ihren Bedürfnissen entsprechen.
Das folgende Diagramm zeigt im Gegensatz zu den vorherigen Diagrammen sowohl ein Ziel Back-End-Dienst (Produktionsdienst) und die Back-Ends für diesen Back-End-Dienst (Virtuelle Maschine 1, Virtuelle Maschine 2, Virtuelle Maschine 3). Mit der erweiterten Trafficverwaltung können Sie festlegen, wie ein Ziel-Back-End-Dienst ausgewählt wird, und wie der Traffic zwischen den Back-Ends für diesen Zieldienst verteilt wird.
Weitere Informationen zum Load Balancing mit Cloud Service Mesh finden Sie unter Erweitertes Load Balancing.
Nächste Schritte
- Informationen zum Weiterleiten von Traffic von außerhalb des Mesh-Netzwerks in das Mesh-Netzwerk finden Sie unter Eingehender Traffic für Ihr Mesh.