Exec ca utilizator root în Kubernetes

  • mai puțin de 1 minute de citit
  • 5 exemple de cod

Disponibil și în English

Pe această pagină

Salut 👋,

În acest tutorial scurt îți arăt o metodă de a obține un shell root în containerele care rulează într-un cluster Kubernetes modern.

Cerințe preliminare:

  • Acces root la nodul clusterului pe care rulează containerul.

Descrierea problemei

Vrem acces root într-un container care rulează, dar exec ne dă un utilizator non-root.

➜  Downloads k get podsNAME                     READY   STATUS    RESTARTS   AGEmy-release-cassandra-0   1/1     Running   0          2m9s➜  Downloads k exec -it pod/my-release-cassandra-0 -- /bin/bashI have no name!@my-release-cassandra-0:/$ whoamiwhoami: cannot find name for user ID 1001I have no name!@my-release-cassandra-0:/$ touch testtouch: cannot touch 'test': Permission deniedI have no name!@my-release-cassandra-0:/$ 

Soluția

Pentru a obține acces root, mai întâi află ID-ul containerului din interiorul pod-ului.

k describe pod my-release-cassandra-0
Containers:  cassandra:    Container ID:  containerd://8fa7af3900d556aa8a91b1ac4cbe46335e8df233f8645b0a2329b2f0e6d76177    Image:         docker.io/bitnami/cassandra:4.0.7-debian-11-r0

Apoi, dacă ID-ul începe cu containerd://, rulează următoarea comandă pe nodul pe care rulează pod-ul:

sudo runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 8fa7af3900d556aa8a91b1ac4cbe46335e8df233f8645b0a2329b2f0e6d76177 /bin/bash

Ar trebui să obții un shell root în containerul Cassandra:

root@my-release-cassandra-0:/# whoamirootroot@my-release-cassandra-0:/# touch testroot@my-release-cassandra-0:/# lsbin	 boot  docker-entrypoint-initdb.d  etc	 lib	media  opt   root  run.sh  srv	test  usrbitnami  dev   entrypoint.sh		   home  lib64	mnt    proc  run   sbin    sys	tmp   var

Mulțumesc că ai citit și succes în explorarea cloud-ului! 🏄