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 login
Crie um cluster. É possível usar o seguinte comando
gcloud
ou criar um cluster usando Console do Google Cloud.gcloud container clusters create CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo 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 console do Google 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 21s
O nome do pod é
esp-echo-174578890-x09gl
e ele tem dois contêineres:esp
eecho
.Para ver os registros em um pod, use
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
Em que
POD_NAME
eCONTAINER_NAME
sã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.yaml
e 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_NAME
para que corresponda ao nome no campohost
emopenapi.yaml
e 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_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.Abra o arquivo
openapi.yaml
e corrija o nome no campohost
e salve o arquivo.Implante a configuração do serviço atualizada:
gcloud endpoints services deploy openapi.yaml
Aguarde 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
ssh
para se conectar ao pod usandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo 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çãonginx
com 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
ssh
para se conectar ao pod usandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo nome do contêiner ePOD_NAME
pelo nome do pod.Instale
curl
.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.