Utilizzare i criteri di gestione delle API con l'operatore APIM di Apigee per Kubernetes

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 Apigee APIM Operator for Kubernetes (anteprima).

Prima di iniziare

Prima di iniziare questa attività, assicurati di completare i seguenti passaggi:

Ruoli obbligatori

Se hai assegnato i ruoli richiesti al tuo account di servizio come descritto in Installa l'operatore APIM di Apigee per Kubernetes, non sono richieste autorizzazioni o ruoli 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 ulteriori informazioni, consulta Autorizzare le azioni nei cluster utilizzando il controllo degli accessi basato sui ruoli.

Panoramica

Le sezioni seguenti descrivono i passaggi necessari per modificare il tuo gateway GKE in modo che utilizzi i criteri Apigee utilizzando APIM Operator. In questa procedura dettagliata:

  1. Definire il criterio di estensione APIM.
  2. Definisci il prodotto API.
  3. Definisci l'insieme di operazioni dell'API.
  4. Testa l'estensione di servizio Apigee.
  5. Visualizza Apigee API Analytics nella console Google Cloud.

Definisci il criterio dell'estensione APIM

In questo passaggio, dovrai definire il criterio di estensione APIM e applicarlo a GKE Gateway in esecuzione nel cluster. Questo criterio regola tutto il traffico che passa attraverso il gateway e il relativo HTTPRoutes associato, funzionando in modo simile a un flowhook a livello di ambiente in Apigee oggi.

Definisci il criterio di estensione APIM:

  1. Crea un nuovo file denominato global-ext-lb1-apim-policy.yaml nello spazio dei nomi apim.
  2. Copia i seguenti contenuti nel nuovo file:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy 
      namespace: apim
    spec:
      apigeeenv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      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:

    Vai ad Ambienti

  3. Applica il criterio:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    Una volta applicato il file yaml, l'operatore APIM crea le risorse di networking in background.

  4. Controlla lo stato delle norme relative alle estensioni API utilizzando il seguente comando:
    kubectl -n apim get APIMExtensionPolicy

    L'output dovrebbe essere simile al seguente, con un valore State pari a RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. 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, dove GATEWAY_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 in HTTPRoute del gateway.
  6. La richiesta dovrebbe non riuscire con 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 delle chiavi API e la verifica dei token di accesso sono attive.

Definisci il prodotto API

Definisci il prodotto API:

  1. Crea un nuovo file denominato api-product.yaml nello spazio dei nomi apim.
  2. Copia i seguenti contenuti nel nuovo file:
    # api-product.yaml
      apiVersion: apim.googleapis.com/v1alpha1
      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
  3. Applica il file al gateway utilizzando il seguente comando:
    kubectl -n apim apply -f api-product.yaml

Definisci l'insieme di operazioni dell'API

Definisci l'insieme di operazioni API per il prodotto API creato nel passaggio precedente:

  1. Crea un nuovo file denominato apim-policies.yaml nello spazio dei nomi apim.
  2. 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/v1alpha1
      kind: APIOperationSet
      metadata:
        name: item-set
      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
  3. 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 di Apigee nella console Google Cloud per testare l'estensione del servizio Apigee e il criterio di estensione Apigee applicato al tuo gateway.

Configurazione dei test

Configura le risorse API necessarie per i test:

  1. Vai alla pagina Gestione API Apigee nella console Google Cloud:

    Gestione delle API Apigee

  2. Seleziona l'organizzazione Apigee in cui hai installato l'operatore APIM.
  3. Crea uno sviluppatore:
    1. Seleziona Distribuzione > Sviluppatori.
    2. Nella pagina Sviluppatori, fai clic su + Crea.
    3. Nella pagina Aggiungi sviluppatore, compila i campi obbligatori utilizzando i valori che preferisci.
    4. Fai clic su Aggiungi.
  4. Crea un'app:
    1. Seleziona Distribuzione> App.
    2. Nella pagina App, fai clic su + Crea.
    3. 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.
    4. Nella sezione Credenziali app, fai clic su + Aggiungi credenziale.
    5. Nella sezione Credenziali, compila i campi obbligatori nella sezione Dettagli credenziali con i seguenti valori:
      • Nome credenziale: demo-credential
      • Tipo di credenziale: seleziona Chiave API.
    6. Fai clic su Crea.
    7. Nella sezione Prodotti, fai clic su + Aggiungi prodotti.
    8. Seleziona il api-product-1 creato nel passaggio precedente.
    9. Fai clic su Aggiungi.
    10. Fai clic su Crea.
  5. Nella pagina Dettagli app, nella sezione Credenziale, fai clic su per visualizzare il valore della Chiave.

    Copia il valore Key. La utilizzerai per effettuare chiamate API al tuo servizio in un passaggio successivo.

  6. Nella pagina Dettagli app, nella sezione Credenziale, fai clic su per visualizzare il valore dell'App Secret.

    Copia il valore App secret. Utilizzerai questo valore per generare un token di accesso in un passaggio successivo.

Testare l'applicazione delle chiavi API

Utilizza il seguente comando per inviare una richiesta al tuo 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, dove GATEWAY_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 in HTTPRoute 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": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", 
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  }, 
  "origin": "34.54.193.72", 
  "url": "https://34.54.193.72/get"
}

Testare l'applicazione delle quote

Per testare l'applicazione della quota definita nel criterio di estensione APIM, invia la richiesta del passaggio precedente al gateway dieci volte nell'arco di un minuto.

Per generare le richieste, puoi eseguire lo script seguente:

#!/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, dove GATEWAY_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 in HTTPRoute 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"}}}

Testare 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 nell'insieme di operazioni dell'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, dove GATEWAY_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 in HTTPRoute del gateway.
  • API_KEY è il valore della chiave API ottenuto in Configurazione del test.

La richiesta dovrebbe non riuscire con una risposta simile alla seguente:

{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}

Visualizzare Apigee API Analytics nella console Google Cloud

Puoi visualizzare il traffico API gestito da GKE Gateway e dalla policy APIMExtension che hai installato utilizzando Apigee API Analytics nella console Google Cloud:

  1. Vai alla pagina Gestione API Apigee nella console Google Cloud:

    Gestione delle API Apigee

  2. Seleziona l'organizzazione Apigee in cui hai installato l'operatore APIM.
  3. Seleziona Analytics > Metriche API nel menu di navigazione laterale.
  4. Nella scheda API Proxy Performance (Rendimento del proxy API), scegli l'ambiente che hai creato nel passaggio facoltativo di installazione 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.
  5. Osserva il traffico API registrato.

Risoluzione dei problemi

Se riscontri problemi durante l'utilizzo dei criteri di gestione delle API con APIM Operator, consulta la sezione Risolvere i problemi di APIM Operator per trovare le soluzioni agli errori comuni.

Passaggi successivi