Il proxy Envoy ha esito negativo con errore HTTP 403 Vietato nell'adattatore Apigee per Envoy

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

Il proxy Envoy non riesce con errore HTTP 403 Forbidden quando richiamato tramite Adattatore Apigee per Envoy.

Messaggio di errore

Viene visualizzato il seguente messaggio di errore:

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

Possibili cause

Il proxy Envoy genererà un errore HTTP 403 se una delle seguenti condizioni avvengono nel seguente modo:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
Il prodotto API non è abilitato Il prodotto API non è abilitato per l'ambiente specifico. Utenti perimetrali di cloud pubblici e privati
Percorso URI del servizio di destinazione mancante nel prodotto API Il percorso dell'URI del servizio di destinazione manca o non è stato aggiunto al prodotto API in API Google Cloud. Utenti perimetrali di cloud pubblici e privati
Nome host mancante nel prodotto API Il nome host specificato nella richiesta API client non è presente nel prodotto API in Apigee target di servizi remoti. Utenti perimetrali di cloud pubblici e privati
Chiave API mancante nell'intestazione della richiesta La chiave API non viene passata nell'intestazione HTTP x-api-key. Utenti perimetrali di cloud pubblici e privati
Chiave API non valida La chiave API passata come parte della richiesta non è valida. Utenti perimetrali di cloud pubblici e privati
Apigee Adapter per Envoy non è in grado di comunicare con il proxy API del servizio remoto Apigee Adapter per Envoy non è in grado di comunicare con il proxy API del servizio remoto. Utenti perimetrali di cloud pubblici e privati
Il proxy Envoy non riesce a comunicare con Apigee Adapter per Envoy Il proxy Envoy non è in grado di comunicare con Apigee Adapter for Envoy Utenti perimetrali di cloud pubblici e privati

Prima di iniziare

  1. Verifica di ricevere il messaggio di risposta 403 Forbidden dall' Proxy Envoy. Ad esempio:
    curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo
    
    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Tue, 12 Jan 2021 08:18:08 GMT
    server: envoy
    RBAC: access denied
    
  2. Attiva i log di debug:

    Assicurati di aver abilitato i log di debug in Apigee Adapter for Envoy per acquisire ulteriori dettagli su l'errore. In caso contrario, arresta Apigee Adapter for Envoy e avvialo di nuovo, abilitando i log di debug utilizzando il seguente comando:

    apigee-remote-service-envoy -c config.yaml -l debug
    

Causa: il prodotto API non è abilitato

Questo errore si verifica se lo specifico prodotto API utilizzato dal proxy Envoy non è abilitato nel in un ambiente specifico in cui vengono richiamate le chiamate API.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che venga visualizzato il seguente messaggio nella sezione Authorizing request:
    product: API_PRODUCT_NAME not found
    

    Esempio di output del log di debug:

    2021-01-12T08:18:08.124Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:18:08.124Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: 7mQIG...
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:18:08.589Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        not found
    

    L'esempio precedente mostra che il prodotto API ENVOY-PRODUCT-1 non è stato trovato in Adattatore Apigee per Envoy.

    Per ulteriori informazioni sul logging di Apigee Adapter per Envoy, vedi Logging.

  3. Se viene visualizzato questo messaggio mentre autorizzi la richiesta API, molto probabilmente che lo specifico prodotto API non sia abilitato per un ambiente specifico in cui le chiamate API.
  4. Per verificarlo, procedi nel seguente modo:
    1. Accedi alla UI di Edge.
    2. Nella scheda Pubblica > Prodotti API, fai clic sul prodotto API specifico che utilizzato per configurare Apigee Adapter per Envoy.
    3. Verifica che l'ambiente specifico in cui effettui le richieste API sia abilitato nel prodotto API.
    4. Se l'ambiente specifico non è abilitato nel prodotto API, questa è la causa. per questo problema.
  5. Se l'ambiente specifico è già abilitato, vai a Causa: manca il percorso dell'URI del servizio di destinazione nel prodotto API.

