6.2. 通过定义自定义 SA 和 SCC,以非 root 用户身份运行 Buildah
要以非 root 用户身份使用 Buildah 运行容器镜像的构建,可以执行以下步骤:
- 定义自定义服务帐户 (SA) 和安全性上下文约束 (SCC)。
-
配置 Buildah,以使用 ID 为
1000
的build
用户。 - 使用自定义配置映射启动任务运行,或将其与管道运行集成。
6.2.1. 配置自定义服务帐户和安全上下文约束 复制链接链接已复制到粘贴板!
默认 pipeline
SA 允许使用命名空间范围之外的用户 ID。要减少对默认 SA 的依赖性,您可以为 ID 为 1000
的 build
用户定义具有必要的集群角色和角色绑定的自定义 SA 和 SCC。
目前,Buildah 需要启用 allowPrivilegeEscalation
设置,才能在容器中运行。通过这个设置,Buildah 可以在以非 root 用户身份运行时利用 SETUID
和 SETGID
功能。
流程
使用必要的集群角色和角色绑定创建自定义 SA 和 SCC。
示例:用户 id 为
1000
的自定义 SA 和 SCC。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.2. 配置 Buildah 以使用 build 用户 复制链接链接已复制到粘贴板!
您可以定义一个 Buildah 任务,以使用带有用户 ID 1000
的 build
用户。
流程
创建
openshift-pipelines
命名空间中提供的buildah
任务的副本;将副本的名称更改为buildah-as-user
。oc get task buildah -n openshift-pipelines -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -
$ oc get task buildah -n openshift-pipelines -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑复制的
buildah
任务。oc edit task buildah-as-user
$ oc edit task buildah-as-user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例:使用
build
用户修改 Buildah 任务Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. 使用自定义配置映射或管道运行启动任务运行 复制链接链接已复制到粘贴板!
定义自定义 Buildah 任务后,您可以创建一个 TaskRun
对象,以具有用户 ID 1000
的 build
用户身份构建镜像。另外,您还可以将 TaskRun
对象集成为 PipelineRun
对象的一部分。
流程
使用自定义
ConfigMap
和Dockerfile
对象创建一个TaskRun
对象。示例:以用户 ID
1000
身份运行 Buildah 的任务运行Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)创建管道和对应的管道运行。
示例:管道和对应的管道运行
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启动任务运行或管道运行。