Risoluzione dei problemi di Cloud Endpoints in GKE

Questo documento illustra le tecniche per la risoluzione dei problemi per i deployment di endpoint su Google Kubernetes Engine (GKE) e Kubernetes.

Operazione non riuscita tra kubectl create -f gke.yaml

Se viene visualizzato il messaggio di errore Failed in kubectl create -f gke.yaml, procedi nel seguente modo:

  1. Autorizza gcloud:

    gcloud auth login
    gcloud auth application-default login
    
  2. Creare un cluster. Puoi utilizzare il seguente comando gcloud oppure creare un cluster utilizzando la console Google Cloud.

    gcloud container clusters create CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del cluster.

  3. Recupera le credenziali per il tuo cluster e rendile disponibili a kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    

Le metriche e i log degli endpoint non vengono visualizzati

Se riesci a inviare richieste alla tua API, ma non vedi metriche o log nella pagina Endpoint > Servizi della console Google Cloud, segui questi passaggi:

  1. Verifica che tutti i servizi richiesti siano abilitati.
  2. Verifica che tutte le autorizzazioni richieste siano concesse.

Accesso ai log da Extensible Service Proxy

Se devi accedere ai log di Extensible Service Proxy (ESP) per diagnosticare i problemi, utilizza kubectl come segue:

  1. Ottieni il nome del pod:

    kubectl get pod
    
    NAME                       READY     STATUS    RESTARTS   AGE
    esp-echo-174578890-x09gl   2/2       Running   2          21s
    

    Il nome del pod è esp-echo-174578890-x09gl e ha due container: esp e echo.

  2. Per visualizzare i log in un pod, utilizza kubectl logs:

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    Dove POD_NAME e CONTAINER_NAME vengono restituiti dal comando kubectl get pod nel passaggio precedente. Ad esempio:

      kubectl logs esp-echo-174578890-x09gl -c esp
    

Verifica del nome del servizio in corso...

Se visualizzi il messaggio di errore Fetching service config failed, verifica che il nome del servizio specificato nel campo --service del file manifest del deployment (indicato come file deployment.yaml) corrisponda al nome nel campo host del documento OpenAPI (definito file openapi.yaml).

Se il nome errato è presente nel file deployment.yaml:

  1. Apri il file deployment.yaml e vai alla sezione configurata per il container ESP. Ad esempio:

    containers:
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:1
      args: [
        "--http_port=8081",
        "--backend=127.0.0.1:8080",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed"
      ]
    

    Modifica SERVICE_NAME in modo che corrisponda al nome nel campo host in openapi.yaml e salva il file deployment.yaml.

  2. Avvia il servizio Kubernetes:

      kubectl create -f deployment.yaml
    

Se il nome errato è presente nel file openapi.yaml:

  1. Recupera il nome del servizio che è stato configurato per l'utilizzo da parte di Endpoints.

  2. Elimina il servizio:

    gcloud endpoints services delete SERVICE_NAME
    

    Sostituisci SERVICE_NAME con il nome del passaggio precedente. L'eliminazione del servizio da Google Cloud richiede 30 giorni. Durante questo periodo non puoi riutilizzare il nome del servizio.

  3. Apri il file openapi.yaml, correggi il nome nel campo host e salva il file.

  4. Esegui il deployment della configurazione del servizio aggiornata:

      gcloud endpoints services deploy openapi.yaml
    
  5. Attendi che il deployment della configurazione del servizio sia stato eseguito correttamente.

  6. Avvia il servizio Kubernetes:

      kubectl create -f deployment.yaml
    

Controllo dei file di configurazione in corso...

  1. Usa ssh per connetterti al pod utilizzando kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Sostituisci CONTAINER_NAME con il nome del contenitore e POD_NAME con il nome del pod.

  2. Nella directory etc/nginx/endpoints/, verifica la presenza di errori nei seguenti file di configurazione:

    • nginx.conf- Il file di configurazione nginx con istruzioni ESP
    • service.jso: il file di configurazione del servizio

Accesso alla pagina dello stato di Endpoints

Se hai impostato rollout_strategy su managed quando hai avviato ESP e devi scoprire l'ID di configurazione utilizzato da un'istanza di ESP, la pagina dello stato Endpoints contiene le informazioni.

Per accedere alla pagina di stato di Endpoints:

  1. Usa ssh per connetterti al pod utilizzando kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Sostituisci CONTAINER_NAME con il nome del contenitore e POD_NAME con il nome del pod.

  2. Installa curl.

  3. Inserisci quanto segue:

      curl http://localhost:8090/endpoints_status
    

    Viene visualizzato in modo simile al seguente:

    "serviceConfigRollouts": {
        "rolloutId": "2017-08-09r27",
        "percentages": {
             "2017-08-09r26": "100"
        }
    }
    

Il valore in rolloutId è l'ID di configurazione del servizio utilizzato da ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta Recupero del nome del servizio e dell'ID di configurazione.