Risoluzione dei problemi

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Errore 404 (non trovato) di Istio

Il debug di un errore 404 (Non trovato) su Istio può essere frustrante. Spero che queste informazioni ti aiutino a capire dove potrebbero esserci dei problemi.

Conflitto con il gateway jolly

Può esistere una sola definizione di gateway che utilizza un valore hosts jolly "*". Se hai eseguito il deployment di altri elementi che includono un gateway con caratteri jolly, le chiamate client non andranno a buon fine con uno stato 404.

Esempio:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

In questo caso, dovrai eliminare o modificare uno dei gateway in conflitto.

Cerca dove il percorso non va a buon fine

Istio è come una cipolla (o forse un orco), ha strati. Un modo sistematico per eseguire il debug di un errore 404 è procedere dal target verso l'esterno.

Il carico di lavoro di backend

Verifica di poter accedere al carico di lavoro dal sidecar:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

Il sidecar di backend

Imposta l'indirizzo del servizio e ricevi l'indirizzo IP del pod del workload.

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

Accedi al carico di lavoro tramite il sidecar:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

In alternativa, se Istio mTLS è abilitato:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

Il gateway (o un sidecar frontend)

Accedi al servizio dal gateway:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

In alternativa, se Istio mTLS è abilitato:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

Dati e analisi mancanti

Se non visualizzi i dati e le analisi nell'interfaccia utente di Analytics, prendi in considerazione le seguenti possibili cause:

  • L'importazione di Apigee può essere ritardata di alcuni minuti
  • Il log di accesso gRPC di Envoy non è configurato correttamente
  • Envoy non riesce a raggiungere il servizio remoto
  • Il caricamento del servizio remoto non riesce

Chiave API mancante o non valida non rifiutata

Se la convalida della chiave API non funziona correttamente, valuta le seguenti possibili cause:

Proxy diretto

Controlla la configurazione di ext-authz.

Sidecar
  • Assicurati che il listener sia configurato per l'intercettazione.
  • Controlla la configurazione di ext-authz.

Le richieste non valide vengono controllate e consentite

  • Servizio remoto configurato per il fail open
  • Envoy non configurato per i controlli RBAC

Per informazioni su come risolvere questi problemi, consulta il seguente argomento della documentazione di Envoy: Autorizzazione esterna e le informazioni sulla proprietà failure_mode_allow. Questa proprietà consente di modificare il comportamento del filtro in caso di errori.

JWT mancante o non valido non viene rifiutato

La causa probabile è che il filtro JWT di Envoy non è configurato.

Chiave API valida non funziona

Cause probabili

  • Envoy non riesce a raggiungere il servizio remoto
  • Le tue credenziali non sono valide
  • Prodotto API Apigee non configurato per target e env
  • Envoy non è a conoscenza del prodotto API Apigee

Passaggi per la risoluzione dei problemi

Controllare il prodotto API su Apigee

  • È abilitato per il tuo ambiente (test o produzione)?

    Il prodotto deve essere associato allo stesso ambiente del servizio remoto.

  • È associato al target a cui stai accedendo?

    Controlla la sezione Target dei servizi remoti Apigee. Ricorda che il nome del servizio deve essere un nome host completo. Se si tratta di un servizio Istio, il nome sarà simile a helloworld.default.svc.cluster.localcode>, che rappresenta il servizio helloworld nello spazio dei nomi default.

  • Il percorso della risorsa corrisponde alla tua richiesta?

    Ricorda che un percorso come / o /** corrisponderà a qualsiasi percorso. Puoi anche utilizzare i caratteri jolly "*" o "**" per la corrispondenza.

  • Hai un'app sviluppatore?

    Il prodotto API deve essere associato a un'app per sviluppatori per consentirne il controllo delle chiavi.

  • L'attributo operationConfigType del prodotto API Apigee è impostato su remoteservice?

    Controlla la configurazione del prodotto API utilizzando l'API di gestione Apigee e verifica che operationConfigType sia impostato su remoteservice.

Controlla la tua richiesta

  • Stai passando la Consumer Key in x-api-key header

    Esempio:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • Utilizzi una Consumer Key valida?

    Assicurati che le credenziali dell'app che stai utilizzando siano approvate per il tuo prodotto API.

Controllare i log del servizio remoto

  1. Avvia il servizio remoto con il logging in debug level. Consulta Impostare i livelli di log del servizio remoto.

    Utilizza l'opzione -l debug nella riga di comando. Ad esempio:

    apigee-remote-service-envoy -l debug
  2. Prova ad accedere al target e controlla i log

    Nei log, cerca una riga simile alla seguente:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    

Impostazione dei livelli di log del servizio remoto

Utilizzando un flag della riga di comando, puoi avviare il servizio remoto in una delle seguenti modalità di debug, in ordine di livello di dettaglio, dove debug è il più dettagliato e error è il meno dettagliato:

  • debug: la modalità di logging più dettagliata.
  • info: il valore predefinito.
  • warn
  • error - Modalità di logging meno dettagliata.

Ad esempio, per avviare il servizio a livello debug:

apigee-remote-service-envoy -l debug