OpenShift - Tekton

该页面的原作者是 Haroun

什么是 tekton

根据文档:Tekton 是一个强大且灵活的开源框架,用于创建 CI/CD 系统,允许开发人员在云提供商和本地系统上构建、测试和部署。 Jenkins 和 Tekton 都可以用于测试、构建和部署应用程序,但 Tekton 是云原生的。

在 Tekton 中,一切都由 YAML 文件表示。开发人员可以创建类型为 Pipelines 的自定义资源(CR),并在其中指定他们想要运行的多个 Tasks。要运行 Pipeline,必须创建类型为 PipelineRun 的资源。

当安装 tekton 时,在每个命名空间中会创建一个名为 pipeline 的服务账户(sa)。当运行 Pipeline 时,将使用名为 pipeline 的此 sa 启动一个 pod,以运行 YAML 文件中定义的任务。

Tekton 关于 Pipelines 的文档

Pipeline 服务账户的能力

默认情况下,pipeline 服务账户可以使用 pipelines-scc 能力。这是由于 tekton 的全局默认配置。实际上,tekton 的全局配置也是一个 YAML,位于一个名为 TektonConfig 的 openshift 对象中,如果您在集群中拥有一些读取角色,则可以看到它。

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"

在任何命名空间中,如果您能够获取管道服务帐户令牌,您将能够使用 pipelines-scc

配置错误

问题在于,管道服务帐户可以使用的默认 scc 是用户可控的。这可以通过命名空间定义中的标签来完成。例如,如果我可以使用以下 yaml 定义创建一个命名空间:

apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged

The tekton operator 将会赋予 test-namespace 中的 pipeline 服务账户使用 scc privileged 的能力。这将允许挂载节点。

修复方法

Tekton 文档关于如何通过在 TektonConfig 对象中添加标签来限制 scc 的覆盖。

Tekton 文档关于 scc

这个标签被称为 max-allowed

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"

Last updated