En este documento, se presentan técnicas de solución de problemas para implementaciones de Endpoints en Google Kubernetes Engine (GKE) y Kubernetes.
Errores en kubectl create -f gke.yaml
Si ves el mensaje de error Failed in kubectl create -f gke.yaml
, sigue estos pasos:
Autoriza
gcloud
:gcloud auth login gcloud auth application-default login
Crea un clúster. Puedes usar el siguiente comando de
gcloud
o crear un clúster con Google Cloud Console.gcloud container clusters create CLUSTER_NAME
Reemplaza
CLUSTER_NAME
por el nombre del clúster.Obtén credenciales para el clúster y haz que estén disponibles para
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
No se muestran las métricas y los registros de Endpoints
Si puedes enviar solicitudes a tu API correctamente, pero no ves ninguna métrica o registro en la página Endpoints > Servicios de la consola de Google Cloud, sigue estos pasos:
- Verifica que todos los servicios obligatorios estén habilitados.
- Comprueba que todos los permisos necesarios estén otorgados.
Accede a registros desde un proxy de servicio extensible
Si necesitas acceder a los registros del proxy de servicio extensible (ESP) para diagnosticar problemas, usa kubectl
de la siguiente manera:
Obtén el nombre del pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21s
El nombre del pod es
esp-echo-174578890-x09gl
y tiene dos contenedores:esp
yecho
.Para ver los registros en un pod, usa
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
En el paso anterior,
POD_NAME
yCONTAINER_NAME
se muestran desde el comandokubectl get pod
. Por ejemplo:kubectl logs esp-echo-174578890-x09gl -c esp
Verifica el nombre del servicio
Si ves el mensaje de errorFetching service config failed
, verifica que el nombre del servicio que especificaste en el campo --service
, en el archivo de manifiesto de implementación (denominado archivo deployment.yaml
), coincida con el nombre en el campo host
en el documento de OpenAPI (denominado archivo openapi.yaml
).
Si el nombre incorrecto está en el archivo deployment.yaml
, haz lo siguiente:
Abre el archivo
deployment.yaml
y ve a la sección configurada para el contenedor ESP. Por ejemplo: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" ]
Cambia
SERVICE_NAME
para que coincida con el nombre del campohost
enopenapi.yaml
y guarda el archivodeployment.yaml
.Inicia el servicio de Kubernetes:
kubectl create -f deployment.yaml
Si el nombre en el archivo openapi.yaml
no es correcto, haz lo siguiente:
Obtén el nombre de servicio que debe usar Endpoints según su configuración.
Borra el servicio:
gcloud endpoints services delete SERVICE_NAME
Reemplaza
SERVICE_NAME
por el nombre que figura en el paso anterior. Borrar el servicio de Google Cloud demora 30 días. No puedes volver a usar el nombre del servicio durante este plazo.Abre el archivo
openapi.yaml
, corrige el nombre en el campohost
y guarda el archivo.Implementa la configuración de servicio actualizada:
gcloud endpoints services deploy openapi.yaml
Espera a que la configuración de servicio se implemente correctamente.
Inicia el servicio de Kubernetes:
kubectl create -f deployment.yaml
Verifica los archivos de configuración
Usa
ssh
para conectarte al pod conkubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Reemplaza
CONTAINER_NAME
por el nombre de tu contenedor yPOD_NAME por el nombre de tu pod. En el directorio
etc/nginx/endpoints/
, comprueba si hay errores en los siguientes archivos de configuración:nginx.conf
: el archivo de configuraciónnginx
con las directivas del ESPservice.jso
: el archivo de configuración del servicio
Acceder a la página de estado de Endpoints
Si configuraste rollout_strategy
como managed
cuando iniciaste el ESP y necesitas encontrar el ID de configuración que usa una instancia del ESP, la página de estado de Endpoints tiene la información.
Para acceder a la página de estado de Endpoints, haz lo siguiente:
Usa
ssh
para conectarte al pod conkubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Reemplaza
CONTAINER_NAME
por el nombre de tu contenedor yPOD_NAME
por el nombre de tu pod.Instala
curl
.Ingresa lo siguiente:
curl http://localhost:8090/endpoints_status
Verás algo similar a lo siguiente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
El valor en rolloutId
es el ID de configuración de servicio que usa el ESP. Para garantizar que el ESP esté usando la misma configuración que Endpoints, consulta Obtén el nombre del servicio y el ID de configuración.