Risoluzione dei problemi di Cloud Endpoints in GKE

Questo documento presenta tecniche di risoluzione dei problemi per i deployment di Endpoints su Google Kubernetes Engine (GKE) e Kubernetes.

Errore in kubectl create -f gke.yaml

Se visualizzi il messaggio di errore Failed in kubectl create -f gke.yaml, segui questa procedura:

  1. Autorizza gcloud:

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

    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 per kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    

Le metriche e i log degli endpoint non vengono visualizzati

Se riesci a inviare correttamente le richieste alla tua API, ma non visualizzi metriche o log nella pagina Endpoints > Servizi nella consoleGoogle Cloud , segui questi passaggi:

  1. Controlla che tutti i servizi richiesti siano attivi.
  2. Controlla che siano state concesse tutte le autorizzazioni richieste.

Accesso ai log da Extensible Service Proxy

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

  1. Recupera 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

Se visualizzi il messaggio di errore Fetching service config failed, verifica che il nome del servizio specificato nel campo --service del file manifest di deployment (denominato file deployment.yaml) corrisponda al nome host nella proprietà name specificata nel file YAML di configurazione dell'API gRPC (denominato file api_config.yaml).

Se il nome errato si trova nel file deployment.yaml:

  1. Apri il file deployment.yaml e vai alla sezione configurata per il contenitore 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 host specificato nella proprietà name del file api_config.yaml e salva il file deployment.yaml.

  2. Avvia il servizio Kubernetes:

      kubectl create -f deployment.yaml
    

Se il nome errato si trova nel file api_config.yaml:

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

  2. Elimina il servizio:

    gcloud endpoints services delete SERVICE_NAME
    

    Sostituisci SERVICE_NAME con il nome del passaggio precedente. Sono necessari 30 giorni per l'eliminazione del servizio da Google Cloud. Durante questo periodo non potrai riutilizzare il nome del servizio.

  3. Apri il file api_config.yaml, correggi il nome host nella proprietà name e salva il file.

  4. Esegui il deployment della configurazione del servizio aggiornata:

    gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
    

    Attendi il deployment della configurazione del servizio.

  5. Avvia il servizio Kubernetes:

      kubectl create -f deployment.yaml
    

Controllo dei file di configurazione

  1. Utilizza ssh per connetterti al pod utilizzando kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Sostituisci CONTAINER_NAME con il nome del tuo container e POD_NAME con il nome del tuo pod.

  2. Nella directory etc/nginx/endpoints/, controlla i seguenti file di configurazione per verificare la presenza di errori:

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

Accedere alla pagina di stato di Endpoints

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

Per accedere alla pagina di stato di Endpoints:

  1. Utilizza ssh per connetterti al pod utilizzando kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Sostituisci CONTAINER_NAME con il nome del tuo container e POD_NAME con il nome del tuo pod.

  2. Installa curl.

  3. Inserisci quanto segue:

      curl http://localhost:8090/endpoints_status
    

    Viene visualizzato un messaggio simile al seguente:

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

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