Resolução de problemas do Cloud Endpoints no GKE

Este documento apresenta técnicas de resolução de problemas para implementações do Endpoints no Google Kubernetes Engine (GKE) e no Kubernetes.

Falha em kubectl create -f gke.yaml

Se vir a mensagem de erro Failed in kubectl create -f gke.yaml, siga os passos seguintes:

  1. Autorizar gcloud:

    gcloud auth login gcloud auth application-default login 
  2. Crie um cluster. Pode usar o seguinte gcloudcomando ou criar um cluster através da Google Cloud consola.

     gcloud container clusters create CLUSTER_NAME 

    Substitua CLUSTER_NAME pelo nome do cluster.

  3. Obtenha credenciais para o seu cluster e disponibilize-as a kubectl:

     gcloud container clusters get-credentials CLUSTER_NAME 

As métricas e os registos dos pontos finais não são apresentados

Se conseguir enviar pedidos com êxito para a sua API, mas não vir métricas nem registos na página Endpoints > Serviços naGoogle Cloud consola, siga estes passos:

  1. Verifique se todos os serviços necessários estão ativados.
  2. Verifique se todas as autorizações necessárias foram concedidas.

Aceder aos registos a partir do proxy de serviço extensível

Se precisar de aceder aos registos do proxy de serviço extensível (ESP) para diagnosticar problemas, use kubectl da seguinte forma:

  1. Obtenha o nome do pod:

    kubectl get pod  NAME                       READY     STATUS    RESTARTS   AGE esp-echo-174578890-x09gl   2/2       Running   2          21s 

    O nome do pod é esp-echo-174578890-x09gl e tem dois contentores: esp e echo.

  2. Para ver os registos num pod, use kubectl logs:

     kubectl logs POD_NAME -c CONTAINER_NAME 

    Onde POD_NAME e CONTAINER_NAME são devolvidos pelo comando kubectl get pod no passo anterior. Por exemplo:

      kubectl logs esp-echo-174578890-x09gl -c esp 

Validar o nome do serviço

Se vir a mensagem de erro Fetching service config failed, verifique se o nome do serviço que especificou no campo --service no ficheiro de manifesto de implementação (denominado ficheiro deployment.yaml) corresponde ao nome no campo host no seu documento OpenAPI (denominado ficheiro openapi.yaml).

Se o nome incorreto estiver no ficheiro deployment.yaml:

  1. Abra o ficheiro deployment.yaml e aceda à secção configurada para o contentor do ESP. Por exemplo:

     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"   ] 

    Altere SERVICE_NAME para que corresponda ao nome no campo host no elemento openapi.yaml e guarde o ficheiro deployment.yaml.

  2. Inicie o serviço Kubernetes:

      kubectl create -f deployment.yaml 

Se o nome incorreto estiver no ficheiro openapi.yaml:

  1. Obtenha o nome do serviço que o Endpoints foi configurado para usar.

  2. Elimine o serviço:

     gcloud endpoints services delete SERVICE_NAME 

    Substitua SERVICE_NAME pelo nome do passo anterior. A eliminação do serviço de Google Clouddemora 30 dias. Não pode reutilizar o nome do serviço durante este período.

  3. Abra o ficheiro openapi.yaml, corrija o nome no campo host e guarde o ficheiro.

  4. Implemente a configuração do serviço atualizada:

      gcloud endpoints services deploy openapi.yaml 
  5. Aguarde pela implementação bem-sucedida da configuração do serviço.

  6. Inicie o serviço Kubernetes:

      kubectl create -f deployment.yaml 

Verificar ficheiros de configuração

  1. Use o ssh para se ligar ao pod através de kubectl:

     kubectl exec -ti -c CONTAINER_NAME POD_NAME bash 

    Substitua CONTAINER_NAME pelo nome do seu contentor e POD_NAME pelo nome do seu pod.

  2. No diretório etc/nginx/endpoints/, verifique se existem erros nos seguintes ficheiros de configuração:

    • nginx.conf- O ficheiro de configuração nginx com diretivas ESP
    • service.jso: o ficheiro de configuração do serviço

Aceder à página Estado dos endpoints

Se definiu rollout_strategy como managed quando iniciou o ESP, e precisar de saber o ID de configuração que uma instância do ESP está a usar, a página de estado dos Endpoints tem as informações.

Para aceder à página Estado dos endpoints:

  1. Use o ssh para se ligar ao pod através de kubectl:

     kubectl exec -ti -c CONTAINER_NAME POD_NAME bash 

    Substitua CONTAINER_NAME pelo nome do seu contentor e POD_NAME pelo nome do seu pod.

  2. Instale curl.

  3. Introduza os seguintes dados:

      curl http://localhost:8090/endpoints_status 

    Apresenta algo semelhante ao seguinte:

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

O valor em rolloutId é o ID de configuração do serviço que o ESP está a usar. Para se certificar de que o ESP está a usar a mesma configuração que o Endpoints, consulte o artigo Obter o nome do serviço e o ID da configuração.