Viji
@Viji
DevOps Engineer

Как правильно ограничить привелегии при запуске контейнера в кубернетес среде?

Для запуска контейнера .net в кубернетес манифесте для деплоймента используется контекст безопасности.

spec:
      securityContext:
        fsGroup: 1001
        runAsNonRoot: true
        runAsUser: 1001

В докерфайле user c ID=1001 не создается и не существует (там вообще нового пользователя не создается).

При этом, если зайти на работающий под в интерактивный терминал, например с помощью

k -n {namespace} -it {pod-name} -- /bin/bash
то получаешь приглашение в виде

I have no name!@{pod_name}:/application$ whoami 
whoami: cannot find name for user ID 1001

что имеет смысл, т.к. такого ID в контейнере не существует. Тем не менее контейнер как-то работает.
Тоже самое можно получить при запуске докер контейнера на своей машине с публичным образом.

docker run -d --user 1001 ubuntu:latest sleep infinity
docker exec -it 50db203325e2cf80b03a1aae42c735208501c2783b3e2ce4ae0d0cd3685fdcb0 /bin/bash
I have no name!@50db203325e2:/$


3 вопроса
1) Как понимать это приглашение, почему пользователя с ID=1001 нет, а контейнер работает?
2) Является ли хорошей практикой создать пользователя в докерфайле командой типа: useradd --no-create-home appuser -u 5001 -g 5001 и в дальнейшем использовать его ID в установках securityContext? Или создавать не обязательно?
3) Если в системе на которой работает под/контейнер будет User с ID=5001 получит ли user в контейнере права из хоста?
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 2
karabanov
@karabanov Куратор тега Docker
Системный администратор
В Dockerfile есть директива USER 1001, поэтому так.

Ещё можно в момент запуска контейнера указать ID пользователя:
docker run --volume $HOME:$HOME --workdir ${PWD} -u $(id -u):$(id -g) -it nano_tools_debian
Ответ написан
Комментировать
@stepanof23
DevOps/DataOps
1) Предполагаю, что пользователь все таки создается. Может и не в вашем в докерфайле, а в образе, на основе которого Вы пишете докерфайл.
И даже скорее всего их два или более, первый с id 1000, и второй с id 1001
Попробуйте ввести команду id, которая выдает информацию о текущем пользователе (или хардкод id 1001).
whoami может не работать, если пользователю не задали имя.
2) не компетентен, но мне кажется дефолтного 1001 пользователя хватит и нет смысла в лишнем пользователе 5001.
3) да
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы