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 loginCrear un clúster Puedes usar el siguiente comando de
gcloudo crear un clúster con la consola deGoogle Cloud .gcloud container clusters create CLUSTER_NAME
Reemplaza
CLUSTER_NAMEpor 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 > Services de la consola deGoogle 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 21sEl nombre del pod es
esp-echo-174578890-x09gly tiene dos contenedores:espyecho.Para ver los registros en un pod, usa
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
En el paso anterior,
POD_NAMEyCONTAINER_NAMEse 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.yamly 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_NAMEpara que coincida con el nombre del campohostenopenapi.yamly 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_NAMEpor el nombre que figura en el paso anterior. El servicio tarda 30 días en borrarse deGoogle Cloud. No puedes volver a usar el nombre del servicio durante este plazo.Abre el archivo
openapi.yaml, corrige el nombre en el campohosty guarda el archivo.Implementa la configuración de servicio actualizada:
gcloud endpoints services deploy openapi.yamlEspera 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
sshpara conectarte al pod conkubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Reemplaza
CONTAINER_NAMEpor 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ónnginxcon 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
sshpara conectarte al pod conkubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Reemplaza
CONTAINER_NAMEpor el nombre de tu contenedor yPOD_NAMEpor el nombre de tu pod.Instala
curl.Ingresa lo siguiente:
curl http://localhost:8090/endpoints_statusVerá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.