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
对象,该对象以 build
用户,使用用户 id 1000
来构建镜像。另外,您还可以将 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 - 启动任务运行或管道运行。