Guida operativa

Questa pagina si applica a Apigee e Apigee ibrido.

Visualizza la documentazione di Apigee Edge.

Come ottenere una chiave API

L'esempio seguente spiega come ottenere una chiave API da utilizzare per convalidare le chiamate API a un servizio di destinazione inviato tramite proxy tramite Apigee Adapter per Envoy.

1. Accedi ad Apigee

  1. Accedi all'UI di Apigee.
  2. Seleziona la stessa organizzazione che hai utilizzato per il provisioning di Apigee Adapter per Envoy.

2. Creazione di uno sviluppatore

Puoi utilizzare uno sviluppatore esistente per i test oppure crearne uno nuovo procedendo nel seguente modo:

  1. Seleziona Pubblica > Sviluppatori nel menu di navigazione laterale.
  2. Fai clic su + Sviluppatore.
  3. Compila la finestra di dialogo per creare un nuovo sviluppatore. Puoi utilizzare qualsiasi nome/indirizzo email dello sviluppatore che desideri.

3. Creazione di un prodotto API

Segui l'esempio di creazione del prodotto fornito di seguito.

  1. Seleziona Pubblica > Prodotti API nel menu di navigazione laterale.
  2. Fai clic su +CREA.
  3. Compila la sezione Dettagli prodotto come segue. Nella tabella seguente vengono menzionati solo i campi obbligatori:
    Campo Valore Descrizione
    Nome httpbin-product Il nome univoco del prodotto API.
    Nome visualizzato httpbin product Il nome descrittivo che vuoi vedere nell'interfaccia utente o in altri contesti di visualizzazione.
    Accesso Public In questo esempio, Pubblico è una buona scelta.
  4. Nella sezione Operazioni, fai clic su +AGGIUNGI UN'OPERAZIONE.
  5. Nella sezione Origine, seleziona Servizio remoto.
  6. Imposta l'opzione Origine per consentire di digitare manualmente il nome di un servizio remoto nel campo Servizio remoto.
  7. Nel campo Servizio remoto, inserisci il nome del servizio remoto. Si tratta di un servizio di destinazione a cui l'adattatore esegue il proxy delle richieste HTTP in entrata. A scopo di test, usa httpbin.org o httpbin.default.svc.cluster.local con Kubernetes.

    Il pulsante di opzione Servizio remoto è selezionato, l'opzione di attivazione/disattivazione dell'inserimento manuale del testo è attivata e nel campo Servizio remoto viene inserito il servizio remoto httpbin.org.

  8. Nella sezione Operazione, inserisci / per il percorso. Per informazioni sulle opzioni dei percorsi, consulta Configurazione dei percorsi delle risorse.
  9. Fai clic su SALVA per salvare l'operazione.
  10. Fai clic su SALVA per salvare il prodotto API.

Per ulteriori informazioni, consulta Gestire i prodotti basati su API.

4. Creazione di un'app sviluppatore

L'app sviluppatore contiene la chiave API necessaria per effettuare chiamate proxy API tramite l'adattatore.

  1. Seleziona Pubblica app nel menu di navigazione laterale.
  2. Fai clic su + App.
  3. Compila la sezione Dettagli sull'app come segue. Nella tabella seguente vengono menzionati solo i campi obbligatori:
  4. Nome httpbin-app
    Developer Seleziona lo sviluppatore che hai creato in precedenza o scegline uno che preferisci dall'elenco.
  5. Nella sezione Credenziali, fai clic su + Aggiungi prodotto e seleziona il prodotto appena configurato: httpbin-product.
  6. Fai clic su Crea.
  7. In Credenziali, fai clic su Mostra accanto a Chiave.
  8. Copia il valore della chiave utente. Questo valore è la chiave API che utilizzerai per effettuare chiamate API al servizio httpbin tramite Apigee Adapter per Envoy.

Utilizzo dell'autenticazione basata su JWT

Puoi utilizzare un token JWT per effettuare chiamate proxy API autenticate invece di utilizzare una chiave API. Questa sezione spiega come utilizzare il comando apigee-remote-service-cli token per creare, ispezionare e ruotare i token JWT. Per un ambiente ibrido Apigee, puoi utilizzare questo comando per creare un secret Kubernetes in cui inserire i JWT.

Panoramica

La verifica e l'autenticazione JWT vengono gestite da Envoy utilizzando il suo filtro di autenticazione JWT.

Una volta eseguita l'autenticazione, il filtro ext-authz di Envoy invia le intestazioni della richiesta e il JWT a apigee-remote-service-envoy. Corrisponde alle rivendicazioni api_product_list e scope di JWT nei confronti dei prodotti API Apigee per autorizzarla in base alla destinazione della richiesta.

Creazione di token JWT Apigee in corso...

I token JWT Apigee possono essere creati utilizzando l'interfaccia a riga di comando:

apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET

In alternativa, utilizzando l'endpoint del token OAuth standard. Esempio di Curl:

curl https://org-env.apigee.net/remote-token/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"

Utilizzo del token JWT

