kubectl + cURL - Validando APIs internas em Kubernetes
Quando um microserviço roda dentro do cluster, bater nele via curl parece simples mas pode não ser, pois podem aparecer erros 404, dúvidas de namespace, ou incertezas sobre qual é a rota real/correta.
Este guia reúne o fluxo completo pra você sair do zero até um teste confiável com comandos prontos para serem utilizados. Ao final, você vai ser capaz de validar com tranquilidade se seu serviço está rodando e com as rotas publicadas.
Imagine o seguinte cenário onde você consegue acessar o cluster com o kubectl e quer testar endpoints HTTP de um serviço interno. Por exemplo:
ms-my-service-apims-my-service80Primeiro, valide o contexto ativo no kubectl:
kubectl config current-context
Para ver todos os contextos disponíveis:
kubectl config get-contexts
Para ver apenas o cluster do contexto atual:
kubectl config view --minify -o jsonpath='{.contexts[0].context.cluster}{"\n"}'
Para ver URL do API server:
kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}{"\n"}'
Para listar os namespaces disponíveis:
kubectl get ns
Buscar service em todos os namespaces:
kubectl get svc -A | grep ms-my-service-api
Inspecionar os detalhes do service:
kubectl -n ms-my-service get svc ms-my-service-api -o yaml
Exemplo de trecho relevante encontrado no arquivo YAML de detalhes do service:
ports:
- port: 80
protocol: TCP
targetPort: 8080
Com os dados acima, o comando fica:
kubectl -n ms-my-service port-forward svc/ms-my-service-api 8080:80
Agora, no seu host local, o serviço responde em http://localhost:8080.
(!) NÃo feche o terminal onde você rodou o port-forward. Ele deve ficar em execução durante os testes.
curlSem path específico:
curl -i http://localhost:8080/
Healthchecks comuns:
curl -i http://localhost:8080/health
curl -i http://localhost:8080/ready
curl -i http://localhost:8080/metrics
404 page not foundSe o port-forward está ativo e você recebe 404, isso normalmente significa:
Por exemplo: se GET /metrics retornar 404, pode indicar:
/api/v1/metrics etc.)POST, por exemplo)O Kubernetes não lista rotas HTTP da sua aplicação. Ele conhece service, porta e endpoints (IP dos pods).
Pra descobrir as rotas da que sua API possui, use:
curl -i http://localhost:8080/swagger
curl -i http://localhost:8080/swagger/index.html
curl -i http://localhost:8080/openapi.json
curl -i http://localhost:8080/docs
Procurar definições de rotas/handlers no projeto.
Primeiro, veja qual é o selector do seu service:
kubectl -n ms-my-service get svc ms-my-service-api -o yaml
Depois, liste os pods pelo selector (exemplo)
kubectl -n ms-my-service get pods -l app=ms-my-service-api
Alternativa direta pra ver quem está atrás do service:
kubectl -n ms-my-service get endpoints ms-my-service-api
Ou, uma visão completa:
kubectl -n ms-my-service describe svc ms-my-service-api
Se algo não funcionar, valida as informações nessa ordem:
kubectl config current-contextkubectl get svc -A | grep <service>kubectl -n <ns> get svc <svc> -o yamlkubectl -n <ns> get endpoints <svc>port-forward precisa ficar aberto/, /health, docs e OpenAPIPara testar uma API interna no Kubernetes com rapidez e previsibilidade:
port-forward para o seu localhost,404 como problema de roteamento da aplicação, não de conexão com cluster.Esse fluxo evita “tentativa e erro” e acelera muito a depuração de APIs internas.
Espalhe o espírito arquitetônico intelectual.