Este repositório fornece duas ferramentas independentes para operações de SRE e troubleshooting em ambientes distribuídos e Kubernetes:
debugtools: Uma imagem de debug clássica (shell-based, não-root) para uso em containers efêmeros (kubectl debug).debugtools-mcp: Um servidor ativo (Model Context Protocol) hospedado em Node.js, focado em expor diagnósticos de rede externos ("de fora para dentro") para serem consumidos por Agentes SRE atuando internamente.
Imagem de debug segura para uso em containers efêmeros no Kubernetes.
Esta imagem existe para substituir o uso genérico de nicolaka/netshoot em cenários onde o workload alvo exige runAsNonRoot e políticas mais rígidas de segurança.
Ela foi desenhada para uso geral em troubleshooting Kubernetes com kubectl debug, especialmente quando o caso exige toolbox de rede, DNS e TLS dentro do pod alvo.
Use esta imagem quando o operador precisar:
- validar DNS, TCP e TLS a partir do namespace/pod real;
- inspecionar resolução de nomes, rotas e sockets;
- fazer
GET/HEADidempotentes para health checks; - analisar certificados, cadeias TLS e handshake;
- consultar JSON/YAML/texto com ferramentas simples e previsíveis;
- operar em pods com
runAsNonRoot, sem depender de imagem root.
Ferramental incluído:
bashbind-tools(dig,nslookup)busybox-extrasca-certificatescoreutilscurlfilefindutilsgawkgrepiproute2(ip,ss)iputilsjqnetcat-openbsd(nc)opensslprocpspython3sedsocatutil-linuxwgetyq
Características operacionais:
- base
alpine:3.23.4 - usuário numérico fixo
10001:10001 WORKDIR=/workspace- imagem pequena o suficiente para uso recorrente, mas completa para diagnóstico de rede/TLS
Esta imagem não tenta virar toolbox universal sem critério.
Ela deliberadamente não inclui por padrão:
kubectlhelmtcpdump- clientes específicos de banco (
psql,redis-cli,mysql,mongo) - toolchains de build
- Python/Node/Go só para scripting ad hoc
Motivo:
- isso aumenta tamanho, superfície de ataque e drift;
- boa parte desses binários não é necessária para a maioria dos diagnósticos read-only no Kubernetes;
- o objetivo aqui é resolver bem a trilha de conectividade, DNS, TLS, sockets e parsing leve.
Se algum binário extra virar necessidade recorrente e justificada por evidência real, ele deve ser adicionado conscientemente, não por conveniência.
git clone git@github.com:heraque/debugTools.git
cd debugToolsdocker build -t debugtools:test .docker run --rm debugtools:test sh -lc 'id && dig -v | head -n 1 && openssl version && jq --version'Exemplo ilustrativo:
kubectl debug pod/app-123 \
-n app-ns \
--target=app \
--image=ghcr.io/heraque/debugtools:v0.1.0 \
--container=debugger \
-- bashEsta imagem pode ser consumida por wrappers, automações de diagnóstico ou uso manual com kubectl debug.
Contrato operacional esperado:
- usar somente em diagnóstico controlado;
- preferir primeiro o runtime nativo do container alvo quando ele já tiver os binários necessários;
- subir para um container efêmero quando:
- faltarem binários no container alvo;
- a prova precisar vir do runtime/pod real;
- o caso exigir toolbox de rede/TLS mais completo.
- testar
tcpetlsparakubernetes.default.svc:443 - validar SNI e trust chain de um endpoint interno
- confirmar DNS dentro do pod quando a aplicação não tem
dig/nslookup - analisar
curl -I/wget --spiderem endpoints de health - checar
ss -plantouip routedurante falha de conectividade - inspecionar resposta HTTP sem depender de shell livre fora do fluxo de diagnóstico
Pontos de desenho:
- não-root por padrão para compatibilidade com
runAsNonRoot - sem privilégio adicional
- sem capabilities extras por padrão
- foco em diagnóstico read-only
Trade-off aceito:
- a imagem não é a menor possível em bytes absolutos;
- ela é pequena o bastante para uso operacional e grande o bastante para evitar fallback tosco durante incidentes reais.
Vale mexer nela quando houver evidência recorrente de que falta uma capacidade necessária ao troubleshooting real, por exemplo:
- debugging de DNS/TLS insuficiente;
- parsing estrutural insuficiente;
- incompatibilidade com políticas comuns de segurança de workload.
Não vale mexer nela só porque “pode ser útil algum dia”.
Enquanto a imagem base é usada "de dentro" do cluster por um humano, o Servidor MCP (debugtools-mcp) atua como uma sonda ativa na borda (tipicamente instalado em uma VPS exposta à internet), projetado especificamente para ser consumido por um Agente SRE (Hermes) de dentro do cluster.
Seu objetivo é dar ao Agente a capacidade de enxergar e testar a aplicação exatamente como um usuário na internet enxerga, eliminando pontos cegos causados pelas redes e firewalls internos.
O servidor entrega 14 "tools" (funções) padronizadas via o Model Context Protocol, transportadas sobre um túnel seguro de SSE (Server-Sent Events):
- L3 (DNS e Rotas): Checagens de Propagação DNS global, ICMP Pings, descobrimento avançado de Path MTU, Traceroutes (
mtr), consultas de roteamento BGP ASN (Cymru) e WHOIS de domínio. - L4 (Portas): Probes seguras para portas TCP e UDP, identificando portas fechadas, abertas ou "filtradas" (drop silente).
- L5/L6 (Segurança e Criptografia): Auditoria profunda de versões TLS/SSLv3 e Cipher Suites aceitos, parsing de cadeias e validades de certificados, e sondas de "CDN Bypass" realizando Spoofing via IP de origem da borda + Host headers.
- L7 (Protocolos da Aplicação): Testes agressivos curtos de "Rate Limit Stress" contra WAFs, sondas avançadas de latência HTTP detalhada (TTFB, DNS, Handshakes), chamadas nativas de gRPC Health Check (
grpc.health.v1) e sondagens bidirecionais de handshakes em WebSockets de longa duração.
- Autenticação baseada em
Bearer Tokenrestrito. - Todas as validações nativas e regex suportam transparentemente alvos IPv4, IPv6 e Hostnames arbitrários.
- Imune a injeção de comandos (Shell/Bash Inject) via wrappers nativos
execFileenet.isIP.
Opção 1: Via Container Docker (Recomendado)
A imagem publicada herda os binários de L3 da versão "debugtools" base, operando sob usuário e grupo restrito (10001:10001).
docker run -d --name mcp-probe \
-p 3000:3000 \
-e MCP_API_KEY="seu_token_secreto" \
ghcr.io/heraque/debugtools-mcp:v1.0.2Opção 2: Node.js Local
cd mcp-server
npm install
npm run build
MCP_API_KEY="seu_token_secreto" npm startO Agente SRE interno então deverá fechar o túnel SSE conectando-se na VPS em GET http://<vps-ip>:3000/sse.