OpenShift - Tekton

O autor original desta página é Haroun

O que é o tekton

De acordo com a documentação: Tekton é um framework open-source poderoso e flexível para criar sistemas de CI/CD, permitindo que os desenvolvedores construam, testem e implementem em provedores de nuvem e sistemas locais. Tanto Jenkins quanto Tekton podem ser usados para testar, construir e implantar aplicativos, no entanto, o Tekton é nativo da nuvem.

Com o Tekton, tudo é representado por arquivos YAML. Os desenvolvedores podem criar Recursos Personalizados (CR) do tipo Pipelines e especificar vários 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á iniciado usando esta sa chamada pipeline para executar as tarefas definidas no arquivo YAML.

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 ocorre devido à configuração padrão global do tekton. Na verdade, a configuração global do tekton também é um arquivo YAML em um objeto openshift chamado TektonConfig que pode ser visto se você tiver algumas funções de leitura no cluster.

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 Configuração Incorreta

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 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 no test-namespace a capacidade de usar o scc privilegiado. Isso permitirá a montagem do nó.

A solução

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

Este rótulo é chamado max-allowed

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

Last updated