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 estas etapas:

  1. Autorize gcloud:

    gcloud auth login
    gcloud auth application-default login
    
  2. Crie um cluster. Você pode usar o comando gcloud a seguir ou criar um cluster usando o Console do Google Cloud.

    gcloud container clusters create CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

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

    gcloud container clusters get-credentials CLUSTER_NAME
    

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

Se você conseguir enviar solicitações para a API, mas não visualizar métricas ou registros na página Endpoints > Services no console do Google Cloud, siga estas etapas:

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

Como acessar registros do Extensible Service Proxy

Se você precisar acessar os registros do Extensible Service Proxy (ESP) para diagnosticar problemas, use kubectl desta 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 ele 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 a mensagem de erro Fetching service config failed seja exibida, verifique se o nome de serviço especificado no campo --service do arquivo de manifesto de implantação (chamado de arquivo deployment.yaml) corresponde ao nome do host na propriedade name especificada no arquivo YAML de configuração da API gRPC (chamado de arquivo api_config.yaml).

Se o arquivo deployment.yaml tiver o nome incorreto:

  1. Abra o arquivo deployment.yaml e vá para a seção configurada para o contêiner do 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 do arquivo api_config.yaml e salve o arquivo deployment.yaml.

  2. Inicie o serviço do Kubernetes:

      kubectl create -f deployment.yaml
    

Se o arquivo api_config.yaml tiver o nome incorreto:

  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 Google Cloud em 30 dias. Não é possível reutilizar o nome do serviço durante esse período.

  3. Abra o arquivo api_config.yaml e corrija o nome do host na propriedade name. Depois, 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 ssh para se conectar ao pod usando 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 seguintes arquivos de configuração:

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

Como acessar a página de status do Endpoints

Se você definiu rollout_strategy como managed quando iniciou o ESP e precisa descobrir qual é o ID de configuração usado por uma instância do ESP, a página de status do Endpoints tem essas informações.

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

  1. Use ssh para se conectar ao pod usando 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 curl.

  3. Digite o seguinte:

      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 ID de configuração do serviço que o ESP está usando. Para garantir que o ESP use a mesma configuração que o Endpoints, consulte Como conseguir o nome e o ID de configuração do serviço.