Solução de problemas do Cloud Endpoints no GKE

Neste documento, apresentamos as técnicas de solução de problemas para implantações do Cloud Endpoints no Google Kubernetes Engine (GKE) e no Kubernetes.

Falha em kubectl create -f gke.yaml

Se você vir a mensagem de erro Failed in kubectl create -f gke.yaml, siga as seguintes etapas:

  1. Autorize gcloud:

    gcloud auth login
    gcloud auth application-default login
    
  2. Crie um cluster. É possível usar o seguinte comando gcloud ou criar um cluster usando o Console do Google Cloud Platform.

    gcloud container clusters create CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  3. Consiga credenciais para o cluster e as disponibilize para kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    

Métricas e registros do Endpoints não são exibidos

Se você consegue enviar solicitações à sua API com sucesso, mas não visualiza métricas ou registros na página Endpoints > Serviços no Console do GCP, verifique se o cluster tem os escopos do OAuth necessários da seguinte forma:

  1. No Console do GCP, acesse a página de clusters do Kubernetes.

    Acessar a página de clusters do Kubernetes

  2. Selecione seu cluster na lista.

  3. Clique em Permissões.

  4. Confirme se o Service Control e o Service Management têm os escopos do OAuth a seguir:

    • Service Control: ativado
    • Service Management: somente leitura

    Se o Service Control e o Gerenciamento de Serviço não tiverem os escopos OAuth necessários, será preciso criar outro cluster com os escopos necessários ou seguir as etapas em Como atualizar escopos da VM do GKE com tempo de inatividade inexistente.

    Para saber mais informações, consulte O que são os escopos de acesso?

Como acessar registros do Extensible Service Proxy

Para acessar os registros do Extensible Server Proxy (ESP) e diagnosticar problemas, use o kubectl da seguinte forma:

  1. Consiga 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 contêineres: esp e echo.

  2. Para ver os registros em um pod, use kubectl logs:

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    em que POD_NAME e CONTAINER_NAME são retornados pelo comando kubectl get pod, na etapa anterior. Exemplo:

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

Como verificar o nome do serviço

Caso seja exibida a mensagem de erro Fetching service config failed, verifique se o nome do serviço especificado no campo --service do arquivo de manifesto da implantação, mencionado como deployment.yaml, corresponde ao nome do host na propriedade name especificada no arquivo YAML de configuração da API gRPC, chamado de api_config.yaml.

Se o nome incorreto estiver no arquivo deployment.yaml:

  1. Abra o arquivo deployment.yaml e vá para a seção configurada para o contêiner ESP. 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 host especificado na propriedade name no arquivo api_config.yaml, então salve o deployment.yaml.

  2. Inicie o serviço do Kubernetes:

      kubectl create -f deployment.yaml
    

Se o nome incorreto estiver no arquivo api_config.yaml:

  1. Solicite o nome do serviço em que o Endpoints foi configurado para uso.

  2. Exclua o serviço:

    gcloud endpoints services delete SERVICE_NAME
    

    Substitua SERVICE_NAME pelo nome da etapa anterior. O serviço é excluído do GCP em 30 dias. Não é possível reutilizar o nome do serviço durante esse período.

  3. Abra o arquivo api_config.yaml, corrija o nome do host na propriedade name e salve o arquivo.

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

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

    Aguarde até que a implantação da configuração do serviço seja concluída com sucesso.

  5. Inicie o serviço do Kubernetes:

      kubectl create -f deployment.yaml
    

Como verificar arquivos de configuração

  1. Use o ssh para se conectar ao pod usando o kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Substitua CONTAINER_NAME pelo nome do contêiner e POD_NAME pelo nome do pod.

  2. No diretório etc/nginx/endpoints/, verifique se há erros nos arquivos de configuração a seguir.

    • nginx.conf - o arquivo de configuração nginx com diretivas ESP
    • service.jso - o arquivo de configuração de serviço

Como acessar a página de status do Endpoints

Ao iniciar o ESP, caso você configure a rollout_strategy para managed e precise localizar o código de configuração que estiver sendo usado por ele, a página de status do Endpoints terá essa informação.

Veja como acessar a página de status do Endpoints:

  1. Use o ssh para se conectar ao pod usando o kubectl:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Substitua CONTAINER_NAME pelo nome do contêiner e POD_NAME pelo nome do pod.

  2. Instale o curl.

  3. Digite as informações a seguir:

      curl http://localhost:8090/endpoints_status
    

    Isso exibe algo semelhante a:

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

O valor no rolloutId é o código de configuração do serviço a ser usado pelo ESP. Para garantir que o ESP use a mesma configuração que o Cloud Endpoints, consulte Como conseguir o nome e a ID de configuração do serviço.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Cloud Endpoints com gRPC
Precisa de ajuda? Acesse nossa página de suporte.