Запустите образ Consul Docker в kubernetes от имени пользователя root - PullRequest
0 голосов
/ 02 мая 2018

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

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

RUN addgroup consul root

в Dockerfile (полученный FROM consul:1.0.3)

и начните развертывание в kubernetes с

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 выполняется в Консуле docker-entrypoint.sh, и я предполагаю, что (все еще) происходит сбой, поскольку пользователь 100 не является пользователем root.

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

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

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

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

0 голосов
/ 17 апреля 2019

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

docker pull bitnami/consul:1.4.4 
0 голосов
/ 15 мая 2018

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

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

...