Risoluzione

Se l'ambiente specifico non è abilitato nel prodotto API, segui questi passaggi per risolvere il problema:

  1. Accedi alla UI di Edge.
  2. Nella scheda Pubblica > Prodotti API, fai clic sul prodotto API specifico che hai utilizzato. per la configurazione di Apigee Adapter per Envoy.
  3. Nella pagina Prodotti API > Nome del prodotto, fai clic su Modifica.
  4. Abilita l'ambiente specifico in cui desideri effettuare le richieste API selezionando la casella di controllo dell'ambiente pertinente.
  5. Fai clic su Salva.

Causa: manca il percorso dell'URI del servizio di destinazione nel prodotto API

Questo errore si verifica se il percorso URI del target non è specificato nello specifico prodotto API utilizzato dal proxy Envoy.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che il seguente messaggio sia visualizzato per lo specifico prodotto API associato a un target specifico nella sezione Authorizing request:

    no path: REQUEST_URI_PATH
    

    Esempio di output del log di debug:

    2021-01-12T08:09:02.604Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:09:02.605Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo1
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        no path: /echo1
    2021-01-12T08:09:02.605Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    L'output di esempio mostra il messaggio:

    no path: /echo1
    

    Questo indica che il percorso /echo1 non è stato trovato nel prodotto API ENVOY-PRODUCT-1.

  3. Se vedi il messaggio no path: REQUEST_URI_PATH nel Log di debug di Apigee Adapter per Envoy, allora è questa la causa del problema. In caso contrario, vai a Causa: nome host mancante nel prodotto API.

Risoluzione

Se l'URI della richiesta specifico non viene aggiunto al prodotto API per il target specifico, procedi nel seguente modo per risolvere il problema:

  1. Accedi alla UI di Edge.
  2. Nella scheda Pubblica > Prodotti API, fai clic sul prodotto API specifico che utilizzato per configurare Apigee Adapter per Envoy.
  3. Nella pagina Prodotti API > Nome del prodotto, fai clic su Modifica.
  4. Nel riquadro Risorse API, aggiungi l'URI della richiesta API al prodotto API.
  5. Monitora i log di Apigee Adapter per Envoy e attendi che Apigee Adapter for Envoy recupera il prodotto API aggiornato. Successivamente, invia un'altra richiesta API per verificare la correzione.

Causa: nome host mancante nel prodotto API

Questo errore si verifica se la combinazione nome host e porta di destinazione non viene aggiunta alla specifica Prodotto API utilizzato dal proxy Envoy.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che il seguente messaggio sia visualizzato per lo specifico prodotto API associato a un target specifico nella sezione Authorizing request:

    no targets: HOSTNAME:PORT
    

    Esempio di output del log di debug:

    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:12:06.019Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin1:8080
      - product: ENVOY-PRODUCT-1
        no targets: httpbin1:8080
    2021-01-12T08:12:06.020Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    L'esempio riportato sopra mostra che la combinazione di nome host e porta httpbin1:8080 non trovato nel prodotto API ENVOY-PRODUCT-1.

  3. Se i log di Apigee Adapter for Envoy contengono una voce con il messaggio no targets: HOSTNAME:PORT durante l'autorizzazione della richiesta, allora si tratta causa del problema. In caso contrario, vai a Causa: chiave API mancante nell'intestazione della richiesta.

Risoluzione

