Crea un APIMExtensionPolicy

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza Apigee Edge documentazione.

Questa pagina descrive come applicare le policy Apigee al traffico che passa attraverso un gateway Kubernetes creando una risorsa personalizzata APIMExtensionPolicy. L' operatore Apigee per Kubernetes monitora le risorse APIMExtensionPolicy e configura il gateway di conseguenza.

Apigee

Segui questi passaggi se utilizzi Apigee.

Prima di iniziare

Prima di iniziare questa attività, completa i seguenti passaggi:

Crea APIMExtensionPolicy

In questo passaggio, crea APIMExtensionPolicy e applicala al gateway GKE in esecuzione nel cluster. Questa policy regola tutto il traffico che passa attraverso il gateway e le relative HTTPRoutes, operando in modo simile a un flowhook a livello di ambiente in Apigee.

Per creare APIMExtensionPolicy:

  1. Crea un file denominato global-ext-lb1-apim-policy.yaml con i seguenti contenuti:
    # 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
        
  2. Sostituisci ENV_NAME con il nome dell'ambiente Apigee creato nel passaggio di installazione Creare un ambiente Apigee.

    Nota: se installi l'operatore Apigee per Kubernetes utilizzando il generateEnv=TRUE flag, il apigeeenv campo non è obbligatorio.

    Puoi visualizzare tutti gli ambienti disponibili nella pagina Ambienti della Google Cloud console.

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

    Una volta applicata la policy, l'operatore Apigee per Kubernetes crea risorse di rete in background.

  4. Controlla lo stato di APIMExtensionPolicy utilizzando il seguente comando:
    kubectl -n apim get APIMExtensionPolicy
        

    L'output dovrebbe essere simile al seguente, con STATE impostato su RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

Testa la policy

Utilizza il seguente comando per inviare una richiesta al gateway:

  1. Ottieni l'indirizzo IP del gateway:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Sostituisci GATEWAY_NAME con il nome del gateway, ad esempio global-ext-lb1.

  2. Invia una richiesta a un endpoint configurato in HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Sostituisci HOST_NAME con il nome host definito in HTTPRoute del gateway, ad esempio example.httpbin.com.

  3. La richiesta dovrebbe non riuscire perché defaultSecurityEnabled: true è stato impostato nella risorsa APIMExtensionPolicy, che abilita la verifica della chiave API e del token di accesso. 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 la policy di estensione Apigee è attiva e che l'applicazione della chiave API e la verifica del token di accesso sono attive.

Passaggi successivi

Apigee hybrid

Segui questi passaggi se utilizzi Apigee hybrid.

Prima di iniziare

Questa procedura presuppone che tu abbia installato l'operatore Apigee per Kubernetes seguendo i passaggi descritti in Installare l'operatore Apigee per Kubernetes per Apigee hybrid.

Crea un secret del certificato TLS

The APIMExtensionPolicy richiede il certificato pubblico con codifica base64 associato al nome host del gruppo di ambienti. Hai creato questo certificato in Installare l'ambiente Apigee hybrid utilizzando Helm. Fornisci questo certificato all'operatore creando un secret Kubernetes nello apim spazio dei nomi.

  1. Ottieni la stringa del certificato con codifica base64 dal file creato durante l'installazione:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Crea un file denominato secret-cert.yaml con i seguenti contenuti:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Sostituisci BASE64_ENCODED_CERT_STRING con l'output del comando cat nel passaggio 1.
  4. Applica il secret al cluster:
    kubectl apply -f secret-cert.yaml
        

Definisci e applica APIMExtensionPolicy

Definisci una risorsa APIMExtensionPolicy e applicala al gateway Istio in esecuzione nel cluster. Questa estensione della policy intercetta il traffico gestito dal gateway e dalle relative HTTPRoutes e applica le policy Apigee prima di inoltrare le richieste alla destinazione di backend.

  1. Crea un file denominato istio-gateway-apim-policy.yaml con i seguenti contenuti:
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeenv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. Sostituisci le seguenti variabili:
    • ENV_NAME: il nome dell'ambiente Apigee hybrid creato con le estensioni di servizio abilitate, ad esempio my-hybrid-env.
    • HOST_NAME: il nome di dominio utilizzato per il gruppo di ambienti, ad esempio my-proxies.example.com.
    • INGRESS_IP_ADDRESS: l'indirizzo IP di ingresso per l'ingresso del runtime Apigee hybrid. Per informazioni su come recuperare questo IP, consulta Esponi l'ingresso Apigee.
  3. Applica la policy al cluster:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Una volta applicata la risorsa, l'operatore Apigee per Kubernetes inizia a configurare le risorse di rete del gateway. Controlla lo stato di APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Attendi che STATE mostri RUNNING. L'output dovrebbe essere simile al seguente:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Testa la policy

In APIMExtensionPolicy creato nel passaggio precedente, defaultSecurityEnabled è stato impostato su true. In questo modo vengono abilitate automaticamente le policy di verifica della chiave API e del token OAuth2 per il traffico corrispondente a questo gateway. Per verificare, invia una richiesta non autenticata al servizio di esempio httpbin configurato durante la verifica della configurazione del gateway Istio in Verificare la configurazione del gateway Istio.

  1. Ottieni l'indirizzo IP del gateway:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Invia una richiesta all'endpoint /get configurato in HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Poiché defaultSecurityEnabled: true richiede l'autenticazione (ad esempio una chiave API valida), Apigee dovrebbe rifiutare la richiesta con un errore di autenticazione. La risposta dovrebbe essere simile alla seguente:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Questo output conferma che APIMExtensionPolicy è attivo e che le policy Apigee vengono applicate dal gateway Istio.

Passaggi successivi

Scopri come creare prodotti API, sviluppatori e app per ottenere chiavi API per le richieste autenticate: