Как я могу изменить разрешения в контейнерной платформе openshift? - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в Openshift. Я развернул приложение в openshift. Когда я проверил журналы, в некоторых файлах произошла ошибка доступа. Теперь я хочу изменить разрешения для контейнера, который уже развернут в Openshift, но я получаю предупреждение «Операция не разрешена». Как я могу это исправить?

Это для linux под управлением последней версии MongoDB. Я уже попытался выполнить каталог RUN chmod 777 / path / to / в моем файле Docker, создал изображение и вытащил то же самое изображение в моем файле yaml, которое я развернул в моем openshift. Однако, когда я проверяю свой докер-контейнер, он показывает, что разрешения для этого каталога изменены, но при развертывании я получаю предупреждение в своих журналах как «Отказано в доступе».

FROM node:10.16.3

RUN apt update && apt install -y openjdk-8-jdk

RUN useradd -ms /bin/bash admin

# Set the workdir /var/www/myapp
WORKDIR /var/www/myapp

# Copy the package.json to workdir
COPY package.json .

# Run npm install - install the npm dependencies
RUN npm install

RUN npm install sqlite3

# Copy application source
COPY . .

RUN chown -R admin:admin /var/www/myapp

RUN chmod 775 /var/www/myapp

USER admin

# Copy .env.docker to workdir/.env - use the docker env
#COPY .env.docker ./.env

# Expose application ports - (4300 - for API and 4301 - for front end)
# EXPOSE 4300 4301
EXPOSE 52000

CMD [ "npm", "start" ]

Хотя, когдаЯ запускаю свой dockerifle, разрешения изменились, но когда я пытаюсь выполнить развертывание в моем openshift, я получаю отказ в разрешении для некоторых файлов в этом каталоге.

Ответы [ 2 ]

1 голос
/ 20 октября 2019

По умолчанию любой контейнер, запущенный в OpenShift, получает случайный идентификатор пользователя. Поэтому изображения, не предназначенные для обработки такого случайного UID, потерпят неудачу с ошибками разрешения.

Для того, чтобы ваше изображение работало, я рекомендовал вам прочитать следующую статью последней документации OpenShift: https://docs.openshift.com/container-platform/4.2/openshift_images/create-images.html

Вот краткая версия, относящаяся к вашей проблеме:

ПОДДЕРЖКА ИДЕНТИФИКАЦИОННЫХ ПОЛЬЗОВАТЕЛЕЙ

По умолчанию OpenShift Container Platform запускает контейнеры, используя произвольно назначенный идентификатор пользователя. Это обеспечивает дополнительную защиту от процессов, покидающих контейнер из-за уязвимости механизма контейнера и, таким образом, достигающих повышенных разрешений на узле хоста.

Для образа, поддерживающего работу в качестве произвольного пользователя, каталогов и файлов, которые могут быть записаны впроцессы в образе должны принадлежать корневой группе и быть доступны для чтения / записи этой группой. Для файлов, которые должны быть выполнены, также должны быть предоставлены права на групповое выполнение.

Добавление следующего в ваш Dockerfile задает права доступа к каталогу и файлам, чтобы разрешить пользователям в корневой группе доступ к ним во встроенном образе:

RUN chgrp -R 0 /some/directory && \
    chmod -R g=u /some/directory 

Поскольку пользователь контейнера всегда является членом корневой группы, пользователь контейнера может читать и записывать эти файлы. Корневая группа не имеет каких-либо специальных разрешений (в отличие от пользователя root), поэтому в этом случае нет проблем с безопасностью. Кроме того, процессы, выполняющиеся в контейнере, не должны прослушивать привилегированные порты (порты ниже 1024), поскольку они не работают как привилегированный пользователь.

0 голосов
/ 20 октября 2019

OpenShift по умолчанию запускает Pod с произвольным UID. Вы можете проверить, какой UID используется в модуле, используя oc rsh <pod name> id. Ваш модуль может работать без использования указанного вами admin.

Для созданного вами контейнера требуется разрешение admin, поэтому вы должны настроить anyuid SCC на учетную запись службы по умолчанию, чтобы избежать ошибки разрешения. Дополнительную информацию о SCC можно найти здесь: Включить изображения контейнеров, для которых требуется Root .

например> default scc использует для запуска pod по умолчанию

$ oc adm policy add-scc-to-user anyuid -z default
$ oc delete pod <your pod name>

FYI,перед построением вашего изображения, проверьте здесь: Общие рекомендации по изображению контейнера полезно для создания вашего изображения, используемого в OpenShift.

...