En este documento se presentan técnicas para solucionar problemas de implementaciones de Endpoints en Google Kubernetes Engine (GKE) y Kubernetes.
No se ha podido kubectl create -f gke.yaml
Si aparece el mensaje de error Failed in kubectl create -f gke.yaml, sigue estos pasos:
Autorizar
gcloud:gcloud auth login gcloud auth application-default loginCrea un clúster. Puedes usar el siguiente
gcloudcomando o crear un clúster con la Google Cloud consola.gcloud container clusters create CLUSTER_NAME
Sustituye
CLUSTER_NAMEpor el nombre de tu clúster.Obtén las credenciales de tu clúster y ponlas a disposición de
kubectl:gcloud container clusters get-credentials CLUSTER_NAME
No se muestran las métricas ni los registros de los endpoints
Si puedes enviar solicitudes a tu API correctamente, pero no ves ninguna métrica ni registro en la página Endpoints > Services de la consolaGoogle Cloud , sigue estos pasos:
- Comprueba que todos los servicios obligatorios estén habilitados.
- Comprueba que se hayan concedido todos los permisos necesarios.
Acceder a los registros de Extensible Service Proxy
Si necesitas acceder a los registros de Extensible Service Proxy (ESP) para diagnosticar problemas, usa kubectl de la siguiente manera:
Obtener el nombre del pódcast:
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 de un pod, usa
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
POD_NAMEyCONTAINER_NAMEse devuelven del comandokubectl get poddel paso anterior. Por ejemplo:kubectl logs esp-echo-174578890-x09gl -c esp
Verificar el nombre del servicio
Si aparece el mensaje de errorFetching service config failed, compruebe que el nombre del servicio que ha especificado en el campo --service del archivo de manifiesto de la implementación (denominado archivo deployment.yaml) coincida con el nombre del campo host del documento de OpenAPI (denominado archivo openapi.yaml).
Si el nombre incorrecto está en el archivo deployment.yaml:
Abre el archivo
deployment.yamly ve a la sección configurada para el contenedor de 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 incorrecto está en el archivo openapi.yaml:
Obtén el nombre del servicio que se configuró para usar Endpoints.
Elimina el servicio:
gcloud endpoints services delete SERVICE_NAME
Sustituye
SERVICE_NAMEpor el nombre del paso anterior. El servicio tarda 30 días en eliminarse deGoogle Cloud. No podrás volver a usar el nombre del servicio durante ese tiempo.Abre el archivo
openapi.yaml, corrige el nombre en el campohosty guarda el archivo.Implementa la configuración del servicio actualizada:
gcloud endpoints services deploy openapi.yamlEspera a que la configuración del servicio se implemente correctamente.
Inicia el servicio de Kubernetes:
kubectl create -f deployment.yaml
Comprobar archivos de configuración
Usa
sshpara conectarte al pod mediantekubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sustituye
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 directivas ESPservice.jso: el archivo de configuración del servicio
Acceder a la página de estado de Endpoints
Si has definido rollout_strategy como managed al iniciar ESP y necesitas saber el ID de configuración que está usando una instancia de ESP, puedes consultar la página de estado de Endpoints.
Para acceder a la página de estado de Endpoints, sigue estos pasos:
Usa
sshpara conectarte al pod mediantekubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sustituye
CONTAINER_NAMEpor el nombre de tu contenedor yPOD_NAMEpor el nombre de tu pod.Instala
curl.Introduce lo siguiente:
curl http://localhost:8090/endpoints_statusSe muestra algo similar a lo siguiente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
El valor de rolloutId es el ID de configuración del servicio que usa ESP. Para asegurarte de que ESP usa la misma configuración que Endpoints, consulta Obtener el nombre del servicio y el ID de configuración.