Esempio di Envoy nativo per Apigee e ibrido

Questa pagina si applica a Apigee e Apigee ibrido.

Visualizza la documentazione di Apigee Edge.

Questo esempio mostra come utilizzare Apigee Adapter per Envoy installando ed eseguendo Envoy in locale, non all'interno di un cluster Kubernetes. Puoi seguire l'esempio in questo documento per le installazioni ibride di Apigee e Apigee.

Le chiamate proxy API passano attraverso Envoy in esecuzione come applicazione nativa. Apigee offre servizi di gestione delle API, come la creazione di prodotti API e app per sviluppatori. Envoy comunica con il piano di gestione Apigee tramite il servizio remoto dell'adattatore. L'adattatore invia inoltre i dati di analisi ad Apigee, dove puoi vederli in Apigee Analytics.

Prerequisiti

Prima di iniziare:

Controlla la configurazione di gcloud

  1. Verifica che la configurazione di gcloud sia impostata sul progetto Google Cloud associato alla tua organizzazione Apigee.

    Per elencare le impostazioni attuali. Vedi anche gcloud config.

    gcloud config list

    Se necessario, imposta l'ID progetto Google Cloud corretto con questo comando:

    gcloud config set project project-id
  2. Devi eseguire l'autenticazione con Google Cloud SDK (gcloud) per il tuo progetto Google Cloud. Vedi anche gcloud auth login.
    gcloud auth login

Esegui il provisioning di Apigee

In questo passaggio, utilizzerai Remote Service CLI per eseguire il provisioning degli asset di Apigee Adapter per Envoy su Apigee. Il comando di provisioning esegue il deployment dei proxy API utilizzati per le operazioni dell'adattatore Apigee, configura un certificato su Apigee e genera le credenziali che il servizio remoto utilizzerà per connettersi in modo sicuro dal tuo sistema ad Apigee.

  1. Vai alla directory $CLI_HOME:
    cd $CLI_HOME
  2. (Facoltativo) Per impostazione predefinita, l'adattatore cerca le credenziali dell'account di servizio predefinite nel progetto Google Cloud per ottenere l'autorizzazione per inviare dati di analisi ad Apigee. Se non vuoi utilizzare le credenziali predefinite dell'account di servizio, puoi creare un account di servizio e fare riferimento alla relativa chiave nel comando di provisioning. L'account di servizio deve avere il ruolo apigee.analyticsAgent. Per le istruzioni, consulta Creazione e gestione degli account di servizio.
  3. 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  ## Apigee hybrid only
    export AX_SERVICE_ACCOUNT=analytics_service_account  ## Optional

    Dove:

    Variabile Descrizione
    organization_name Il nome della tua organizzazione Apigee.
    environment_name Il nome di un ambiente nella tua organizzazione.
    host_alias_url
    • Per Apigee hybrid, un URL che include hostAlias per un host virtuale definito nella configurazione ibrida.
    • Per Apigee, un nome host del gruppo di ambienti che include l'ambiente. Puoi trovare i gruppi di ambienti nella UI di Apigee in Amministrazione > Ambienti > Gruppi.
    • Nota: l'URL deve iniziare con https://. Ad esempio: https://apitest.mydomain.net

    hybrid_runtime_namepace (Solo Apigee hybrid) Lo spazio dei nomi in cui viene eseguito il deployment dei componenti di runtime ibridi.

    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 il ruolo Apigee Analytics Agent. Per una descrizione dettagliata di questo parametro, consulta Comando di provisioning.
  4. Se non sei un proprietario del progetto Google Cloud associato all'organizzazione Apigee, assicurati che il tuo account utente Google Cloud includa il ruolo Amministratore organizzazione Apigee oppure entrambi i ruoli Creatore API e Deployer. Consulta Concessione, modifica e revoca dell'accesso alle risorse.
  5. Richiedi un token di accesso:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  6. Esegui il provisioning del proxy del servizio remoto su Apigee. L'output comando viene reindirizzato a un file di configurazione che utilizzerai in un passaggio successivo.

    Se non stai eseguendo l'upgrade, utilizza questo comando per eseguire il provisioning di Apigee. Se stai eseguendo il provisioning di Apigee hybrid, assicurati di aggiungere il parametro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --organization $ORG --environment $ENV \
         --runtime $RUNTIME --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. Se stai eseguendo il provisioning di Apigee hybrid, assicurati di aggiungere il parametro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
  7. Controlla i contenuti del file config.yaml. Dovrebbe avere il seguente aspetto:
    # 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.mydomain.com/remote-service
          org_name: my-org
          env_name: test
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.mydomain.com/remote-service/token
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-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: my-org-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

