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.
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:
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
.
Esse rótulo é chamado de max-allowed
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"