Ratenbegrenzung mit Google Cloud Armor konfigurieren
In diesem Dokument wird beschrieben, wie Sie die Ratenbegrenzung für die faire Nutzung auf Ihre Cloud Service Mesh-Clients anwenden können. So können Sie die faire Nutzung Ihrer Dienste verwalten und verhindern, dass böswillige oder fehlerhafte Clients Ihre Dienste überlasten.
Für die Konfiguration müssen Sie eine Cloud Armor-Sicherheitsrichtlinie und eine Endpunktrichtlinie erstellen. Wenn Sie mit Cloud Armor-Sicherheitsrichtlinien nicht vertraut sind, empfehlen wir Ihnen, die Übersicht über Sicherheitsrichtlinien zu lesen.
So funktioniert die Ratenbegrenzung
Durch die Ratenbegrenzung wird die Anzahl der Anfragen beschränkt, die Ihr Dienst innerhalb eines bestimmten Zeitintervalls von Clients empfangen kann. So wird die Verfügbarkeit Ihres Dienstes verbessert und die verfügbare Kapazität wird fair auf die Clients verteilt.
Der Anfragengrenzwert, das Intervall und die Aktion, die Cloud Armor auf eingehenden Traffic anwendet, der den Ratenbegrenzungsgrenzwert überschreitet, sind vom Nutzer konfigurierbar. Für die Ratenbegrenzung von Cloud Service Mesh verwendet Cloud Armor den Sicherheitsrichtlinientyp CLOUD_ARMOR_INTERNAL_SERVICE
und Sicherheitsrichtlinienregeln verwenden die Aktion fairshare
.
Jede Cloud Armor-Sicherheitsrichtlinie enthält eine oder mehrere Regeln. Jede Regel besteht aus einer Abgleichsbedingung und einer Aktion. Wenn eine Anfrage die Abgleichsbedingung erfüllt, wendet Cloud Armor die konfigurierte Aktion auf die Anfrage an.
Wenn Sie die Ratenbegrenzung konfigurieren, erstellen Sie eine Sicherheitsrichtlinienregel mit einer der oben genannten Ratenbegrenzungsaktionen und einer beliebigen Abgleichsbedingung, die zu Ihrem Anwendungsfall passt (einschließlich des Abgleichs aller eingehenden Anfragen mit dem Flag --src-ip-ranges "*"
). Regeln in einer Richtlinie werden in der Prioritätsreihenfolge ausgewertet. Die Regel mit der niedrigsten numerischen Priorität hat die höchste logische Priorität und wird zuerst ausgewertet. Cloud Armor führt die serverseitige Ratenbegrenzung durch. Das bedeutet, dass der Server das Ratenlimit erzwingt und nicht das Clientgerät.
Für Aktionen zur Ratenbegrenzung gibt es zusätzliche Felder, mit denen Sie den Schwellenwert für die Ratenbegrenzung optimieren können. Die folgenden Felder werden von allen Ratenbegrenzungsregeln gemeinsam genutzt:
rate_limit_threshold_count
: Die Anzahl der Anfragen pro vom Nutzer konfiguriertem Zeitintervall, für die Cloud Armor die Ratenbegrenzung anwenden muss.interval_sec
: Das Zeitintervall in Sekunden fürrate_limit_threshold_count
.exceed_action
: Die Aktion, die für Anfragen ausgeführt werden soll, die den Grenzwert für das Ratenlimit überschreiten.conform_action
: Die Aktion, die für Anfragen ausgeführt werden soll, die den Grenzwert für das Ratenlimit nicht überschreiten.
Ratenbegrenzung mit Cloud Service Mesh
In diesem Abschnitt wird allgemein beschrieben, welche Schritte Sie ausführen müssen, um die Ratenbegrenzung mit Cloud Service Mesh zu konfigurieren.
Zuerst erstellen Sie eine Endpunktrichtlinie und sorgen dafür, dass mit EndpointMatcher
Ihre Cloud Service Mesh-Instanzen ausgewählt werden, um Ratenbeschränkungen für eingehenden Traffic zu erzwingen. Für die EndpointMatcher
werden Endpunktlabels verwendet, um die Instanzen zu identifizieren, an die sie angehängt wird.
Als Nächstes erstellen Sie eine Cloud Armor-Sicherheitsrichtlinie vom Typ CLOUD_ARMOR_INTERNAL_SERVICE
. Die einzige verfügbare Aktion für diesen Sicherheitsrichtlinientyp ist fairshare
. In dieser Richtlinie erstellen Sie eine Standardregel mit der Aktion fairshare
, um die Fairshare-Ratenbegrenzung auf allen Traffic anzuwenden, der nicht einer Regel mit höherer Priorität entspricht. Sie können neue Regeln mit höherer Priorität hinzufügen, um für verschiedene Arten von Traffic unterschiedliche Ratenbegrenzungen festzulegen. Sie können beispielsweise für einen bestimmten IP-Adressbereich ein niedrigeres oder höheres Ratenlimit festlegen.
Nachdem Sie Ihre Sicherheitsrichtlinie mit einer oder mehreren Ratenbegrenzungsregeln erstellt haben, hängen Sie sie an die Endpunktrichtlinie an. Nachdem Sie die Sicherheitsrichtlinie angehängt haben, wendet Cloud Armor serverseitige Ratenbegrenzung auf den gesamten eingehenden Traffic an, der mit einer Übereinstimmungsbedingung einer Regel übereinstimmt und eine Verbindung zu den Service Mesh-Instanzen herstellt, die für EndpointMatcher
ausgewählt wurden.
Cloud Service Mesh konfiguriert ein globales Ratenlimit für alle Instanzen. Das bedeutet, dass das gesamte Trafficvolumen aller Serverinstanzen aggregiert wird, um zu bestimmen, wann die Ratenbegrenzung durchgesetzt werden soll. Für jeden Client, der Anfragen an einen solchen Dienst sendet, gelten derselbe Durchsetzungs- und derselbe Richtlinien-Grenzwert. Wenn die aggregierte Trafficrate den Grenzwert überschreitet, werden einige Anfragen verworfen.
Informationen zum Konfigurieren der Ratenbegrenzung mit Cloud Service Mesh finden Sie unter Google Cloud Armor-Ratenbegrenzung mit Envoy konfigurieren.
Beschränkungen
Wenn Sie die Ratenbegrenzung mit Cloud Armor konfigurieren, beachten Sie die folgenden Einschränkungen:
- Cloud Armor-Kontingente begrenzen die Anzahl der benutzerdefinierten Regeln, die Sie erstellen können. Wir empfehlen, das Kontingent zu prüfen, bevor Sie mehr als 20 benutzerdefinierte Regeln erstellen.
- Jede Endpunkt-Richtlinienressource muss auf eine andere Sicherheitsrichtlinie verweisen. Sie können eine Sicherheitsrichtlinie nicht an eine neue Endpunktrichtlinie anhängen, wenn sie bereits von einer vorhandenen Endpunktrichtlinie referenziert wird.
- Sicherheitsrichtlinien mit der Aktion
fairshare
sind auf den RatenbegrenzungsschlüsselALL
beschränkt. - Wenn Sie Sicherheitsrichtlinien mit der Aktion
fairshare
bereitstellen, ignoriert Cloud Armor das Feldpreview
bei der Durchsetzung von Regeln. - Wenn Sie TCP-Traffic-Routing verwenden, können Sie keine Cloud Armor-Sicherheitsrichtlinie konfigurieren.
Außerdem sind Cloud Armor-Sicherheitsrichtlinien vom Typ CLOUD_ARMOR_INTERNAL_SERVICE
auf die folgenden benutzerdefinierten CEL-Attribute (Common Expression Language) beschränkt:
request.headers
request.method
request.path
request.scheme
request.query
Weitere Informationen zu CEL-Attributen finden Sie unter Sprachattribute für benutzerdefinierte Regeln konfigurieren.