Questa pagina si applica ad Apigee, ma non ad Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Questa pagina descrive come modificare il gateway Google Kubernetes Engine (GKE) in esecuzione nel cluster per applicare i criteri di gestione delle API Apigee utilizzando l'operatore Apigee APIM per Kubernetes.
Prima di iniziare
Prima di iniziare questa attività, assicurati di completare i seguenti passaggi:
- Verifica che nel cluster GKE sia configurata un'Workload Identity. Per i passaggi richiesti, consulta Creare un'identità del workload.
- Verifica che il cluster abbia un gateway GKE configurato e funzionante. Per ulteriori dettagli, consulta Deployment dei gateway.
- Installa l'operatore APIM. Per istruzioni di installazione, consulta Installare l'operatore Apigee APIM per Kubernetes.
Ruoli obbligatori
Se hai assegnato i ruoli richiesti al account di servizio come descritto in Installare l'operatore Apigee APIM per Kubernetes, non sono necessari ruoli o autorizzazioni IAM aggiuntivi per completare queste attività.
Puoi scegliere di autorizzare le azioni sulle risorse nel cluster Google Kubernetes Engine utilizzando il meccanismo di controllo dell'accesso basato sui ruoli (RBAC) integrato in Kubernetes. Per maggiori informazioni, vedi Autorizzare le azioni nei cluster utilizzando il controllo degli accessi basato sui ruoli.
Panoramica
Le sezioni seguenti descrivono i passaggi necessari per modificare il gateway GKE in modo da utilizzare i criteri Apigee utilizzando APIM Operator. In questa procedura dettagliata:
- Definisci il criterio di estensione APIM.
- Definisci il prodotto API.
- Definisci il set di operazioni API.
- Testa l'estensione di servizio Apigee.
- Visualizza l'analisi dell'API Apigee nella console Google Cloud .
Definisci il criterio dell'estensione APIM
In questo passaggio, definirai il criterio di estensione APIM e lo applicherai al gateway GKE in esecuzione nel cluster.
Queste norme regolano tutto il traffico che passa attraverso il gateway e il relativo HTTPRoutes
,
funzionando in modo simile a un flowhook a livello di ambiente in Apigee oggi.
Definisci il criterio di estensione APIM:
- Crea un nuovo file denominato
global-ext-lb1-apim-policy.yaml
nello spazio dei nomiapim
. - Copia i seguenti contenuti nel nuovo file:
# 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
Dove ENV_NAME è il nome dell'ambiente Apigee creato nel passaggio di installazione Crea un ambiente Apigee.
Puoi visualizzare tutti gli ambienti disponibili nella pagina Ambienti Apigee della console Google Cloud :
- Applica la norma:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
Una volta applicato
yaml
, l'operatore APIM crea risorse di networking in background. - Controlla lo stato del criterio di estensione API utilizzando il comando seguente:
kubectl -n apim get APIMExtensionPolicy
L'output dovrebbe essere simile al seguente, con un
State
diRUNNING
:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- Utilizza il seguente comando per inviare una richiesta al gateway:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"
Dove:
GATEWAY_IP_ADDRESS
è l'indirizzo IP del gateway. Puoi recuperare l'indirizzo IP del gateway utilizzando il seguente comando, doveGATEWAY_NAME
è il nome del gateway:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
è il nome host definito inHTTPRoute
del gateway.
- La richiesta dovrebbe non andare a buon fine perché la sicurezza predefinita è abilitata impostando
defaultSecurityEnabled: true
nella risorsa policy dell'estensione API. Dovresti visualizzare una risposta simile alla seguente:{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
Ciò indica che il criterio di estensione Apigee è attivo e che l'applicazione della chiave API e la verifica del token di accesso sono attive.
Definisci il prodotto API
Definisci il prodotto API:
- Crea un nuovo file denominato
api-product.yaml
nello spazio dei nomiapim
. - Copia i seguenti contenuti nel nuovo file:
# 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
- Applica il file al gateway utilizzando il seguente comando:
kubectl -n apim apply -f api-product.yaml
Definisci il set di operazioni API
Definisci il set di operazioni API per il prodotto API creato nel passaggio precedente:
- Crea un nuovo file denominato
apim-policies.yaml
nello spazio dei nomiapim
. - Copia i seguenti contenuti nel nuovo file.
Questo file definisce un criterio di quota e le operazioni REST disponibili
per il prodotto API definito nel passaggio precedente:
# 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
- Applica il file al gateway:
kubectl -n apim apply -f apim-policies.yaml
Testa l'estensione di servizio Apigee
In questo passaggio, utilizzerai l'interfaccia utente Apigee nella console Google Cloud per testare l'estensione del servizio Apigee e il criterio di estensione Apigee applicato al gateway.
Configurazione dei test
Configura le risorse API necessarie per il test:
Vai alla pagina Gestione API Apigee nella console Google Cloud :
- Seleziona l'organizzazione Apigee in cui hai installato l'operatore APIM.
- Crea uno sviluppatore:
- Seleziona Distribuzione > Sviluppatori.
- Nella pagina Sviluppatori, fai clic su + Crea.
- Nella pagina Aggiungi sviluppatore, compila i campi obbligatori con i valori che preferisci.
- Fai clic su Aggiungi.
- Crea un'app:
- Seleziona Distribuzione> App.
- Nella pagina App, fai clic su + Crea.
- Nella pagina Crea app, compila i campi obbligatori nella sezione Dettagli app utilizzando i seguenti valori:
- Nome app: demo-app
- Sviluppatore: seleziona lo sviluppatore che hai creato nel passaggio precedente o un altro sviluppatore dall'elenco.
- Nella sezione Credenziali app, fai clic su + Aggiungi credenziale.
- Nella sezione Credenziali, completa i campi obbligatori nella sezione Dettagli credenziali
con i seguenti valori:
- Credential name (Nome credenziale): demo-credential
- Tipo di credenziale: seleziona Chiave API.
- Fai clic su Crea.
- Nella sezione Prodotti, fai clic su + Aggiungi prodotti.
- Seleziona
api-product-1
creato nel passaggio precedente. - Fai clic su Aggiungi.
- Fai clic su Crea.
- Nella pagina Dettagli app, nella sezione Credenziali, fai clic su
visibility_off per visualizzare il valore della chiave.
Copia il valore di
Key
. Utilizzerai questa chiave per effettuare chiamate API al tuo servizio in un passaggio successivo. - Nella pagina Dettagli app, nella sezione Credenziali, fai clic su visibility_off
per visualizzare il valore del secret dell'app.
Copia il valore di App secret. Utilizzerai questo valore per generare un token di accesso in un passaggio successivo.
Testare l'applicazione della chiave API
Utilizza il seguente comando per inviare una richiesta al gateway utilizzando la chiave API ottenuta in un passaggio precedente:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
Dove:
GATEWAY_IP_ADDRESS
è l'indirizzo IP del gateway. Puoi recuperare l'indirizzo IP del gateway utilizzando il seguente comando, doveGATEWAY_NAME
è il nome del gateway:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
è il nome host definito inHTTPRoute
del gateway.API_KEY
è il valore della chiave API ottenuto in Configurazione del test.
La richiesta dovrebbe riuscire e restituire una risposta simile alla seguente:
{ "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" }
Test dell'applicazione delle quote
Per testare l'applicazione della quota definita nella policy di estensione APIM, invia la richiesta del passaggio precedente al gateway dieci volte nell'arco di un minuto.
Puoi eseguire lo script seguente per generare le richieste:
#!/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
Dove:
GATEWAY_IP_ADDRESS
è l'indirizzo IP del gateway. Puoi recuperare l'indirizzo IP del gateway utilizzando il seguente comando, doveGATEWAY_NAME
è il nome del gateway:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
è il nome host definito inHTTPRoute
del gateway.API_KEY
è il valore della chiave API ottenuto in Configurazione del test.
Questa azione dovrebbe attivare una violazione della quota e generare un errore simile al seguente:
{"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
Testa l'applicazione delle operazioni REST
Per testare l'applicazione delle operazioni REST, utilizza il seguente comando per inviare una richiesta al gateway utilizzando un URL non presente nel set di operazioni API:
curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
Dove:
GATEWAY_IP_ADDRESS
è l'indirizzo IP del gateway. Puoi recuperare l'indirizzo IP del gateway utilizzando il seguente comando, doveGATEWAY_NAME
è il nome del gateway:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
è il nome host definito inHTTPRoute
del gateway.API_KEY
è il valore della chiave API ottenuto in Configurazione del test.
La richiesta dovrebbe non andare a buon fine con una risposta simile alla seguente:
{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}
Visualizzare l'analisi dell'API Apigee nella console Google Cloud
Puoi visualizzare il traffico API gestito da GKE Gateway e APIMExtensionPolicy che hai installato utilizzando Apigee API Analytics nella console Google Cloud :
- Vai alla pagina Gestione API Apigee nella console Google Cloud :
- Seleziona l'organizzazione Apigee in cui hai installato l'operatore APIM.
- Seleziona Analytics > Metriche API nel menu di navigazione laterale.
- Nella scheda Rendimento del proxy API, scegli l'ambiente che hai creato nel passaggio di installazione facoltativo
Crea un ambiente Apigee o l'ambiente creato dall'operatore APIM durante l'installazione. Il nome dell'ambiente inizierà con il prefisso
apigee-ext-proc-enabled-env
. - Osserva il traffico API registrato.
Risoluzione dei problemi
Se riscontri problemi durante l'utilizzo delle norme di gestione delle API con APIM Operator, consulta la sezione Risolvere i problemi di APIM Operator per trovare soluzioni agli errori comuni.
Passaggi successivi
- Scopri come aggiungere policy al gateway GKE.
- Scopri come disinstallare l'operatore Apigee APIM per Kubernetes.