Crea un APIMExtensionPolicy

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Questa pagina descrive come applicare le norme 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 il APIMExtensionPolicy

In questo passaggio, crea APIMExtensionPolicy e applicalo al gateway GKE in esecuzione nel cluster. Questo criterio regola 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.

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 Crea un ambiente Apigee.

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

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

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

    Una volta applicato il criterio, 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 un STATE di 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 attiva 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 il criterio di estensione Apigee è attivo 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

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

  1. Recupera la stringa del certificato codificata in 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 tuo cluster:
    kubectl apply -f secret-cert.yaml
        

Definisci e applica il APIMExtensionPolicy

Definisci una risorsa APIMExtensionPolicy e applicala a Istio Gateway in esecuzione nel cluster. Questa estensione delle norme intercetta il traffico gestito dal gateway e dal relativo HTTPRoutes e applica le norme 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 che hai creato con le estensioni di servizio abilitate, ad esempio my-hybrid-env.
    • HOST_NAME: il nome di dominio utilizzato per il gruppo Ambiente, ad esempio my-proxies.example.com.
    • INGRESS_IP_ADDRESS: l'indirizzo IP in entrata per l'ingresso del runtime di Apigee Hybrid. Per informazioni dettagliate sul recupero di questo IP, consulta Esporre 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 finché STATE non mostra RUNNING. L'output dovrebbe essere simile al seguente:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Testa la policy

Nel APIMExtensionPolicy creato nel passaggio precedente, defaultSecurityEnabled è stato impostato su true. In questo modo vengono attivate automaticamente le norme di verifica della chiave API e del token OAuth2 per il traffico corrispondente a questo gateway. Per testare questa operazione, invia una richiesta non autenticata al servizio di esempio httpbin che hai configurato durante la verifica della configurazione di Istio Gateway in Verifica la configurazione di Istio Gateway.

  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 deve 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 norme Apigee vengono applicate da Istio Gateway.

Passaggi successivi

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