Запустить образ Consul Docker в Kubernetes как не root

Я хочу запустить consul в kubernetes, но мне не разрешено запускать его от имени пользователя root.

Поэтому я добавил

RUN addgroup consul root

в Dockerfile (производный от FROM consul:1.0.3)

и начать развертывание в кубернетах с

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    xyz.service: consul-deployment
  name: consul-deployment
spec:
  template:
    spec:
      securityContext:
        runAsUser: 100

Теперь я ожидаю, что kubernetes запустит консул с пользователем 100 (который раньше был пользователем consul, когда я запускал его локально в Docker, а теперь должен быть членом группы root).

Но теперь я получаю следующее сообщение об ошибке при запуске модуля

chown: /consul/data: Operation not permitted

chown выполняется в Consuls docker-entrypoint.sh, и я предполагаю, что он (все еще) не работает, потому что пользователь 100 не является пользователем root.

Может ли кто-нибудь объяснить мне, как запустить контейнер с пользователем без полномочий root, когда в контейнере есть сценарий точки входа, ожидающий выполнения от имени пользователя root?

Строго говоря, это не ответ на ваш вопрос, но вы можете добиться некоторого успеха, запустив их точку входа в режиме -x, чтобы увидеть, какие два значения на самом деле вызывают сбой этот тест; command: ["/usr/bin/dumb-init", "/bin/sh", "-x", "/usr/local/bin/docker-entrypoint.sh"] в вашем PodSpec теоретически должен это делать. Кстати, просто членство в группе root абсолютно ничего не делает для способности к вещам chown.

mdaniel 03.05.2018 06:06
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
3
1
1 560
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я закончил исправление Consuls docker-entrypoint.sh, чтобы проверить, является ли пользователь root, перед выполнением команды chown, добавив несколько тестов if [ "$(id -u)" = "0" ].

Вы можете найти патч на GitHub.

Фактически, было бы лучше создать свой собственный контейнер, унаследованный от Consul, с применением исправления в реальном времени благодаря sed. Я пробовал RUN /bin/sed -i 's/^\(.*set -- su-exec consul:consul "$@"\)/ if [ "$(id -u)" = "0" ]; then\n \1\n fi/' /usr/local/bin/docker-entrypoint.sh, которые работают хорошо!

Riduidel 30.05.2018 14:48

Если / consul является монтированием nfs, возможно, на сервере установлены root_squash и all_squash. Это приведет к сбою операций chown, потому что новые файлы / папки автоматически будут переданы никому / nogroup.

Если вы можете изменить общий ресурс (временно) на использование no_root_squash и no_all_squash, пока все файлы не будут настроены, все будет в порядке. Поскольку эта файловая система обычно сохраняется, это должно быть необходимо только один раз, поэтому после этого вы можете снова сбросить ее на root_squash и all_squash.

На случай, если кто-то ищет решение. Вы также можете использовать изображение Консула от Bitnami. Они предоставляют некорневые образы популярных приложений.

docker pull bitnami/consul:1.4.4 

Другие вопросы по теме