#linux #kubernetes
#linux #kubernetes
Вопрос:
В настоящее время я вхожу в pod как пользователь mysql, используя команду:
kubectl exec -it PODNAME -n NAMESPACE bash
Я хочу ввести контейнер как root. Я попробовал следующую команду:
kubectl exec -it PODNAME -n NAMESPACE -u root ID /bin/bash
kubectl exec -it PODNAME -n NAMESPACE -u root ID bash
Должен быть способ. 🙂
Комментарии:
1. Я нашел ответ. Вы не можете войти в pod напрямую как root через kubectl. Вы можете узнать, на каком узле запущен модуль, затем узнать его идентификатор изображения и войти в узел. затем вы должны выполнить через docker:
sudo docker exec -it -u root [DOCKER ID] /bin/bash
Ответ №1:
Я нашел ответ.
Вы не можете войти в pod напрямую как root через kubectl.
Вы можете выполнить следующие шаги.
1) узнайте, на каком узле он запущен kubectl get po -n [NAMESPACE] -o wide
2) ssh-узел
3) найдите контейнер docker sudo docker ps | grep [namespace]
4) войдите в контейнер как root sudo docker exec -it -u root [DOCKER ID] /bin/bash
Комментарии:
1. На самом деле нет абсолютно никакой разницы между выполнением
kubectl exec
иdocker exec
. Это просто дополнительная работа.2. нет, @suren, если в pod есть несколько docker, это определенно будет отличаться.
3. нет, это не так. Вы просто переходите
-c
, чтобы указать, к какому контейнеру вы хотите получить доступ.4. Это абсолютно другое. Вы не можете указать
-u root
в команде kubectl5. @Ilya это зависит от того, где запущен ваш узел. Если вы запускаете их в облачном кластере, должен быть вычислительный экземпляр, доступный по ssh ( linux.die.net/man/1/ssh ) на котором размещен агент k8s, если вы работаете на KinD, тогда вы можете просто
docker exec -it [NAME_OF_K8S_NODE_CONTAINER] /bin/bash
.
Ответ №2:
На самом деле уже есть возможность подключиться через kubectl addon kubectl-plugins. Найдено решение, отвечающее на связанный вопрос.
git clone https://github.com/jordanwilson230/kubectl-plugins.git
cd kubectl-plugins
./install-plugins.sh
source ~/.bash_profile
kubectl ssh -u root suse
Connecting...
Pod: suse
Namespace: NONE
User: root
Container: NONE
Command: /bin/sh
If you don't see a command prompt, try pressing enter.
sh-5.0#
Комментарии:
1. Это был более полезный ответ для меня. Для этого не требуется, чтобы у вас был SSH-доступ к узлам kubernetes — вам нужно только иметь возможность создать другой pod в том же пространстве имен.
Ответ №3:
SSH как root для модуля kubernates. Для тех, кто на платформе Windows использует minikube. Сначала вы подключаетесь к ssh внутри minikube
minikube ssh --user root
Затем вам нужно найти нужный контейнер docker
docker ps | grep NAME_POD
Скопируйте полное имя контейнера docker, затем используйте docker exec:
sudo docker exec -it -u root FQDN_CONTAINER bash
В моем случае это было :
sudo docker exec -it -u root k8s_jupyter_my-jupyter-0_default
_f05e2913-f1fd-4084-a8e8-e783519d4a71_0 bash
Однажды у меня был полный root-доступ в bash внутри POD.