OpenShift - Tekton

Reading time: 2 minutes

O autor original desta página é Haroun

O que é tekton

De acordo com a documentação: Tekton é uma estrutura poderosa e flexível de código aberto para criar sistemas de CI/CD, permitindo que os desenvolvedores construam, testem e implantem em provedores de nuvem e sistemas locais. Tanto Jenkins quanto Tekton podem ser usados para testar, construir e implantar aplicações, no entanto, Tekton é Cloud Native.

Com Tekton, tudo é representado por arquivos YAML. Os desenvolvedores podem criar Recursos Personalizados (CR) do tipo Pipelines e especificar várias Tasks neles que desejam executar. Para executar um Pipeline, recursos do tipo PipelineRun devem ser criados.

Quando o tekton é instalado, uma conta de serviço (sa) chamada pipeline é criada em cada namespace. Quando um Pipeline é executado, um pod será gerado usando esta sa chamada pipeline para executar as tarefas definidas no arquivo YAML.

Getting Started with Pipelines | Tekton

As capacidades da conta de serviço do Pipeline

Por padrão, a conta de serviço do pipeline pode usar a capacidade pipelines-scc. Isso se deve à configuração padrão global do tekton. Na verdade, a configuração global do tekton também é um YAML em um objeto openshift chamado TektonConfig que pode ser visto se você tiver alguns papéis de leitor no cluster.

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

Em qualquer namespace, se você conseguir obter o token da conta de serviço do pipeline, poderá usar pipelines-scc.

A Misconfiguração

O problema é que o scc padrão que a conta de serviço do pipeline pode usar é controlável pelo usuário. Isso pode ser feito usando um rótulo na definição do namespace. Por exemplo, se eu puder criar um namespace com a seguinte definição em yaml:

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

O operador tekton dará à conta de serviço do pipeline em test-namespace a capacidade de usar o scc privilegiado. Isso permitirá a montagem do nó.

A correção

Os documentos do Tekton sobre como restringir a substituição do scc adicionando um rótulo no objeto TektonConfig.

Tekton

Esse rótulo é chamado de max-allowed

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