Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Questo esempio mostra come utilizzare l'adattatore Apigee per Envoy con un deployment Apigee hybrid.
Prerequisiti
Prima di iniziare: |
---|
|
.
|
|
Panoramica
Questo esempio spiega come utilizzare Apigee Adapter for Envoy con Apigee hybrid. In questo esempio, eseguirai il deployment di un semplice servizio HTTP nello stesso ambiente in cui viene eseguito il deployment di Apigee hybrid. Poi, dovrai configurare Apigee Adapter for Envoy per gestire le chiamate API a questo servizio con Apigee.
La figura seguente mostra l'architettura di base per l'integrazione ibrida di Apigee:
Un proxy Envoy viene dispiegato con il servizio HTTP di destinazione come sidecar Istio nel mesh di servizi Istio. Il file collaterale gestisce il traffico API da e verso il servizio di destinazione e comunica con servizio remoto. Il servizio remoto comunica anche con il piano di gestione ibrido per recuperare le informazioni sui prodotti e sui proxy dell'API.
Controlla la configurazione di gcloud
- Verifica che la configurazione di
gcloud
sia impostata sul progetto Google Cloud associato alla tua organizzazione ibrida.Per elencare le impostazioni correnti:
gcloud config list
Se necessario, imposta l'ID progetto Google Cloud corretto con questo comando:
gcloud config set project project-id
- Devi eseguire l'autenticazione con Google Cloud SDK (gcloud) per il tuo progetto Google Cloud:
gcloud auth login
Provisioning di Apigee hybrid
In questo passaggio, utilizzerai l'interfaccia a riga di comando Remote Service per eseguire il provisioning dell'istanza ibrida con il proxy API remote-service
. Il comando di provisioning configura anche un certificato
Apigee e genera le credenziali che il servizio remoto utilizzerà per connettersi in modo sicuro ad Apigee.
- Vai alla directory
$CLI_HOME
:cd $CLI_HOME
- Se non sei proprietario del progetto Google Cloud associato all'organizzazione ibrida Apigee,
assicurati che il tuo account utente Google Cloud includa il ruolo Amministratore organizzazione Apigee oppure
sia il ruolo Creatore API che il ruolo Deployer.
Consulta la sezione Concessione, la modifica e la revoca dell'accesso alle risorse.
- Esegui questo comando per ottenere un token di accesso:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- (Facoltativo) Per impostazione predefinita, l'adattatore cerca le credenziali dell'account di servizio predefinite nel progetto Google Cloud per l'autorizzazione a inviare dati di analisi ad Apigee. Se non vuoi utilizzare
predefinita
credenziali dell'account di servizio, puoi creare un account di servizio e fare riferimento alla relativa chiave nella
di provisioning. L'account di servizio deve avere il ruolo
apigee.analyticsAgent
. Per le istruzioni, vedi Creare e gestire gli account di servizio. - Crea le seguenti variabili di ambiente. Queste variabili verranno utilizzate come parametri per lo script di provisioning:
export ORG=organization_name
export ENV=environment_name
export RUNTIME=host_alias_url
export NAMESPACE=hybrid_runtime_namespace
export AX_SERVICE_ACCOUNT=analytics_service_account
## OptionalDove:
Variabile Descrizione organization_name Il nome dell'organizzazione Apigee per l'installazione ibrida di Apigee. environment_name Il nome di un ambiente nella tua organizzazione Apigee hybrid. host_alias_url Un URL che include hostAlias
per un host virtuale definito nella tua configurazione ibrida. L'URL deve iniziare conhttps://
. Ad esempio:https://apitest.apigee-hybrid-docs.net
hybrid_runtime_namepace Lo spazio dei nomi in cui vengono dipiazzati i componenti del runtime di hybrid. Nota: lo spazio dei nomi predefinito per un deployment ibrido è apigee
.analytics_service_account (Facoltativo) Il percorso di un file JSON della chiave dell'account di servizio Google Cloud con Ruolo Apigee Analytics Agent
. Per una descrizione dettagliata consulta la sezione Comando di provisioning. - Esegui il seguente comando per eseguire il provisioning del proxy del servizio remoto in Apigee Hybrid:
Se non stai eseguendo l'upgrade, utilizza questo comando per eseguire il provisioning di Apigee:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
Se stai eseguendo l'upgrade, utilizza questo comando con il flag
--force-proxy-install
per eseguire il provisioning di Apigee:./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
- Controlla i contenuti del file
config.yaml
. Dovrebbe avere un aspetto simile a questo:# Configuration for apigee-remote-service-envoy (platform: Google Cloud) # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.example.com/remote-service org_name: hybrid-gke env_name: test analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.example.com/remote-token/token --- apiVersion: v1 kind: Secret metadata: name: hybrid-gke-new-test-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ... --- apiVersion: v1 kind: Secret metadata: name: hybrid-gke-new-test-analytics-secret namespace: apigee type: Opaque data: client_secret.json: ewogICJ0eXBlIjogInNlcnZ... --- apiVersion: v1 kind: ServiceAccount metadata: name: apigee-remote-service-envoy namespace: apigee
- Applica la configurazione del servizio (l'output del file con il comando di provisioning) al cluster:
kubectl apply -f $CLI_HOME/config.yaml
- Verifica il proxy e il certificato. Quanto segue dovrebbe restituire un JSON valido:
curl -i $RUNTIME/remote-token/certs
L'output avrà un aspetto simile al seguente:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kid": "2020-05-11T11:32:26-06:00", "kty": "RSA", "n": "0v-nbTQyAmtVZ-wZRP0ZPIbrVaX91YO9JZ9xCQPb4mOdOSS7yKfTDJGg0KM130sGVYBvR76alN8 fhrrSDEG5VXG8YYMqPXarwRC7MRJWocCQ_ECYrjDD0_Q018M2HyXZYSd8fhAogi9mVUYsEmCKqJH53Dh1 jqsHOQzBLKsX0iDO9hEZNFtjbX0UCbSxsUlmBCub7Uj2S-PahA6DEQOMhQjZM7bBMtkTMpFmaJ_RZTmow BHP57qMna17R8wHD4kUsO2u_-3HHs5PSj1NrEYoVU2dwLQw0GlkB__ZWeFgXTqot81vb-PmoM9YxwoZrm TcHdljugWy_s7xROPzTod0uw" } ] }
Crea file di configurazione di esempio
Usa il comando apigee-remote-service-cli samples create
per generare
file di configurazione di esempio.
Per questo esempio sono necessari i seguenti file generati:
httpbin.yaml
: una configurazione di deployment per un servizio HTTP.apigee-envoy-adapter.yaml
: una configurazione di deployment per il servizio remoto per Envoy.envoyfilter-sidecar.yaml
: una configurazione che installa un filtro Envoy. allo spazio dei nomi predefinito.
Per generare i campioni:
- Vai alla directory
$CLI_HOME
. Esegui questo comando per generare i file:
./apigee-remote-service-cli samples create -c ./config.yaml --template istio-1.12
I seguenti file vengono restituiti nella directory
./samples
:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
Per ulteriori informazioni, consulta il comando Samples.
Esegui il deployment di un servizio di test nel cluster
In questo passaggio, eseguirai il deployment di un semplice servizio di test di richiesta/risposta HTTP nello stesso cluster in cui è stato eseguito il deployment di Apigee Hybrid.
- Attiva l'iniezione di Istio nello spazio dei nomi
default
del cluster. In un passaggio successivo, ed eseguirai il deployment di un file collaterale Envoy allo stesso cluster. L'attivazione di Istio injection il deployment collaterale possibile. Questo esempio utilizza lo spazio dei nomidefault
e tutte le istruzioni successive presuppongono che sia così.Se utilizzi Istio open source:
kubectl label namespace default istio-injection=enabled --overwrite
Se utilizzi ASM:
kubectl label namespace default istio-injection=enabled istio.io/rev=REVISION --overwrite
- Applica il servizio
httpbin
semplice al nello spazio dei nomi predefinito:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- Ora prova il servizio. Avvia un servizio
curl
in esecuzione nel cluster e apri un terminale:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- Testa il servizio chiamandolo dall'interno del cluster:
curl -i httpbin.default.svc.cluster.local/headers
Se l'operazione riesce, verrà visualizzato lo stato 200 e il servizio restituirà un elenco di intestazioni. Ad esempio:
HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:09:01 GMT content-type: application/json content-length: 328 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 7 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-B3-Parentspanid": "69f88bc3e322e157", "X-B3-Sampled": "0", "X-B3-Spanid": "8dd725f30e393d8b", "X-B3-Traceid": "38093cd817ad30a569f88bc3e322e157" } }
Esegui il servizio remoto per Envoy
In questo passaggio avvierai il servizio remoto per il client Envoy. Questo servizio fornisce gli endpoint ai file collaterali Istio che
sono installati sui servizi di destinazione. Inoltre, installerai un sidecar con il servizio httpbin
.
- Applica il servizio remoto Apigee al mesh di servizi:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- Applica
EnvoyFilter
ai sidecar Istio nello spazio dei nomi predefinito.EnvoyFilter
consente al sidecarhttpbin
di comunicare con il servizio Apigee Remote.kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
Verifica l'installazione
- Ora torna alla shell curl che hai aperto nel passaggio
Esegui il deployment di un servizio di test nel cluster e chiama
httpbin
servizio:curl -i httpbin.default.svc.cluster.local/headers
Il servizio è ora gestito da Apigee e, poiché non hai fornito una chiave API, il server restituisce il seguente errore.
curl -i httpbin.default.svc.cluster.local/headers HTTP/1.1 403 Forbidden date: Tue, 12 May 2020 17:51:36 GMT server: envoy content-length: 0 x-envoy-upstream-service-time: 11
- Configurare un prodotto API e ottenere una chiave API come spiegato in Come ottenere una chiave API.
- Effettua una chiamata API utilizzando la chiave:
export APIKEY=YOUR_API_KEY
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: $APIKEY"
La chiamata dovrebbe riuscire con uno stato 200 e restituire un elenco di intestazioni nella risposta. Ad esempio:
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS" HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:55:34 GMT content-type: application/json content-length: 828 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 301 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-Api-Key": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Accesstoken": "", "X-Apigee-Api": "httpbin.default.svc.cluster.local", "X-Apigee-Apiproducts": "httpbin", "X-Apigee-Application": "httpbin", "X-Apigee-Authorized": "true", "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Developeremail": "jdoe@example.com", "X-Apigee-Environment": "envoy", "X-Apigee-Organization": "acme-org", "X-Apigee-Scope": "", "X-B3-Parentspanid": "1476f9a2329bbdfa", "X-B3-Sampled": "0", "X-B3-Spanid": "1ad5c19bfb4bc96f", "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa" } }
Passaggi successivi
Il traffico API verso il servizio httpbin
è ora gestito da Apigee. Ecco
alcune funzionalità che puoi esplorare e provare:
- Accedi ad Apigee Analytics nell'interfaccia utente di Edge. Vai a Analizza > Metriche API > API Prestazioni del proxy.
- Utilizza la CLI per gestire, creare token e controllare le associazioni. Per maggiori dettagli sull'interfaccia a riga di comando, consulta il riferimento.
Disinstalla Apigee Adapter for Envoy
Per rimuovere l'installazione di un adattatore Apigee Envoy:
- Ovunque tu abbia scelto di eseguire l'adattatore Envoy (in modo nativo o su Docker), rimuovilo.
- Elimina i proxy remote-service e remote-token dagli ambienti Apigee. Consulta Eliminazione di un proxy API.
- Rimuovi eventuali operazioni o prodotti API inutilizzati utilizzati dai casi d'uso dell'adattatore Envoy. Consulta Eliminare un prodotto API.
Inoltre, puoi eseguire questi comandi:
kubectl delete -f $CLI_HOME/samples/envoyfilter-sidecar.yaml kubectl delete -f $CLI_HOME/samples/apigee-envoy-adapter.yaml kubectl delete -f $CLI_HOME/samples/httpbin.yaml kubectl delete -f $CLI_HOME/config.yaml