Se la combinazione nome host e porta di destinazione non viene aggiunta al prodotto API, esegui la procedendo nel seguente modo per risolvere il problema:

  1. Accedi alla UI di Edge.
  2. Nella scheda Pubblica > Prodotti API, fai clic sul prodotto API specifico che utilizzato per configurare Apigee Adapter per Envoy.
  3. Nella pagina Prodotti API > Nome del prodotto, fai clic su Modifica.
  4. Nel riquadro Destinazioni di servizio remoto Apigee, aggiungi il nome host di destinazione e e fai clic su Salva.

    Se non vedi la sezione Target di servizi remoti Apigee nell'interfaccia utente, aggiungi un attributo personalizzato al prodotto API con nome apigee-remote-service-targets e aggiungere HOSTNAME:PORT valore utilizzando l'API Edge. Ad esempio:

    curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \
        -X GET \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -H "Content-Type:application/json" \
        -d \
    {
        "apiResources": [
            "/echo",
            "/verifyApiKey"
        ],
        "approvalType": "auto",
        "attributes": [
            {
                "name": "access",
                "value": "public"
            },
            {
                "name": "apigee-remote-service-targets",
                "value": "localhost:8080"
            }
        ],
        "createdAt": 1610435989556,
        "createdBy": "---masked---",
        "description": "",
        "displayName": "ENVOY-PRODUCT-1",
        "environments": [
            "test"
        ],
        "lastModifiedAt": 1612234134060,
        "lastModifiedBy": "---masked---",
        "name": "ENVOY-PRODUCT-1",
        "proxies": [
            "remote-service"
        ],
        "scopes": []
    }
    
  5. Una volta completata l'attività precedente, monitora i log di Apigee Adapter per Envoy e attendi che Apigee Adapter per Envoy recupera il prodotto API aggiornato. Dopodiché, invia un'altra API richiedere di verificare la correzione.

Causa: chiave API mancante nell'intestazione della richiesta

Questo errore si verifica se la chiave API non viene passata come parte delle intestazioni della richiesta.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che sia visualizzato il Messaggio [missing authentication] sotto Authenticate error .

    Esempio di output del log di debug:

    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil)
    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:159
    Authenticate error: &auth.Context{Context:(*server.Handler)
    (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0,
    loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication]
    2021-01-12T08:20:31.461Z        DEBUG   server/authorization.go:205     sending denied: UNAUTHENTICATED
    2021-01-12T08:20:32.448Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header
    : :authority

    L'output di esempio mostrato sopra ha il messaggio [missing authentication]. Questo messaggio indica che la chiave API non viene passata come parte del l'intestazione della richiesta.

  3. Se i log di Apigee Adapter for Envoy contengono una voce di log con il messaggio [missing authentication]nella sezione Authenticate error , la causa del problema. In caso contrario, vai a Causa: chiave API non valida.

Risoluzione

Se l'errore [missing authentication] è stato visualizzato nella Per risolvere il problema, procedi nel seguente modo per i log di Apigee Adapter for Envoy:

  1. Verifica se il client ha inviato la chiave API utilizzando l'intestazione HTTP x-api-key in la richiesta API. In caso contrario, richiedi al client di inviare la chiave API nell'intestazione HTTP x-api-key.
  2. Controlla il file di configurazione di Apigee Adapter per Envoy e verifica che la chiave API predefinita il nome dell'intestazione x-api-key è stato modificato. Ecco un esempio:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    Nell'esempio precedente, il nome dell'intestazione della chiave API predefinita è stato modificato api-key. In questo caso, devi passare la chiave API come parte dell'intestazione api-key.

  3. Se il nome dell'intestazione della chiave API predefinita è stato modificato, richiedi al client di utilizzare Nome intestazione della chiave API, quindi invia un'altra richiesta API e verifica se il problema viene risolto.

Causa: chiave API non valida

Questo errore si verifica se viene passata una chiave API non valida nell'intestazione della richiesta.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che il messaggio venga visualizzato [permission denied] nella sezione Authenticate error. Questa informazione viene solitamente visualizzata dopo che la chiave API è stata recuperata dall'adattatore, come indicato da il messaggio fetchToken fetching: API_KEY.

    Esempio di output del log di debug:

    2021-01-12T05:01:07.198Z        DEBUG   auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil)
    2021-01-12T05:01:07.198Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: API_KEY
    2021-01-12T05:01:09.102Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header: :authority
    2021-01-12T05:01:09.831Z        DEBUG   auth/auth.go:159        Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied]
    2021-01-12T05:01:09.832Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)
    

    In questo esempio, la chiave API inviata nella richiesta API non era valida.

  3. Se i log di Apigee Adapter for Envoy contengono una voce di log con [permission denied] nella sezione Authenticate error , questo indica che la chiave API passata come parte della richiesta non è valida e rappresenta la causa del problema. In caso contrario, vai a Causa: Apigee Adapter per Envoy non è in grado di comunicare con il proxy API del servizio remoto.

