Как дать корневое разрешение контейнера (serviceaccount) перед началом сборки

Openshift не позволяет запускать контейнеры от имени пользователя root, но вы можете сделать это, создав учетную запись службы:

oc adm policy add-scc-to-user anyuid -z useroot

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

oc new-app --name=test --docker-image=myregistry.com/test:latest

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


person Miira ben sghaier    schedule 30.03.2019    source источник
comment
Вам не нужна учетная запись службы ... в последний раз, когда я играл с этим, вы должны иметь возможность дать своему пользователю разрешение (просто оставьте -z и используйте свое имя пользователя) ... и этого должно быть достаточно, чтобы сделать это Работа. Но, честно говоря, прошло некоторое время с тех пор, как я сделал это. По крайней мере, может быть, это будет что-то стоящее тестирования?   -  person Will Gordon    schedule 31.03.2019
comment
Не ваш собственный пользователь, а default сервисный аккаунт проекта. Делать это на самом деле не рекомендуется, поскольку тогда все в проекте может работать как root. Лучшей практикой является использование отдельной учетной записи службы. См. cookbook.openshift.org/users-and-role-based-access-control/   -  person Graham Dumpleton    schedule 31.03.2019
comment
Спасибо всем за ответы, я обязательно попробую предложенное решение.   -  person Miira ben sghaier    schedule 31.03.2019


Ответы (1)


Уилл и Грэм уже предоставили вам отличные комментарии, поэтому я предлагаю дополнительные практические детали из них следующим образом.

Если вы предоставите anyuid scc пользователю default ServiceAccount до oc new-app, модули test будут работать с разрешением root без изменения версии.

# oc adm policy add-scc-to-user anyuid -z default
# oc new-app --name=test --docker-image=myregistry.com/test:latest

# oc rollout history dc/test
deploymentconfigs "test"
REVISION    STATUS      CAUSE
1       Complete    config change

# oc rsh dc/test id
uid=0(root) gid=0(root) groups=0(root)

OR

Если вам нужно указать пользовательское имя ServiceAccount, вы можете извлечь oc new-app yaml и создать ресурсы после добавления к нему элемента serviceAccountName: useroot. Эти действия также не изменяют версию развертывания.

# oc create sa useroot
# oc adm policy add-scc-to-user anyuid -z useroot
# oc new-app --name=test --docker-image=myregistry.com/test:latest -o yaml --dry-run > test.yml
# vim test.yml
apiVersion: v1
items:
- apiVersion: apps.openshift.io/v1
  kind: DeploymentConfig
  ...
  spec:
  ...
    template:
      spec:
        serviceAccountName: useroot
  ...
# oc create -f ./test.yml
imagestream.image.openshift.io/test created
deploymentconfig.apps.openshift.io/test created
service/test created

# oc rollout history dc/test
deploymentconfigs "test"
REVISION    STATUS      CAUSE
1       Complete    config change

# oc rsh dc/test id
uid=0(root) gid=0(root) groups=0(root)
person Daein Park    schedule 31.03.2019
comment
Спасибо за ваш ответ, на самом деле это хороший подход к моей проблеме, спасибо за помощь! - person Miira ben sghaier; 31.03.2019