如何在开始构建之前授予容器 root 权限(serviceaccount)

How to give a container root permission (serviceaccount) before starting the build

Openshift 不允许 运行 容器作为 root,但您可以通过创建服务帐户来做到这一点:

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

然后修补部署配置,这将因此部署具有新更改的新复制控制器版本,是否可以创建服务帐户并将其包含在以下命令中:

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

并在上述命令中包含服务帐户名称,以避免拥有新版本的应用程序,或者是否有任何其他可能性预见到此 root 权限错误并将 pod 的安全性降低到 运行作为 root 无需修补或重新部署应用程序

Will 和 Graham 已经为您提供了很好的评论, 所以我建议它们的其他实用细节如下。

如果您在 oc new-app 之前将 anyuid scc 授予 default ServiceAccounttest pods 将会运行 为 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)

如果需要指定自定义ServiceAccount名称,可以提取oc new-appyaml,添加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)