Risoluzione

Se il messaggio [permission denied] viene osservato nella sezione Authenticate error dei log di Apigee Adapter for Envoy, procedi nel seguente modo. per risolvere il problema:

  1. Confronta la chiave API inviata nella richiesta API con il valore della chiave API trovato nella connessa al prodotto API.
  2. Se la chiave API utilizzata dal client non è valida, richiedi al client di inviare la chiave API valida.
  3. Se la chiave API utilizzata dal client è valida e viene ancora visualizzato un messaggio HTTP 403 errore, contatta l'assistenza Apigee Edge per effettuare ulteriori accertamenti.

Causa: Apigee Adapter per Envoy non è in grado di comunicare con il proxy API di servizio remoto

Questo errore si verifica se Apigee Adapter for Envoy non è in grado di comunicare con il telecomando service API Proxy se l'host del servizio remoto configurato non è valido.

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Attiva i log di debug come spiegato nel passaggio 2 qui sopra.
  2. Controlla i log di Apigee Adapter per Envoy e verifica che venga visualizzato il seguente messaggio:

    Error retrieving products: REQUEST_URI: no such host
    

    Esempio di output del log di debug:

    2021-01-12T08:29:06.499Z        DEBUG   product/manager.go:188  retrieving products from: https://foo/remote-service/products
    2021-01-12T08:29:06.505Z        ERROR   product/manager.go:164  Error retrieving products: GET "https://foo/remote-service/pro
    ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host
    github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
    

    In questo esempio, Apigee Adapter for Envoy non è stato in grado di comunicare con proxy API remote-service perché il nome host fornito nel proxy API del server remoto L'URL non è valido come indicato dall'errore no such host .

  3. Se i log di Apigee Adapter for Envoy contengono una voce di log con il messaggio no such host, questa è la causa del problema. In caso contrario, vai a Causa: il proxy Envoy non è in grado di comunicare con Apigee Adapter for Envoy.

Risoluzione

Se nei log di Apigee Adapter for Envoy vengono visualizzati gli errori precedenti, esegui queste operazioni: passaggi per risolvere il problema:

  1. Controlla il file di configurazione di Apigee Adapter for Envoy e verifica che le l'URL del proxy API del servizio remoto è valido.

    In caso contrario, interrompi Apigee Adapter for Envoy, correggi l'URL del proxy API del servizio remoto nella di configurazione del deployment, avvia Apigee Adapter for Envoy e invia un'altra richiesta API e e verificare la correzione.

    Configurazione di esempio:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://ORG-ENV.apigee.net/remote-service
          org_name: ORG
          env_name: ENV
          key: KEY
          secret: SECRET
          
  2. Verifica che sia stato eseguito il deployment del proxy API remote-service nell'edge pertinente completamente gestito di Google Cloud. In caso contrario, esegui il deployment del proxy API remote-service nell'istanza Edge pertinente nell'ambiente di lavoro e riprova.
  3. Verifica la connettività di rete tra Apigee Adapter per Envoy e le Endpoint del proxy API remote-service. Se è disponibile connettività di rete problemi riscontrati, contatta il team di networking e prova a risolvere il problema.

Causa: il proxy Envoy non è in grado di comunicare con Apigee Adapter for Envoy

Diagnosi

