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. Criar um cluster. É possível 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ê consegue enviar solicitações à sua API com êxito, mas não vê nenhuma métrica ou registro na página Endpoints > Serviços 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

Se você vir a mensagem de erro Fetching service config failed, verifique se o nome do serviço especificado no campo --service no arquivo de manifesto de implantação (chamado de arquivo deployment.yaml) corresponde ao nome no campo host no documento da OpenAPI (chamado de arquivo openapi.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 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 no campo host em openapi.yaml e salve o arquivo deployment.yaml.

  2. Inicie o serviço do Kubernetes:

      kubectl create -f deployment.yaml
    

Se o arquivo openapi.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. Leva 30 dias para que o serviço seja excluído do Google Cloud. Não é possível reutilizar o nome do serviço durante esse período.

  3. Abra o arquivo openapi.yaml e corrija o nome no campo host e salve o arquivo.

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

      gcloud endpoints services deploy openapi.yaml
    
  5. Aguarde até que a implantação da configuração do serviço seja concluída com sucesso.

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