Una volta ottenuto il token, è sufficiente passarlo a Envoy nell'intestazione Autorizzazione. Esempio:

curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"

Errore del token JWT

Rifiuto di Envoy

Se Envoy rifiuta il token, potrebbe essere visualizzato un messaggio simile al seguente:

Jwks remote fetch has failed

In questo caso, assicurati che la configurazione di Envoy contenga un URI valido nella sezione remote_jwks, che sia raggiungibile da Envoy e che tu abbia impostato correttamente i certificati al momento dell'installazione del proxy Apigee. Dovresti essere in grado di chiamare l'URI direttamente con una chiamata GET e ricevere una risposta JSON valida.

Esempio:

curl https://myorg-eval-test.apigee.net/remote-service/certs

Altri messaggi da Envoy possono avere il seguente aspetto:

  • "I segmenti di pubblico in Jwt non sono consentiti"
  • "L'emittente Jwt non è configurato"

Si tratta dei requisiti della tua configurazione Envoy che potresti dover modificare.

Ispeziona un token

Puoi utilizzare l'interfaccia a riga di comando per ispezionare il token. Esempio

apigee-remote-service-cli -c config.yaml token inspect -f path/to/file

o

apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN

Debug

Consulta l'articolo Errori relativi a una chiave API valida.

Utilizzo del proprio provider di identità

Per impostazione predefinita, Apigee Adapter for Envoy utilizza il proxy API remote-token come servizio del provider di identità per autenticare le applicazioni client e fornire i token JWT in base al tipo di concessione delle credenziali client OAuth 2.0. In alcuni casi, tuttavia, potrebbe non essere possibile utilizzare il proxy remote-token. Se devi utilizzare un provider di identità diverso da quello fornito da Apigee, puoi configurare l'adattatore in modo da utilizzare un altro provider di identità. Per dettagli su questo caso d'uso di provider di identità non Apigee e sulla configurazione richiesta, consulta questo articolo sulla community Apigee: Utilizzare il tuo provider di identità con l'adattatore Apigee Envoy.

Logging

Puoi modificare il livello di logging nel servizio $REMOTE_SERVICE_HOME/apigee-remote-service-envoy. Tutti i log vengono inviati a stderr.

Elemento Obbligatorio Descrizione
-l, --log-level Livelli validi: debug, informazioni, avviso, errore. Regola il livello di logging. Valore predefinito: info
-j, --json-log Emette l'output di log come record JSON.

Envoy fornisce il logging. Per ulteriori informazioni, consulta i seguenti link alla documentazione di Envoy:

Modifica del nome del secret del criterio

Un secret Kubernetes di cui è stato eseguito il deployment nel cluster contiene le credenziali necessarie all'adattatore per autenticare la comunicazione con il proxy del servizio remoto. Questo secret richiede un punto di montaggio del volume, che è configurabile. Per impostazione predefinita, il punto di montaggio è /policy-secret. Per cambiare il punto di montaggio:

  1. Esegui questo comando:
    $REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name

    Ad esempio:

    $REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
  2. Apri $CLI_HOME/samples/apigee-envoy-adapter.yaml in un editor.
  3. Cambia il nome del punto di montaggio con il nuovo nome:
    volumeMounts:
      - mountPath: /config
        name: apigee-remote-service-envoy
        readOnly: true
      - mountPath: /opt/apigee/tls
        name: tls-volume
        readOnly: true
      - mountPath: /my-mount-point
        name: policy-secret
        readOnly: true
  4. Salva il file e applicalo al mesh di servizi:
    kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml

Utilizzo di un proxy di rete

Un proxy HTTP può essere inserito utilizzando le variabili di ambiente HTTP_PROXY e HTTPS_PROXY nell'ambiente del file binario apigee-remote-service-envoy. Quando le utilizzi, la variabile di ambiente NO_PROXY può essere utilizzata anche per escludere host specifici dall'invio tramite il proxy.

HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port]
HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port]
NO_PROXY=127.0.0.1,localhost

Ricorda che il proxy deve essere raggiungibile da apigee-remote-service-envoy.

Informazioni su metriche e analisi

Un endpoint delle metriche Prometheus è disponibile all'indirizzo :5001/metrics. Puoi configurare questo numero di porta. Consulta File di configurazione.

Analisi di Envoy

I seguenti link forniscono informazioni su come ottenere i dati di analisi del proxy Envoy:

Analisi Istio

I seguenti link forniscono informazioni su come ottenere i dati di analisi del proxy Envoy:

Analisi Apigee

Il servizio remoto Apigee per Envoy invia statistiche delle richieste ad Apigee per l'elaborazione delle analisi. Apigee segnala queste richieste sotto il nome del prodotto API associato.

Per informazioni sull'analisi di Apigee, consulta la panoramica dei servizi di analisi.

Supporto dell'ambiente multi-tenant

Ora puoi consentire all'adattatore di gestire più ambienti in un'organizzazione Apigee. Questa funzionalità consente di utilizzare un adattatore Apigee per Envoy associato a un'organizzazione Apigee per gestire più ambienti. Prima di questa modifica, un adattatore era sempre collegato a un ambiente Apigee.