Per diagnosticare il problema, procedi nel seguente modo:

  1. Assicurati di aver abilitato i log di debug in Envoy. In caso contrario, arresta Envoy e riavvialo. attivazione dei log di debug. Quindi, invia un'altra richiesta API.

    Deployment autonomi:

    envoy -c envoy-config.yaml -l debug
    

    Deployment basati su Kubernetes/Istio:

    kubectl -n=istio-system get pods
    kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
    
  2. Controlla i log di Apigee Adapter for Envoy e verifica che sia presente una voce di log con il messaggio:
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    seguito da:

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    Esempio di output del log di debug:

    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000
    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress
    [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0
    [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests
    [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true):
    ':status', '200'
    'content-type', 'application/grpc'
    'grpc-status', '14'
    'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'

    L'esempio riportato sopra mostra che Envoy non è riuscito a comunicare con Adattatore Apigee per Envoy per il motivo connection failure.

  3. L'errore connection failure può essere dovuto a diversi motivi. Esaminiamo ciascuno degli scenari.

Scenario 1: il processo dell'adattatore non è in esecuzione

Se il processo Apigee Adapter for Envoy non è in esecuzione, questo errore può verificarsi.

  1. Verifica che il processo Apigee Adapter for Envoy sia in esecuzione eseguendo questo comando . Se il processo Apigee Adapter for Envoy è in esecuzione, il risultato del seguente dovrebbe elencarlo.
    ps -ef | grep apigee-remote-service-envoy
    
  2. Se non viene eseguito, il problema è dovuto a questo.

Risoluzione

  1. Se il processo Apigee Adapter for Envoy non è in esecuzione, avvia il Adattatore Apigee per Envoy.
  2. Effettua un'altra richiesta API e verifica se il problema è stato risolto.

Scenario 2: il processo dell'adattatore non è in ascolto sulla porta specifica

Se il processo Apigee Adapter for Envoy non è in ascolto sulla porta specifica, questo errore può verificarsi.

Se il processo Apigee Adapter for Envoy è in esecuzione, verifica che sia presente un socket in ascolto porta 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Puoi eseguire netstat per verificare:

sudo netstat -lnp | grep 5000

Esempio di output:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

Se sulla porta 5000 non è presente socket in ascolto, potrebbe essere questo il motivo.

Risoluzione

  1. Interrompi Apigee Adapter per Envoy e avvialo di nuovo.
  2. Effettua un'altra richiesta API e verifica se il problema è stato risolto.

Scenario 3: connettività di rete tra Envoy e Apigee Adapter per Envoy

  1. Verifica la connettività di rete tra Envoy e Apigee Adapter per Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    Se Telnet potesse stabilire una connessione TCP ad Apigee Adapter per Envoy verrà visualizzato un output simile al seguente:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. Se noti l'errore Connection timed out con telnet, significa che si è verificato un problema di connettività di rete tra Envoy e Apigee Adapter for Envoy.

Risoluzione

Se riscontri problemi di connettività di rete tra Envoy e Apigee Adapter for Envoy, contatta il team di networking e prova a risolvere il problema.

Se il problema persiste, vai a Devi raccogliere dati diagnostici.

Raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli la seguente diagnostica informazioni e contatta l'assistenza Apigee Edge:

  1. Prodotto Apigee utilizzato:

    Esempio: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

  2. Organizzazione e ambiente Apigee
  3. Definizione del prodotto API letta utilizzando l'API Edge:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    Riferimento: API Apigee Edge

  4. Avvia una sessione di traccia nel proxy API remote-service utilizzando la UI di Apigee Edge. Riproduci il problema e condividi il file XML della sessione di traccia.

    Riferimento: Utilizzo dello strumento Trace | Apigee Edge

  5. Log di Apigee Adapter per Envoy (log completi relativi al periodo di tempo specificato)

    Deployment autonomi:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    Deployment basati su Kubernetes/Istio:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. Una richiesta API inviata al proxy Envoy utilizzando un comando curl (l'output completo del comando curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. Una richiesta API inviata al servizio di destinazione utilizzando un comando curl (il output del comando curl):
    curl -v TARGET_SERVICE_ENDPOINT