Diese Seite gilt für Apigee, aber nicht für Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
Auf dieser Seite wird beschrieben, wie Sie das in Ihrem Cluster ausgeführte GKE-Gateway (Google Kubernetes Engine) ändern, um Apigee API-Verwaltungsrichtlinien mit dem Apigee APIM Operator für Kubernetes anzuwenden.
Hinweise
Bevor Sie mit dieser Aufgabe beginnen, müssen Sie die folgenden Schritte ausführen:
- Prüfen Sie, ob für Ihren GKE-Cluster eine Workload Identity konfiguriert ist. Die erforderlichen Schritte finden Sie unter Workload Identity erstellen.
- Prüfen Sie, ob für Ihren Cluster ein GKE Gateway konfiguriert ist und funktioniert. Weitere Informationen finden Sie unter Gateways bereitstellen.
- Installieren Sie den APIM-Operator. Eine Installationsanleitung finden Sie unter Apigee APIM Operator für Kubernetes installieren.
Erforderliche Rollen
Wenn Sie Ihrem Dienstkonto die erforderlichen Rollen zugewiesen haben, wie unter Apigee APIM Operator für Kubernetes installieren beschrieben, sind für diese Aufgaben keine zusätzlichen IAM-Rollen oder -Berechtigungen erforderlich.
Sie können Aktionen für Ressourcen in Ihrem Google Kubernetes Engine-Cluster mithilfe des integrierten Mechanismus für rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) in Kubernetes autorisieren. Weitere Informationen finden Sie unter Aktionen in Clustern mit rollenbasierter Zugriffssteuerung autorisieren.
Übersicht
In den folgenden Abschnitten wird beschrieben, wie Sie Ihr GKE Gateway so ändern, dass Apigee-Richtlinien mit dem APIM-Operator verwendet werden. In dieser Anleitung werden Sie:
- APIM-Erweiterungsrichtlinie definieren
- API-Produkt definieren:
- API-Vorgangssatz definieren
- Apigee-Diensterweiterung testen
- Apigee API Analytics in der Google Cloud Konsole ansehen.
APIM-Erweiterungsrichtlinie definieren
In diesem Schritt definieren Sie die APIM-Erweiterungsrichtlinie und wenden sie auf das GKE-Gateway an, das in Ihrem Cluster ausgeführt wird.
Diese Richtlinie regelt den gesamten Traffic, der über das Gateway und die zugehörige HTTPRoutes
läuft. Sie funktioniert ähnlich wie ein Flowhook auf Umgebungsebene in Apigee.
APIM-Erweiterungsrichtlinie definieren:
- Erstellen Sie eine neue Datei mit dem Namen
global-ext-lb1-apim-policy.yaml
im Namespaceapim
. - Kopieren Sie den folgenden Inhalt in die neue Datei:
# global-ext-lb1-apim-policy.yaml apiVersion: apim.googleapis.com/v1 kind: APIMExtensionPolicy metadata: name: global-ext-lb1-apim-policy namespace: apim spec: apigeeenv: ENV_NAME # optional location: global failOpen: false timeout: 1000ms defaultSecurityEnabled: true targetRef: # identifies the Gateway where the extension should be applied name: global-ext-lb1 kind: Gateway namespace: default
Dabei ist ENV_NAME der Name der Apigee-Umgebung, die im Installationsschritt Apigee-Umgebung erstellen erstellt wurde.
Sie können alle verfügbaren Umgebungen auf der Seite Apigee-Umgebungen in der Google Cloud aufrufen:
- Wenden Sie die Richtlinie an:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
Sobald
yaml
angewendet wurde, erstellt der APIM-Operator im Hintergrund Netzwerkressourcen. - Prüfen Sie den Status der API-Erweiterungsrichtlinie mit dem folgenden Befehl:
kubectl -n apim get APIMExtensionPolicy
Die Ausgabe sollte in etwa so aussehen, mit einem
State
vonRUNNING
:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- Verwenden Sie den folgenden Befehl, um eine Anfrage an das Gateway zu senden:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"
Wobei:
GATEWAY_IP_ADDRESS
ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen, wobeiGATEWAY_NAME
der Name des Gateways ist:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
ist der Hostname, der imHTTPRoute
des Gateways definiert ist.
- Die Anfrage sollte fehlschlagen, da die Standardsicherheit durch Festlegen von
defaultSecurityEnabled: true
in der API-Erweiterungsrichtlinienressource aktiviert ist. Die Antwort sieht ungefähr so aus:{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
Das bedeutet, dass die Apigee-Erweiterungsrichtlinie aktiv ist und die Erzwingung von API-Schlüsseln und die Überprüfung von Zugriffstokens aktiv sind.
API-Produkt definieren
Definieren Sie das API-Produkt:
- Erstellen Sie eine neue Datei mit dem Namen
api-product.yaml
im Namespaceapim
. - Kopieren Sie den folgenden Inhalt in die neue Datei:
# api-product.yaml apiVersion: apim.googleapis.com/v1 kind: APIProduct metadata: name: api-product namespace: apim spec: approvalType: auto description: Http bin GET calls displayName: api-product enforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- Wenden Sie die Datei mit dem folgenden Befehl auf das Gateway an::
kubectl -n apim apply -f api-product.yaml
API-Vorgangssatz definieren
Definieren Sie die API-Vorgänge für das API-Produkt, das Sie im vorherigen Schritt erstellt haben:
- Erstellen Sie eine neue Datei mit dem Namen
apim-policies.yaml
im Namespaceapim
. - Kopieren Sie den folgenden Inhalt in die neue Datei.
In dieser Datei werden eine Kontingentrichtlinie und die verfügbaren REST-Vorgänge für das im vorherigen Schritt definierte API-Produkt definiert:
# apim-policies.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set namespace: apim spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- Wenden Sie die Datei auf das Gateway an:
kubectl -n apim apply -f apim-policies.yaml
Apigee-Diensterweiterung testen
In diesem Schritt verwenden Sie die Apigee-UI in der Google Cloud -Konsole, um die Apigee-Diensterweiterung und die auf Ihr Gateway angewendete Apigee-Erweiterungsrichtlinie zu testen.
Einrichtung testen
Richten Sie die API-Ressourcen ein, die Sie zum Testen benötigen:
Rufen Sie in der Google Cloud Console die Seite Apigee API-Verwaltung auf:
- Wählen Sie die Apigee-Organisation aus, in der Sie den APIM-Operator installiert haben.
- Entwickler erstellen:
- Wählen Sie Vertrieb > Entwickler aus.
- Klicken Sie auf der Seite Entwickler auf + Erstellen.
- Füllen Sie auf der Seite Entwickler hinzufügen die erforderlichen Felder mit beliebigen Werten aus.
- Klicken Sie auf Hinzufügen.
- App erstellen:
- Wählen Sie Vertrieb> Apps aus.
- Klicken Sie auf der Seite Apps auf + Erstellen.
- Füllen Sie auf der Seite App erstellen die erforderlichen Felder im Bereich App-Details mit den folgenden Werten aus:
- App-Name: demo-app
- Entwickler: Wählen Sie den Entwickler aus, den Sie im vorherigen Schritt erstellt haben, oder einen anderen Entwickler aus der Liste.
- Klicken Sie im Abschnitt App-Anmeldedaten auf + Anmeldedaten hinzufügen.
- Füllen Sie im Abschnitt Anmeldedaten die erforderlichen Felder im Abschnitt Anmeldedaten mit den folgenden Werten aus:
- Name der Qualifikation: demo-credential
- Anmeldedatentyp: Wählen Sie API-Schlüssel aus.
- Klicken Sie auf Erstellen.
- Klicken Sie im Bereich Produkte auf + Produkte hinzufügen.
- Wählen Sie die
api-product-1
aus, die Sie im vorherigen Schritt erstellt haben. - Klicken Sie auf Hinzufügen.
- Klicken Sie auf Erstellen.
- Klicken Sie auf der Seite App Details im Abschnitt Credential auf
visibility_off, um den Wert von Key anzuzeigen.
Kopieren Sie den Wert
Key
. Mit diesem Schlüssel führen Sie in einem späteren Schritt API-Aufrufe an Ihren Dienst aus. - Klicken Sie auf der Seite App-Details im Abschnitt Anmeldedaten auf visibility_off, um den Wert des App-Secrets aufzurufen.
Kopieren Sie den Wert unter App-Secret. Sie benötigen diesen Wert, um in einem späteren Schritt ein Zugriffstoken zu generieren.
API-Schlüssel erzwingen
Mit dem folgenden Befehl senden Sie eine Anfrage an Ihr Gateway. Verwenden Sie dazu den API-Schlüssel, den Sie in einem früheren Schritt erhalten haben:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
Wobei:
GATEWAY_IP_ADDRESS
ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen, wobeiGATEWAY_NAME
der Name des Gateways ist:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
ist der Hostname, der imHTTPRoute
des Gateways definiert ist.API_KEY
ist der API-Schlüsselwert, der in Einrichtung testen abgerufen wurde.
Die Anfrage sollte erfolgreich sein und eine Antwort ähnlich der folgenden zurückgeben:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Api-Key": "f0N6sYYYclGYYYe0oP5YYYdA20PjgrP2x8YYYh7z4YYYKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/get" }
Kontingenterzwingung testen
Um die in Ihrer APIM-Erweiterungsrichtlinie definierte Kontingenterzwingung zu testen, senden Sie die Anfrage aus dem vorherigen Schritt innerhalb einer Minute zehnmal an das Gateway.
Sie können das folgende Skript ausführen, um die Anfragen zu generieren:
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" sleep 1 done
Wobei:
GATEWAY_IP_ADDRESS
ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen, wobeiGATEWAY_NAME
der Name des Gateways ist:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
ist der Hostname, der imHTTPRoute
des Gateways definiert ist.API_KEY
ist der API-Schlüsselwert, der in Einrichtung testen abgerufen wurde.
Diese Aktion sollte einen Kontingentverstoß auslösen und einen Fehler ähnlich dem folgenden zurückgeben:
{"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
Erzwingung von REST-Vorgängen testen
Um die Durchsetzung der REST-Vorgänge zu testen, senden Sie mit dem folgenden Befehl eine Anfrage an das Gateway über eine URL, die nicht im API-Vorgangssatz enthalten ist:
curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
Wobei:
GATEWAY_IP_ADDRESS
ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen, wobeiGATEWAY_NAME
der Name des Gateways ist:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
ist der Hostname, der imHTTPRoute
des Gateways definiert ist.API_KEY
ist der API-Schlüsselwert, der in Einrichtung testen abgerufen wurde.
Die Anfrage sollte mit einer Antwort ähnlich der folgenden fehlschlagen:
{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}
Apigee API Analytics in der Google Cloud Konsole ansehen
Sie können den API-Traffic, der vom GKE Gateway und der von Ihnen installierten APIMExtensionPolicy verarbeitet wird, mit Apigee API Analytics in der Google Cloud Console ansehen:
- Rufen Sie in der Google Cloud Console die Seite Apigee API-Verwaltung auf:
- Wählen Sie die Apigee-Organisation aus, in der Sie den APIM-Operator installiert haben.
- Wählen Sie im seitlichen Navigationsmenü Analysen > API-Messwerte aus.
- Wählen Sie auf dem Tab API-Proxy-Leistung die Umgebung aus, die Sie im optionalen Installationsschritt
Apigee-Umgebung erstellen erstellt haben, oder die Umgebung, die vom APIM-Operator während der Installation erstellt wurde. Der Name der Umgebung beginnt mit dem Präfix
apigee-ext-proc-enabled-env
. - Beobachten Sie den aufgezeichneten API-Traffic.
Fehlerbehebung
Wenn bei der Verwendung von API-Verwaltungsrichtlinien mit dem APIM Operator Probleme auftreten, finden Sie unter Fehlerbehebung beim APIM Operator Lösungen für häufige Fehler.
Nächste Schritte
- Richtlinien zum GKE Gateway hinzufügen
- Informationen zum Deinstallieren des Apigee APIM-Operators für Kubernetes