Stai
visualizzando la documentazione di Apigee X.
Visualizza la documentazione di Apigee Edge.
Questo esempio mostra come utilizzare ApigeeAdattatore per Envoy con un deployment ibrido Apigee.
Prerequisiti
Prima di iniziare: |
---|
|
|
|
Panoramica
Questo esempio spiega come utilizzare ApigeeAdattatore per Envoy con Apigee ibrida. In questo esempio, eseguirai il deployment di un servizio HTTP semplice nello stesso cluster Kubernetes in cui viene eseguito il deployment di Apigee ibrido. Quindi, configurerai l'adattatore Apigee per 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:
Viene eseguito il deployment di un proxy Envoy con il servizio HTTP di destinazione come sidecar Istio nel mesh di servizi Istio. La sidecar gestisce il traffico API da e verso il servizio di destinazione e comunica con il servizio remoto. Il servizio remoto comunica inoltre con il piano di gestione ibrido per recuperare le informazioni sul prodotto e sul proxy dell'API.
Controlla la tua configurazione gcloud
- Verifica che la configurazione di
gcloud
sia impostata sul progetto GCP associato alla tua organizzazione ibrida.Per elencare le impostazioni correnti, procedi nel seguente modo:
gcloud config list
Se necessario, imposta l'ID progetto GCP corretto con questo comando:
gcloud config set project project-id
- Devi aver eseguito l'autenticazione con Google Cloud SDK (gcloud) per il tuo progetto GCP:
gcloud auth login
Esegui il provisioning di Apigee ibrido
In questo passaggio, utilizzerai l'interfaccia a riga di comando di Remote Service per eseguire il provisioning di ibrido con il proxy API remote-service
. Il comando di provisioning configura anche un certificato su Apigee e genera le credenziali che il servizio remoto utilizzerà per connettersi di nuovo in modo sicuro ad Apigee.
- Vai alla directory
$CLI_HOME
:cd $CLI_HOME
- Se non sei un proprietario del progetto GCP associato all'organizzazione ibrida di Apigee, assicurati che il tuo account utente GCP includa il ruolo
Apigee Organization Admin
. Consulta l'articolo relativo a concessione, modifica e revoca dell'accesso alle risorse. - Esegui questo comando per ottenere un token di accesso:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- 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
Dove:
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 ibrida Apigee. host_alias_url Un URL che include hostAlias
per un host virtuale definito nella configurazione ibrida. L'URL deve iniziare conhttps://
. Ad esempio:https://apitest.apigee-hybrid-docs.net
.hybrid_runtime_namepace Lo spazio dei nomi in cui viene eseguito il deployment dei componenti runtime ibridi. Nota: lo spazio dei nomi predefinito per un deployment ibrido è apigee
. - Esegui il comando seguente per eseguire il provisioning del proxy di servizio remoto con Apigee ibrido:
Se non esegui l'upgrade, utilizza questo comando per eseguire il provisioning di Apigee:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml
Se esegui 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 --token $TOKEN > config.yaml
- Controlla i contenuti del file
config.yaml
. Dovrebbe avere un aspetto simile a questo:# Configuration for apigee-remote-service-envoy # generated by apigee-remote-service-cli provision on 2020-07-06 18:03:58 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.apigee-hybrid-docs.net/remote-service org_name: hybrid-docs env_name: envoy allow_unverified_ssl_cert: true analytics: collection_interval: 10s fluentd_endpoint: apigee-udca-hybrid-docs-envoy.apigee:20001 tls: ca_file: /opt/apigee/tls/ca.crt key_file: /opt/apigee/tls/tls.key cert_file: /opt/apigee/tls/tls.crt --- apiVersion: v1 kind: Secret metadata: name: hybrid-docs-envoy-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ...
- Applica la configurazione del servizio (l'output del file dal 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-service/certs
L'output ha il seguente aspetto:
{ "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" } ] }
Creare file di configurazione di esempio
Utilizza il comando apigee-remote-service-cli samples create
per generare file di configurazione di esempio.
In 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 Remote Service for Envoy.envoyfilter-sidecar.yaml
: una configurazione che installa un filtro Envoy. nello 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
I seguenti file generano l'output della directory
./samples
:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
Per maggiori informazioni, consulta il comando Esempi.
Esegui il deployment di un servizio di test nel cluster
In questo passaggio, eseguirai il deployment di un semplice servizio di test HTTP di richiesta/risposta nello stesso cluster in cui viene eseguito il deployment di Apigee ibrida.
- Abilita l'inserimento di Istio nello spazio dei nomi
default
del cluster. In un passaggio successivo, eseguirai il deployment di una sidecar Envoy in questo stesso cluster. L'abilitazione di Istio injection consente il deployment del sidecar. Questo esempio utilizza lo spazio dei nomidefault
e tutte le istruzioni successive presuppongono che questo sia il caso.kubectl label namespace default istio-injection=enabled
- Applica il servizio
httpbin
semplice al cluster 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 richiamandolo dall'interno del cluster:
curl -i httpbin.default.svc.cluster.local/headers
In caso di esito positivo, verrà visualizzato uno 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, avvii il client Remote Service for Envoy nel mesh di servizi in cui è installato Apigee ibrido. Questo servizio fornisce gli endpoint ai file collaterali di Istio che sono installati sui servizi di destinazione. Installerai inoltre una 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 file collaterali Istio nello spazio dei nomi predefinito.EnvoyFilter
consente al sidecarhttpbin
di comunicare con il servizio remoto Apigee.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 il servizio
httpbin
:curl -i httpbin.default.svc.cluster.local/headers
Il servizio è ora gestito da Apigee e poiché non hai fornito una chiave API, 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
- Configura un prodotto API e recupera 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 lo 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:
- Se hai configurato il tuo prodotto API come spiegato in Come ottenere una chiave API, il limite di quota è stato impostato su 5 richieste al minuto. Prova a chiamare il servizio
httpbin
alcune altre volte per attivare la quota. Quando la quota è esaurita, viene restituito un errore di stato HTTP 403. - Accedi ad Apigee Analytics nell'interfaccia di Apigee. Vai ad Analizza > metriche API > prestazioni proxy API.
- Genera e utilizza i token JWT per autenticare le chiamate API.
- Utilizza l'interfaccia a riga di comando per gestire, creare token e controllare le associazioni. Per maggiori dettagli sull'interfaccia a riga di comando, consulta il riferimento.