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:
Autorize
gcloud:gcloud auth login gcloud auth application-default loginCriar um cluster. Você pode usar o comando
gclouda seguir ou criar um cluster usando o consoleGoogle Cloud .gcloud container clusters create CLUSTER_NAME
Substitua
CLUSTER_NAMEpelo nome do cluster.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 consoleGoogle Cloud , siga estas etapas:
- Verifique se todos os serviços obrigatórios estão ativados.
- 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:
Consiga o nome do pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sO nome do pod é
esp-echo-174578890-x09gle ele tem dois contêineres:espeecho.Para ver os registros em um pod, use
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
Em que
POD_NAMEeCONTAINER_NAMEsão retornados pelo comandokubectl 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 erroFetching service config failed, verifique se o nome do serviço especificado no campo --service no arquivo de manifesto de implantação, mencionado como deployment.yaml, corresponde ao nome no campo host no documento de OpenAPI (chamado de arquivo openapi.yaml).
Se o nome incorreto estiver no arquivo deployment.yaml:
Abra o arquivo
deployment.yamle vá para a seção configurada para o contêiner 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_NAMEpara que corresponda ao nome no campohostemopenapi.yamle salve o arquivodeployment.yaml.Inicie o serviço do Kubernetes:
kubectl create -f deployment.yaml
Se o arquivo openapi.yaml tiver o nome incorreto:
Solicite o nome do serviço em que o Endpoints foi configurado para uso.
Exclua o serviço:
gcloud endpoints services delete SERVICE_NAME
Substitua
SERVICE_NAMEpelo nome da etapa anterior. O serviço é excluído doGoogle Cloudem 30 dias. Não é possível reutilizar o nome do serviço durante esse período.Abra o arquivo
openapi.yamle corrija o nome no campohoste salve o arquivo.Implante a configuração do serviço atualizada:
gcloud endpoints services deploy openapi.yamlAguarde até que a implantação da configuração do serviço seja concluída com sucesso.
Inicie o serviço do Kubernetes:
kubectl create -f deployment.yaml
Como verificar arquivos de configuração
Use
sshpara se conectar ao pod usandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAMEpelo nome do contêiner ePOD_NAME pelo nome do pod. No diretório
etc/nginx/endpoints/, verifique se há erros nos seguintes arquivos de configuração:nginx.conf- O arquivo de configuraçãonginxcom diretivas ESPservice.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:
Use
sshpara se conectar ao pod usandokubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAMEpelo nome do contêiner ePOD_NAMEpelo nome do pod.Instale
curl.Digite o seguinte:
curl http://localhost:8090/endpoints_statusIsso 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.