Questo documento illustra le tecniche per la risoluzione dei problemi per Endpoints su Google Kubernetes Engine (GKE) e Kubernetes.
Non riuscita in kubectl create -f gke.yaml
Se viene visualizzato il messaggio di errore Failed in kubectl create -f gke.yaml
, segui questi passaggi:
Autorizza
gcloud
:gcloud auth login gcloud auth application-default login
Creare un cluster. Puoi utilizzare il seguente
gcloud
comando o creare un cluster utilizzando la console Google Cloud.gcloud container clusters create CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.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 richieste all'API, ma non vedi metriche o log sugli Endpoint > nella pagina Servizi nel nella console Google Cloud, segui questi passaggi:
- Controlla che tutti i servizi richiesti siano attivi.
- Verifica che tutte le autorizzazioni richieste siano state 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:
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
eecho
.Per visualizzare i log in un pod, usa
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
Dove
POD_NAME
eCONTAINER_NAME
vengono restituiti dal comandokubectl get pod
nel passaggio precedente. Ad esempio:kubectl logs esp-echo-174578890-x09gl -c esp
Verifica del nome del servizio
Se viene visualizzato il messaggio di erroreFetching service config failed
, verifica che il nome del servizio specificato nel campo --service
del file manifest del deployment (chiamato file deployment.yaml
) corrisponda al nome host nella proprietà name
specificata nel file YAML di configurazione dell'API gRPC (chiamato file api_config.yaml
).
Se il nome errato si trova nel file deployment.yaml
:
Apri il file
deployment.yaml
e vai alla sezione configurata per 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 dell'host specificato nella proprietàname
nel fileapi_config.yaml
e salva ildeployment.yaml
.Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Se il nome errato si trova nel file api_config.yaml
:
Recuperare il nome del servizio configurato per l'uso da parte di Endpoints.
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.Apri il file
api_config.yaml
, correggi il nome host nella proprietàname
e salva il file.Esegui il deployment della configurazione del servizio aggiornata:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
Attendi il completamento del deployment della configurazione del servizio.
Avvia il servizio Kubernetes:
kubectl create -f deployment.yaml
Controllo dei file di configurazione in corso...
Usa
ssh
per connetterti al pod utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del contenitore ePOD_NAME con il nome del pod. Nella directory
etc/nginx/endpoints/
, controlla la presenza di errori nei seguenti file di configurazione:nginx.conf
- Il file di configurazionenginx
con le direttive ESPservice.jso
- Il file di configurazione del servizio
Accesso alla pagina Stato endpoint
Se hai impostato rollout_strategy
su managed
quando hai avviato ESP e devi conoscere l'ID configurazione utilizzato da un'istanza di ESP, le informazioni sono disponibili nella pagina Stato endpoint.
Per accedere alla pagina Stato endpoint:
Usa
ssh
per connetterti al pod utilizzandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sostituisci
CONTAINER_NAME
con il nome del tuo container ePOD_NAME
con il nome del tuo pod.Installa
curl
.Inserisci quanto segue:
curl http://localhost:8090/endpoints_status
Viene visualizzato qualcosa di simile al seguente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Il valore in rolloutId
è l'ID configurazione del servizio utilizzato dall'ESP. Per assicurarti che ESP utilizzi la stessa configurazione di Endpoints, consulta Ottenere il nome del servizio e l'ID configurazione.