Esegui apigee-remote-service-envoy

Puoi eseguire il servizio remoto come binario nativo o su Docker.

Esegui il servizio in modo nativo

Esegui il file binario del servizio con il file di configurazione generato dal comando di provisioning:

$REMOTE_SERVICE_HOME/apigee-remote-service-envoy -c config_file_path/config.yaml

Esegui il servizio su Docker

Le immagini Docker vengono pubblicate con i tag di release. Per questa installazione, utilizza la versione più recente. Puoi scegliere fra tre varianti di immagini:

Variante Immagine
Senza distro di Google google/apigee-envoy-adapter:v2.0.3
Ubuntu google/apigee-envoy-adapter:v2.0.3-ubuntu
Ubuntu con Boring Crypto google/apigee-envoy-adapter:v2.0.3-boring

Ad esempio, per eseguire l'immagine scratchpad con il tuo config.yaml locale disponibile come /config.yaml tramite un montaggio del volume, utilizza questo comando:

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v2.0.3

Crea un file di configurazione Envoy di esempio

Genera un file di configurazione Envoy di esempio utilizzando l'interfaccia a riga di comando:

  1. Assicurati di essere nella directory $ENVOY_HOME.
  2. Elenca i modelli di configurazione disponibili:
    $CLI_HOME/apigee-remote-service-cli samples templates
  3. Esegui il comando Samples. Per TEMPLATE, sostituisci uno dei modelli di Envoy supportati:

    $CLI_HOME/apigee-remote-service-cli samples create --template TEMPLATE -c ./config.yaml

    Il comando crea il file ./samples/envoy-config.yaml.

Per ulteriori informazioni, consulta Comando di Samples.

Installa ed esegui il proxy Envoy

Per installare ed eseguire il proxy Envoy, segui questi passaggi:

  1. Scarica un Envoy binario o crealo.
  2. Esegui Envoy utilizzando un file di configurazione di esempio che hai generato in precedenza per il servizio httpbin.org:
    envoy -c ./samples/envoy-config.yaml

Verifica l'installazione

  1. Configura un prodotto API e ottieni una chiave API come spiegato in Come ottenere una chiave API.
  2. Chiama il servizio httpbin senza una chiave API:
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    

    Il servizio è ora gestito da Apigee e, poiché non hai fornito una chiave API, la chiamata restituisce l'errore seguente.

    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    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
  3. Effettua una chiamata API utilizzando la chiave:
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org" -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": "kyOTalNNLMPfOSy6rneclmVSL6pA2zS",
        "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": "kyOTalNNLMPfOSy6rVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "user@mydomain.com",
        "X-Apigee-Environment": "test",
        "X-Apigee-Organization": "my-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

Disinstalla l'adattatore Apigee Envoy

Per rimuovere l'installazione di un adattatore Apigee Envoy:

  1. Ovunque tu abbia scelto di eseguire l'adattatore Envoy (in modo nativo o su Docker), rimuovilo.
  2. Elimina i proxy remote-service e remote-token dagli ambienti Apigee. Consulta la pagina relativa all'eliminazione di un proxy API.
  3. Rimuovi eventuali operations inutilizzati utilizzati dai casi d'uso dell'adattatore Envoy. Consulta la pagina relativa all'eliminazione di un prodotto API.

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 dalla UI Edge. Vai ad Analyze > API Metrics > API Proxy Performance.
  • Esplora le opzioni dell'interfaccia a riga di comando nel Riferimento.