Questa pagina si applica a Apigee e Apigee ibridi.
Visualizza la documentazione di Apigee Edge.
Come ottenere una chiave API
L'esempio seguente spiega come ottenere una chiave API da utilizzare per la convalida Chiamate API a un servizio di destinazione inviate tramite proxy tramite Apigee Adapter for Envoy.
1. Accedi ad Apigee
- Accedi all'UI di Apigee.
- 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:
- Seleziona Pubblica > Sviluppatori nel menu di navigazione laterale.
- Fai clic su + Sviluppatore.
- 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.
- Seleziona Pubblica > Prodotti API nel menu di navigazione laterale.
- Fai clic su +CREA.
- Compila la sezione Dettagli prodotto come segue. Solo i campi obbligatori sono menzionati in
la tabella seguente:
Campo Valore Descrizione Nome httpbin-product
Il nome univoco del prodotto API. Nome visualizzato httpbin product
Il nome descrittivo che vuoi visualizzare nell'interfaccia utente o in altri contesti di visualizzazione. Accesso Public
Ai fini di questo esempio, Pubblico è una buona scelta. - Nella sezione Operazioni, fai clic su + AGGIUNGI UN'OPERAZIONE.
- Nella sezione Origine, seleziona Servizio remoto.
- Attiva/disattiva l'opzione Origine per consentire di digitare manualmente il nome di un servizio remoto nel campo Servizio remoto.
- Nel campo Servizio remoto, inserisci il nome del servizio remoto. Si tratta di un servizio di destinazione a cui l'adattatore
proxy alle richieste HTTP in entrata. A scopo di test, utilizza
httpbin.org
ohttpbin.default.svc.cluster.local
con Kubernetes. - Nella sezione Operazione, inserisci
/
per il percorso. Per informazioni su per i percorsi delle risorse, consulta Configurazione dei percorsi delle risorse. - Fai clic su SALVA per salvare l'operazione.
- 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 dell'adattatore.
- Seleziona Pubblica app nel menu di navigazione laterale.
- Fai clic su + App.
- Compila la sezione Dettagli sull'app come segue. Solo i campi obbligatori sono menzionati in la tabella seguente:
- Nella sezione Credenziali, fai clic su + Aggiungi prodotto e seleziona il prodotto che appena configurato: httpbin-product.
- Fai clic su Crea.
- In Credenziali, fai clic su Mostra accanto a Chiave.
- Copia il valore della chiave utente. Questo valore è la chiave API.
che utilizzerai per effettuare chiamate API al servizio
httpbin
tramite Apigee Adapter for Envoy.
Nome | httpbin-app
|
Developer | Seleziona lo sviluppatore che hai creato in precedenza o scegline uno che preferisci dall'elenco. |
Utilizzo dell'autenticazione basata su JWT
Puoi utilizzare un token JWT per effettuare chiamate proxy API autenticate invece di utilizzare una chiave API. Questo
spiega come usare 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 contenente 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 e il JWT della richiesta a
apigee-remote-service-envoy
. Corrisponde alle rivendicazioni api_product_list
e scope
del JWT
nei prodotti API Apigee per autorizzarla in base alla destinazione della richiesta.
Creazione di token JWT Apigee in corso...
I token JWT di 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 correttamente
Impostare i certificati quando hai installato il proxy Apigee. Dovresti riuscire a
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 potrebbero 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 il client
e consegnare token JWT in base al tipo di concessione delle credenziali client OAuth 2.0. In alcuni
casi, tuttavia, potresti non riuscire a utilizzare il proxy remote-token
.
Se devi utilizzare un provider di identità diverso da quello fornito da Apigee, puoi configurare
l'adattatore per usare un altro provider di identità. Per informazioni dettagliate su questo caso d'uso del provider di identità non Apigee e sulla configurazione richiesta, consulta questo articolo della 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
punto di montaggio del volume, che è configurabile. Per impostazione predefinita, il punto di montaggio è /policy-secret
.
Per cambiare il punto di montaggio:
- 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
- Apri
$CLI_HOME/samples/apigee-envoy-adapter.yaml
in un editor. - 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
- 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 vengono utilizzati, i modelli NO_PROXY può essere utilizzata anche per escludere host specifici dall'invio tramite 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 analisi del proxy Envoy dati:
Analisi Istio
I seguenti link forniscono informazioni su come ottenere analisi del proxy Envoy dati:
Analisi Apigee
Il servizio remoto Apigee per Envoy invia le statistiche delle richieste ad Apigee per l'elaborazione delle analisi. Apigee segnala queste richieste sotto il nome del prodotto API associato.
Per informazioni su dati e analisi di Apigee, consulta la panoramica dei servizi di analisi.
Supporto dell'ambiente multi-tenant
Ora puoi abilitare l'adattatore per il servizio di più in un'organizzazione Apigee. Questa funzionalità ti consente di utilizzare un Apigee Adapter per Envoy associato a un'organizzazione Apigee per gestire più ambienti. Prima di questa modifica, un'adattatore era sempre associato a un ambiente Apigee.
Per configurare il supporto di più ambienti, modifica
il valore di tenant:env_name
a "*"
nel config.yaml
. Ad esempio:
- Apri il file
config.yaml
in un editor. - 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
- Salva il file.
- Applica il file:
kubectl apply -f $CLI_HOME/config.yaml
Quando configuri la modalità multi-ambiente, devi anche configurare Envoy per inviare un messaggio
valore di ambiente all'adattatore aggiungendo i seguenti metadati nel
Sezione virtual_hosts:routes
del file envoy-config.yaml
. Ad esempio:
- 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
- Apri il file generato (denominato
envoy-config.yaml
). - Aggiungi i seguenti metadati in
virtual_host
o Sezioneroutes
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 definita, 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
- Ripeti l'ultimo passaggio per aggiungere altri ambienti in base alle esigenze.
- Salva il file e applicalo.
Acquisizione dei dati per i report personalizzati
L'adattatore supporta il passaggio di metadati Envoy alla funzionalità di acquisizione dati di Apigee, invia i dati acquisiti nelle variabili da te specificate ad 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à:
- Crea una risorsa REST raccoglitore dati.
- Definisci le variabili di acquisizione dati utilizzando API Apigee datacollectors.
- 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
- Apri il file generato (denominato
envoy-config.yaml
). - Utilizza un filtro Envoy per impostare i valori delle 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 ulteriori informazioni su questi filtri, consulta Header-To-Metadata e Lua.I nomi delle variabili personalizzate devono essere formattato 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
- Aggiungi il filtro che preferisci al file. Vedi gli esempi qui sotto.
- Salva il file e applicalo.
Configurazione di mTLS tra l'adattatore e il runtime Apigee
Puoi fornire certificati TLS lato client nella sezione tenant
della
config.yaml
dell'adattatore per utilizzare mTLS tra l'adattatore e il runtime Apigee. Questo
si applica a tutte le piattaforme Apigee supportate. Abilita anche mTLS 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