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 especificado no campo --service no ficheiro de manifesto de implementação (denominado ficheiro deployment.yaml) corresponde ao nome do anfitrião na propriedade name especificada no ficheiro YAML de configuração da API gRPC (denominado ficheiro api_config.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 do anfitrião especificado na propriedade name no ficheiro api_config.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 api_config.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 api_config.yaml e corrija o nome do anfitrião na propriedade name e guarde o ficheiro.

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

    gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
    

    Aguarde pela implementação bem-sucedida da configuração do serviço.

  5. 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.