Per configurare il supporto di più ambienti, modifica il valore di tenant:env_name in "*" nel file config.yaml. Ad esempio:

  1. Apri il file config.yaml in un editor.
  2. Modifica il valore di tenant.env_name in "*". Ad esempio:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          remote_service_api: https://apitest.mydomain.net/remote-service
          org_name: my-org
          env_name: "*""
          allow_unverified_ssl_cert: true
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.mydomain.net/remote-token/token
  3. Salva il file.
  4. Applica il file:
    kubectl apply -f $CLI_HOME/config.yaml

Quando configuri la modalità multi-ambiente, devi anche configurare Envoy per inviare un valore di ambiente appropriato all'adattatore aggiungendo i seguenti metadati nella sezione virtual_hosts:routes del file envoy-config.yaml. Ad esempio:

  1. Genera il file envoy-config.yaml utilizzando l'interfaccia a riga di comando. Ad esempio:
    $CLI_HOME/apigee-remote-service-cli samples create \
      -t envoy-1.16 -c ./config.yaml --out myconfigs
  2. Apri il file generato (denominato envoy-config.yaml).
  3. Aggiungi i seguenti metadati nella sezione virtual_host o routes del file:
    typed_per_filter_config:
      envoy.filters.http.ext_authz:
        "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute
        check_settings:
          context_extensions:
            apigee_environment: test

    L'esempio seguente illustra la configurazione di un virtual_host con più route definite, in cui ogni route invia il traffico a un ambiente specifico:

    filter_chains:
        - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              stat_prefix: ingress_http
              route_config:
                virtual_hosts:
                - name: default
                  domains: "*"
                  routes:
                  - match: { prefix: /test }
                    route:
                      cluster: httpbin
                    typed_per_filter_config:
                      envoy.filters.http.ext_authz:
                        "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute
                        check_settings:
                          context_extensions:
                             apigee_environment: test
                  - match: { prefix: /prod }
                    route:
                      cluster: httpbin
                    typed_per_filter_config:
                      envoy.filters.http.ext_authz:
                        "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute
                        check_settings:
                          context_extensions:
                             apigee_environment: prod
  4. Ripeti l'ultimo passaggio per aggiungere altri ambienti in base alle esigenze.
  5. Salva il file e applicalo.

Acquisizione dei dati per i report personalizzati

L'adattatore supporta il passaggio dei metadati Envoy alla funzionalità di acquisizione dei dati di Apigee, che invia i dati acquisiti nelle variabili specificate da te alle analisi di Apigee per utilizzarli nei report personalizzati. Questa funzionalità offre una funzionalità simile ai criteri di acquisizione dei dati di Apigee.

Per utilizzare questa funzionalità:

  1. Crea una risorsa REST raccoglitore dati.
  2. Definire le variabili di acquisizione dati utilizzando l'API Apigee datacollectors.
  3. Se non lo hai già fatto, genera il file envoy-config.yaml utilizzando l'interfaccia a riga di comando. Ad esempio:
    $CLI_HOME/apigee-remote-service-cli samples create \
      -t envoy-1.16 -c ./config.yaml --out myconfigs
  4. Apri il file generato (denominato envoy-config.yaml).
  5. Utilizza un filtro Envoy per impostare i valori per le variabili personalizzate nello spazio dei nomi envoy.filters.http.apigee.datacapture. Ad esempio, puoi utilizzare un filtro Intestazione per i metadati o un filtro Lua. Per maggiori informazioni su questi filtri, consulta Header-To-Metadata e Lua.

    I nomi delle variabili personalizzate devono essere formattati come dc.XXXXX.

    Esempio di filtro "Intestazione per i metadati":

     - name: envoy.filters.http.header_to_metadata
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config
        request_rules:
          - header: "Host"
            on_header_present:
              metadata_namespace: envoy.filters.http.apigee.datacapture
              key: dc.host  # host (without the prefix) also works
              type: STRING
            remove: false

    Esempio di filtro Lua:

    - name: envoy.filters.http.lua
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
        inline_code: |
          function envoy_on_request(request_handle)
            metadata = request_handle:streamInfo():dynamicMetadata()
            metadata:set("envoy.filters.http.apigee.datacapture", "dc.test", "A test string.")
          end
  6. Aggiungi il filtro che preferisci al file. Vedi gli esempi qui sotto.
  7. Salva il file e applicalo.

Configurazione di mTLS tra l'adattatore e il runtime Apigee

Puoi fornire certificati TLS lato client nella sezione tenant del file config.yaml dell'adattatore per utilizzare mTLS tra l'adattatore e il runtime Apigee. Questa modifica si applica a tutte le piattaforme Apigee supportate. Abilita mTLS anche per l'analisi per la piattaforma Apigee Edge per il cloud privato. Ad esempio:

tenant:
  tls:
    ca_file: path/ca.pem
    cert_file: path/cert.pem
    key_file: path/key.pem
    allow_unverified_ssl_cert: false