În producția modernă, imaginile Docker sunt construite pe baze minimale (distroless/scratch) care nu conțin shell bash, curl, ping sau instrumente de depanare de rețea din motive stricte de securitate. Dacă un pod de producție începe să eșueze la interogarea bazei de date, inginerul nu are cum să ruleze un `sh` clasic în container.
Comanda oficială kubectl debug a rezolvat această provocare prin introducerea Containerelor Efemere (Ephemeral Containers): atașează dinamic un container temporar (de exemplu o imagine completă de depanare precum `busybox` sau `nicolaka/netshoot`) direct în spațiul de procese și rețea al pod-ului defect.
Poți rula `curl`, `dig`, `tcpdump` sau poți inspecta procesele pod-ului cu unelte de profilare fără a fi nevoie să reconstruiești imaginea Docker sau să repornești pod-ul de producție.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
-it |
Deschide o sesiune de terminal interactiv atașată containerului de depanare. |
--image= |
Specifică imaginea de diagnostic dorită (ex: `nicolaka/netshoot`, `curlimages/curl`). |
--target= |
Partajează spațiul de procese (PID namespace) cu un container specific din pod. |
node/ |
Lansează un pod de depanare cu drepturi de root direct pe nodul fizic din cluster. |
Exemple practice și cod
Exemplul 1: Depanarea conectivității de rețea dintr-un pod distroless de producție
Cum se injectează o unealtă de rețea într-un pod fără shell.
# Atașăm un container efemer netshoot la podul 'plati-service':
$ kubectl debug -it plati-service-7d8b9 --image=nicolaka/netshoot
Targeting container "plati-app". If you don't see processes, check process namespaces.
If you don't see a command prompt, try pressing enter.
# Suntem în terminalul efemer pe aceeași rețea cu aplicația:
plati-service-debug # dig postgres-service.database.svc.cluster.local
plati-service-debug # curl -Iv https://gateway-bancar.internal/api/v1/ping
plati-service-debug # exit
# Containerul efemer este eliberat curat la ieșire fără impact pe producție.
Rezultat & Impact
Diagnoză precisă de rețea și DNS în pod-uri securizate fără shell instalat.
Greșeli frecvente și bune practici
- Uitarea parametrului `–target` atunci când dorești să inspectezi variabilele de mediu sau fișierele din `/proc` ale containerului principal.
- Rularea pe clustere vechi de Kubernetes (< 1.23) unde funcționalitatea `EphemeralContainers` era dezactivată în FeatureGates.