Übersicht
Mit der GKE-Dienststeuerung können Sie den Netzwerktraffic in Ihrem GKE-Cluster steuern. Sie können Regeln definieren, um bestimmte Arten von Traffic an Netzwerkfunktionen weiterzuleiten, die Sie in Ihrem Cluster bereitgestellt haben. Die GKE-Dienststeuerung ähnelt dem richtlinienbasierten Routing, bei dem Sie den normalen Pfad des Netzwerktraffics überschreiben.
Terminologie und Konzepte
Auf dieser Seite werden die folgenden Konzepte verwendet:
Dienstfunktion (SF)
Eine Dienstfunktion ist eine Softwarekomponente, die mit den empfangenen Datenpaketen arbeitet. Eine Dienstebene kann auf jeder Ebene des OSI-Modells ausgeführt werden, die Ebene02 (Datenverbindungsebene) beginnt.
Dienstfunktionen können allgemein in folgende Kategorien unterteilt werden:
- Firewalls für die Sicherheit
- Proxys für die Zugriffssteuerung
- WAN-Beschleunigung zur Verbesserung der Geschwindigkeit
- Deep Packet Inspection (DPI) zur Inhaltsanalyse
- Lawful Intercept (LI) zur Überwachung und Untersuchung
- Network Address Translator (NAT) für private und öffentliche IP-Adressen
- HTTP für Header-Anreicherung
- Load Balancer für eine effiziente Verteilung von Traffic
Alternative Terminologien für Service Functions sind:
- Container-Appliances
- Virtuelle Appliances
- Virtualisierte Netzwerkfunktionen (NFVs)
- Containerisierte Netzwerkfunktionen (CNFs)
- Cloudnative Netzwerkfunktionen (CNFs)
Bei der Dienststeuerung stellt ein Dienstobjekt eine Dienstfunktion (SF) dar.
Dienstfunktionskette (SFC)
Eine Dienstfunktionskette (SFC) besteht aus einer Reihe von Dienstfunktionen wie Firewalls, Proxys oder Load Balancern, die miteinander verknüpft sind, um Netzwerktraffic in einer bestimmten Reihenfolge zu verarbeiten. Diese Kette fungiert wie eine Pipeline, bei der jede Servicefunktion eine bestimmte Aufgabe für den Traffic ausführt, bevor sie an die nächste Funktion übergeben wird.
Service Function Chain (SFC) wird auch als Service Chain (SC) bezeichnet.
Bei der Dienststeuerung stellt das Objekt ServiceFunctionChain
eine Dienstfunktionskette (SFC) dar.
Eine Dienstfunktion arbeitet unabhängig von einer Dienstfunktionskette. Die Dienstfunktion weiß normalerweise nicht, zu welchen Dienstfunktionsketten sie gehört.
Dienststeuerung
Die Dienststeuerung leitet Pakete in einer Weise an die ausgewählte Dienstfunktion weiter, die für die Quelle und das Ziel vollständig transparent ist. Dieses Konzept wird manchmal als „richtlinienbasiertes Routing„, „Trafficweiterleitung“ oder „Weiterleitung von Dienstfunktionen“ bezeichnet. Service Steering erreicht das transparente Routing mit Genneve + NSH-Kapselung (siehe RFC 8926, RFC 8300, Geneve + NSH IETF {Entwurf).
Einige wichtige Merkmale der Dienststeuerung sind:
- Load Balancing über die Backend-Pods einer Dienstfunktion: Dienstfunktionen werden aus Gründen der Skalierbarkeit und Zuverlässigkeit häufig auf mehreren Pods ausgeführt. Die Dienststeuerung verteilt den eingehenden Netzwerktraffic gleichmäßig auf diese Pods, um zu verhindern, dass ein einzelner Pod überlastet wird.
- Unterstützung von 5-Tupel-Ablaufaffinität (alle Zwischen-Hops müssen für einen bestimmten Ablauf stabil sein): Ein 5-Tupel-Ablauf ist eine Möglichkeit, einen bestimmten Stream von Netzwerktraffic zu identifizieren Quell-IP-Adresse, Quellport, Ziel-IP-Adresse, Zielport und Protokoll. Die Dienststeuerung sorgt dafür, dass alle Pakete innerhalb desselben Ablaufs konsistent an dieselben Service Functions-Funktionen (Hops) weitergeleitet werden.
- Symmetrischen Rückgabedatenpfad aktivieren: Ein symmetrischer Rückgabedatenpfad bedeutet, dass der Antworttraffic dem gleichen Pfad zurück zur Quelle folgt wie der ursprüngliche Anfragetraffic. Die Dienststeuerung sorgt für diese Symmetrie, die für einige Netzwerkprotokolle und Anwendungen wichtig ist.
Für einen bestimmten Netzwerktraffic, der durch den Dienst gesteuert wird, verarbeiten die zwischengeschalteten Dienstfunktions-Pods alle Pakete dieses Netzwerk-Traffics, um konsistente Zwischen-Hops und eine vorhersehbare Route sicherzustellen. Dieselben Service Function-Pods empfangen den Rücktraffic, um für einen symmetrischen Trafficfluss zu sorgen. Wenn der ursprüngliche Traffic an ein Ziel innerhalb desselben Clusters gesendet wird, findet der Rücktraffic automatisch einen Weg zurück durch dieselbe Dienstkette. Wenn sich der ursprüngliche Traffic außerhalb des Clusters befindet, zieht die letzte Servicefunktion in der Kette den Traffic entweder mithilfe der Quellnetzwerkadressübersetzung (Source Network Address Translation, SNAT) oder eines Proxys, der als Vermittler fungiert, zurück.
Anwendungsfälle
Die GKE-Dienststeuerung integriert richtlinienbasiertes Routing in Ihre Cluster. Dies ermöglicht folgende primäre Anwendungsfälle:
Selbstverwaltete Sicherheitsdienste:
Organisationen können ihre eigene Sicherheitsinfrastruktur mithilfe von containerisierten Netzwerkfunktionen (CNFs) wie virtuellen Firewalls (vFWs), virtuellen Firewalls der nächsten Generation (vNG-FWs) und virtuellen Angriffserkennungssystemen (vIDSs) erstellen. Die Dienststeuerung sorgt dafür, dass der Traffic über diese CNFs geleitet wird, bevor das vorgesehene Ziel erreicht wird. Dadurch erhalten Sie eine Schutz- und Kontrollebene.
Anbieter verwalteter Sicherheitsfunktionen (Managed Security Provider, MSPs):
MSPs können GKE Service Steering verwenden, um Ihren Traffic über ihre cloudbasierten Sicherheitsdienstketten weiterzuleiten. Dadurch können sie umfassende Sicherheitslösungen anbieten, einschließlich Secure Web Gateways (SWGs), SASE (Secure Access Service Edge) und SD-WAN-Funktionen (Software-Defined Wide Area Network).
Telekommunikations- und 5G-Netze:
Die Dienststeuerung verwaltet Trafficflüsse für verschiedene Netzwerkfunktionen in Telekommunikations- und 5G-Infrastrukturen. Sie können virtuelle Router (vRouter), virtuelle Sitzungs-Border Controller (vSBCs) und 5G-Kernnetzwerkfunktionen orchestrieren, um eine effiziente Traffic-Verwaltung, das Load Balancing und die Durchsetzung bestimmter Sicherheit oder der Qualität des Dienstes zu gewährleisten Richtlinien.
Funktionsweise der Dienststeuerung
In diesem Abschnitt werden die verschiedenen Komponenten von Dienststeuerungen beschrieben.
Dienstfunktion
Identifiziert den Netzwerk-Trafficfluss: GKE Service Steering identifiziert jede Netzwerkverbindung mithilfe einer eindeutigen Ablauf-ID, einem 5-Tupel-Hash der Quell-IP-Adresse, Quellport, Ziel-IP-Adresse, Zielport und Protokoll.
Sicherstellen der Ablaufaffinität: Die Dienststeuerung sorgt für die Ablaufaffinität, indem alle Pakete mit derselben Ablauf-ID über denselben Pfad von Service Functions (SFs) geleitet werden.
Pakete ändern, um neue Datenflüsse zu erstellen: Wenn eine Dienstfunktion eines der 5-Tupel-Felder in einem Paket ändert. Wenn Sie beispielsweise die Quell-IP-Adresse ändern, wird ein neuer Ablauf erstellt.
Traffic für neue Abläufe auswählen: Der Traffic-Auswahlprozess wertet den neuen Ablauf aus, um seinen Pfad durch den verbleibenden
Service Functions
zu bestimmen, wobei möglicherweise eine andere Route als der ursprüngliche Ablauf verwendet wird.Verarbeitet Proxys und NATs als zwei Datenflüsse: Traffic über Proxys oder NATs wird als zwei separate Datenflüsse betrachtet: Quelle zu Proxy/NAT und Proxy/NAT zum Ziel. Die Dienststeuerung gewährleistet nicht denselben Pfad für diese beiden Abläufe.
Validiert die Quelladresse: SFs unterliegen immer der Validierung der Quelladresse, auch wenn Traffic, der nicht durch Dienststeuerung gesteuert wird. Wenn eine Dienstfunktion einen neuen Ablauf mit einer nicht übereinstimmenden Quell-IP-Adresse initiiert, werden diese Pakete gelöscht, sofern nicht ausdrücklich zugelassen.
Kapselungstransparenz gewährleisten: Service Steering verwendet Geneve-Kapselung für den Traffic zwischen SFs, aber die Service Functions-Pods selbst sind sich nicht bewusst. Pakete werden vor dem Eintreten in den Pod entkapselt, was die Entwicklung von Service Functions-Funktionen vereinfacht.
Vorhandene Verbindungen
Wenn Sie einen TrafficSelector
erstellen, wendet die Dienststeuerung sie automatisch auf alle vorhandenen Verbindungen an, die den Kriterien des Selektors entsprechen. Damit werden Pakete von diesen Verbindungen an die entsprechenden Dienstfunktionen weitergeleitet. Die Dienstfunktion selbst ist für die Verwaltung dieser laufenden Verbindungen verantwortlich. Ein gängiger Ansatz besteht darin, die Pakete zu verwerfen und sich darauf zu verlassen, dass der Client eine neue Verbindung initiiert, die sich dann von Anfang an nahtlos in die Dienstkette einbinden.
Ressourcenlebenszyklus
Sowohl TrafficSelector
- als auch ServiceFunctionChain
-Ressourcen werden sofort gelöscht, nachdem sie zum Löschen markiert wurden. Es gibt keine Webhooks oder Finalizer, die das Löschen von Ressourcen verhindern oder verzögern.
Pod-zu-Dienst-Traffic
Die Dienststeuerung führt die Trafficauswahl durch, nachdem die virtuelle IP-Adresse des Dienstes aufgelöst wurde. Der Traffic, der über seine ClusterIP an einen Dienst weitergeleitet wird, kann für die Dienststeuerung ausgewählt werden, wenn die IP-Adresse des Ziel-Pods in das CIDR-Feld fällt, das im .egress.to.ipBlock
-Feld angegeben wurde, nachdem die virtuelle IP-Adresse aufgelöst wurde.
Durchsetzung von Netzwerkrichtlinien
Die Dienststeuerung umgeht NetworkPolicy
nicht. Die Richtlinie für ausgehenden Traffic am Quell-Pod und die Richtlinie für eingehenden Traffic am Ziel-Pod gelten weiterhin für den Traffic, der für die Dienststeuerung ausgewählt wird. Sie unterliegt jedoch nicht der NetworkPolicy
-Erzwingung beim eingehenden oder ausgehenden Traffic einer Service Functions-Funktion. Dies liegt daran, dass die Regeln für eingehenden oder ausgehenden Traffic von NetworkPolicy
für Quell- und Ziel-Pods, aber nicht für Paket-Forwarder klar definiert sind.
Vorteile
Die Einführung von GKE Service Steering in Verbindung mit der Umstellung auf cloudnative Technologien bietet folgende Vorteile:
- Marketplace-Angebot: Drittanbieter können ihr containerisiertes Produkt auf dem Google Cloud Marketplace anbieten und die Service Steering APIs verwenden. Sie können eine Bereitstellungsanleitung bereitstellen, die auf einer in Kubernetes integrierten API basiert, die von GKE bereitgestellt und verwaltet wird.
- Kubernetes-Detaillierungsgrad: Sie können den Traffic innerhalb Ihres Kubernetes-Clusters steuern. Sie können den Traffic klassifizieren, den Sie steuern möchten. Sie können Arbeitslasten auswählen, auf die die Dienststeuerung selektiv angewendet werden soll.
- Bidirektionalität: Die Dienststeuerung von GKE ist bidirektional. Das bedeutet, dass der Rückgabepfad für einen bestimmten Ablauf symmetrisch zum Weiterleitungspfad ist. Dies ist wichtig, wenn die Service Functions (SFs) als Gruppe von Replikaten bereitgestellt werden. Achten Sie darauf, dass derselbe Ablauf durch dasselbe Replikat geleitet wird, um die Zustandsorientiertheit zu gewährleisten.
- Unterstützung für mehrere Netzwerke: Eine Mehrheit der Service Functions erfordert mehrere Pod-Schnittstellen, um die Datenebene von der Steuerung und Verwaltungsebene zu trennen. Einige Service Functions-Funktionen haben als Teil ihrer Architektur mehrere Schnittstellen. Die Dienststeuerung von GKE umfasst die Einbindung von Multi-Network auf Pods. Dadurch kann ein Nutzer eine Dienststeuerung in einem bestimmten Pod-Netzwerk erstellen.
- Rohdatenlieferung an Anwendung: Die Dienststeuerung von GKE kapselt das ursprüngliche Paket und sendet es direkt an den Pod. Auf diese Weise müssen Sie keine Entkapselung vornehmen und Ihre Anwendung kann direkt auf das ursprüngliche Paket reagieren.