Ephemeral containers in Kubernetes zijn een krachtige functie die operators in staat stelt om lopende Pods te debuggen en probleemoplossingen uit te voeren door kortlevende containers binnen dezelfde Pod te creëren. Dit is bijzonder nuttig voor problemen die niet in een aparte omgeving kunnen worden gerepliceerd. Door gebruik te maken van ephemeral containers, kunt u een container aan een draaiende Pod koppelen, het bestandssysteem, netwerkinstellingen of draaiende processen inspecteren, en vervolgens de container verwijderen zonder de primaire containers van de Pod te beïnvloeden.
Wat zijn Ephemeral Containers?
Ephemeral containers zijn speciale containers die niet draaien als onderdeel van een applicatiewerkbelasting, maar in plaats daarvan aan een bestaande Pod worden toegevoegd voor het doel van debugging. Ze delen dezelfde bronnen (netwerknamespace, volumes, enz.) als de andere containers in de Pod, waardoor ze ideaal zijn voor real-time diagnose. Zodra de debugging is voltooid, kan de ephemeral container worden verwijderd zonder dat de hele Pod opnieuw moet worden aangemaakt.
Belangrijke Punten
- Kortlevend: Ephemeral containers zijn enkel bedoeld voor debugging of probleemoplossing.
- Niet-storend: Ze hebben geen invloed op bestaande applicatiecontainers in de Pod.
- Bronnen delen: Ze delen bronnen zoals opslagvolumes en netwerknamespaces met de Pod, waardoor debugging krachtiger wordt.
Beveiligingsoverwegingen bij Ephemeral Containers
Ephemeral containers bieden een veiligere benadering voor debugging door langdurige toegang tot productie Pods te beperken. Je kunt strikte RBAC-regels afdwingen, zodat alleen geautoriseerde gebruikers ephemeral containers kunnen toevoegen en uitvoeren, waardoor het venster voor potentiële bedreigingen wordt geminimaliseerd. Aangezien deze containers verdwijnen zodra de debugging is voltooid, wordt het aanvaloppervlak verminderd, wat de algehele clusterbeveiliging versterkt.
Gebruikscases
- Probleemoplossing bij applicatiecrashes: Wanneer je logs moet inspecteren of debuggingtools moet uitvoeren in een gecrashte of crasherende container, stellen ephemeral containers je in staat om een draaiende omgeving binnen te gaan zonder de configuratie van de hoofdcontainer te wijzigen.
- Netwerkdebugging: Je kunt debuggingtools (bijv. tcpdump, netstat) in de ephemeral container installeren om netwerkproblemen binnen de netwerknamespace van de Pod te diagnosticeren.
- Live besturingssysteemcontroles: Als je vermoedt dat er bestandsbeschadiging of onjuiste bestandslocaties zijn, stellen ephemeral containers je in staat om het bestandssysteem in realtime te controleren.
Vereisten
- Kubernetes Versie: Ephemeral containers vereisen minimaal Kubernetes 1.23+ waar de EphemeralContainers-functie algemeen beschikbaar is (GA). Op oudere Kubernetes-versies moet je mogelijk de functiepoort EphemeralContainers inschakelen.
- kubectl: Zorg ervoor dat je lokale kubectl-client minimaal dezelfde of een nieuwere versie is dan het controlepaneel van je cluster.
- Voldoende RBAC Machtigingen: U heeft toestemming nodig om het kubectl debug-commando te gebruiken en om Pods bij te werken (de tijdelijke container wordt toegevoegd via een update van de specificatie van de Pod).
Stapsgewijze Handleiding: Het Gebruik van Tijdelijke Containers
Hieronder volgt een gegeneraliseerd proces dat werkt in elke Kubernetes-omgeving, inclusief EKS (Elastic Kubernetes Service op AWS), AKS (Azure Kubernetes Service), GKE (Google Kubernetes Engine) of on-premises clusters. We zullen ons richten op het kubectl debug-commando, dat het primaire mechanisme is voor het toevoegen van tijdelijke containers.
Controleer de Configuratie van uw Cluster
kubectl version
- Zorg ervoor dat uw Server Versie minimaal 1.23 is.
- Bevestig dat uw Client Versie ook compatibel is.
Als u zich in een beheerde omgeving zoals EKS of AKS bevindt, controleer dan de cluster versie vanuit het dashboard of de CLI van uw cloudprovider om ervoor te zorgen dat deze 1.23 of later is.
Identificeer de Pod die u Wilt Debuggen
Lijst Pods in een specifieke namespace:
kubectl get pods -n <your-namespace>
Kies de naam van de Pod die u wilt oplossen, bijvoorbeeld: my-app-pod-abc123.
Voeg een Tijdelijke Container toe met kubectl debug
Gebruik het kubectl debug-commando om een tijdelijke container toe te voegen. Bijvoorbeeld, we gebruiken een eenvoudige Ubuntu-image:
kubectl debug my-app-pod-abc123 -n <your-namespace> \
--image=ubuntu \
--target=my-container \
--interactive=true \
--tty=true
Hier is een overzicht van de vlaggen:
- my-app-pod-abc123: De naam van de bestaande Pod.
- –image=ubuntu: Docker-afbeelding die gebruikt moet worden voor de tijdelijke container.
- –target=my-container: (Optioneel) Geeft aan welke container in de Pod je wilt targeten voor namespace-deling. Typisch is dit de hoofdcontainer in de Pod.
- –interactive=true en –tty=true: Hiermee krijg je een shell-sessie binnen de tijdelijke container.
Wanneer je het bovenstaande uitvoert, krijg je een shellprompt in de tijdelijke container binnen de bestaande Pod. Je kunt nu debugopdrachten uitvoeren zoals ls, ps, netstat, of extra pakketten installeren.
Bevestig de creatie van de tijdelijke container
Voer in een andere terminal, of na het verlaten van de shell van de tijdelijke container, uit:
kubectl get pod my-app-pod-abc123 -n <your-namespace> -o yaml
Je zou een nieuwe sectie onder spec of status moeten zien die de tijdelijke container beschrijft.
Debuggen en probleemoplossing
Vanuit de tijdelijke container kun je:
- Controleer logboeken of app-configuratie.
- Gebruik debugtools zoals curl, wget, telnet om de netwerkverbinding te verifiëren.
- Inspecteer omgevingsvariabelen om de configuratie van je applicatie te bevestigen.
# Examples
curl http://localhost:8080/health
env | grep MY_APP_
ps aux
Ruim tijdelijke containers op
Ephemerale containers worden automatisch verwijderd wanneer de Pod wordt vernietigd of nadat je ze handmatig verwijdert. Om de ephemere container uit de Pod te verwijderen zonder de gehele Pod te vernietigen (op ondersteunde versies), kun je de Pod-specificatie patchen. Echter, doorgaans zijn ephemere containers niet bedoeld om lang mee te gaan. Zodra je de Pod verwijdert of je deployment schaal naar beneden, zal de ephemere container ook worden verwijderd.
Specifieke Notities voor Beheerde Diensten
Amazon EKS
- Zorg ervoor dat je EKS-cluster Kubernetes 1.23 of hoger draait.
- Bevestig dat de IAM-machtigingen je toestaan om kubectl debug uit te voeren.
- Als je oudere EKS-versies gebruikt (1.22 of eerder), moet je de EphemeralContainers feature gate inschakelen.
Azure AKS
- Gebruik de Azure CLI (az aks update) om je AKS-cluster indien nodig te upgraden naar een compatibele versie.
Bevestig dat je kubectl context is ingesteld op het AKS-cluster:
az aks get-credentials --resource-group <rg-name> --name <cluster-name>
Andere Beheerde of On-Prem Clusters
- Controleer de documentatie van je cluster of vraag je provider om te bevestigen dat ephemere containers zijn ingeschakeld.
- De meeste moderne on-prem oplossingen (OpenShift, Rancher, etc.) hebben ephemere containers standaard ingeschakeld vanaf Kubernetes 1.23, maar je moet mogelijk de feature gate handmatig inschakelen als je op een oudere versie zit.
Beste Praktijken
- Gebruik Minimale Afbeeldingen: Kies lichte afbeeldingen om overhead te verminderen (bijv. busybox, distroless debugging afbeeldingen).
- Beperk RBAC: Beperk wie er tijdelijke containers kan maken om mogelijke beveiligingsrisico’s te minimaliseren.
- Registreer Alle Debugsessies: Houd bij hoe tijdelijke containers worden gebruikt voor auditing en naleving.
- Vertrouw Niet op Tijdelijke Containers: Ze zijn alleen voor debugging. Als je een permanente sidecar of hulpcontainer nodig hebt, configureer deze dan vanaf het begin in de Pod-specificatie.
Conclusie
Tijdelijke containers zijn een veelzijdige en krachtige manier om problemen in realtime op te lossen zonder de primaire toepassingscontainers te beïnvloeden. Of je nu Kubernetes uitvoert op EKS, AKS, on-premises of een andere beheerde oplossing, het begrijpen en gebruiken van tijdelijke containers kan aanzienlijk je mean-time-to-recovery (MTTR) verminderen en de operationele efficiëntie verbeteren.
Ze vullen traditionele troubleshooting methoden aan en zouden deel moeten uitmaken van de gereedschapskist van elk platformteam om complexe toepassingsproblemen te diagnosticeren. Door de bovenstaande stappen te volgen, kun je zelfverzekerd tijdelijke containers implementeren in je omgeving en je debugprocessen stroomlijnen.
Aantekening van de auteur: Gebaseerd op Kubernetes-troubleshooting in de praktijk, heeft deze gids als doel je te helpen Pods snel en zonder verstoring in productieomgevingen te debuggen.
Source:
https://dzone.com/articles/enhancing-security-troubleshooting-in-production-clusters