OpenShift - Tekton

本页面展示了一个特权升级场景,假设集群中已安装了 Tekton 并且您可以创建一个命名空间(有时候编辑权限就足够了)

本页面的原始作者是 Haroun

什么是 Tekton

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

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

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

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"

配置错误

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

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

修复

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

此标签称为max-allowed

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

Last updated