# OpenShift - Tekton

{{#include ../../../banners/hacktricks-training.md}}

**Die oorspronklike skrywer van hierdie bladsy is** [**Haroun**](https://www.linkedin.com/in/haroun-al-mounayar-571830211)

### Wat is tekton

Volgens die dokument: _Tekton is 'n kragtige en buigsame oopbronraamwerk vir die skep van CI/CD stelsels, wat ontwikkelaars in staat stel om te bou, te toets en te ontplooi oor wolkverskaffers en op-premise stelsels._ Beide Jenkins en Tekton kan gebruik word om toepassings te toets, te bou en te ontplooi, maar Tekton is Cloud Native.

Met Tekton word alles verteenwoordig deur YAML-lêers. Ontwikkelaars kan Aangepaste Hulpbronne (CR) van tipe `Pipelines` skep en verskeie `Tasks` daarin spesifiseer wat hulle wil uitvoer. Om 'n Pipeline te laat loop, moet hulpbronne van tipe `PipelineRun` geskep word.

Wanneer tekton geïnstalleer word, word 'n diensrekening (sa) genaamd pipeline in elke naamruimte geskep. Wanneer 'n Pipeline uitgevoer word, sal 'n pod geskep word wat hierdie sa genaamd `pipeline` gebruik om die take wat in die YAML-lêer gedefinieer is, uit te voer.

{{#ref}}
https://tekton.dev/docs/getting-started/pipelines/
{{#endref}}

### Die Pipeline diensrekening vermoëns

Standaard kan die pipeline diensrekening die `pipelines-scc` vermoëns gebruik. Dit is te danke aan die globale standaardkonfigurasie van tekton. Trouens, die globale konfigurasie van tekton is ook 'n YAML in 'n openshift objek genaamd `TektonConfig` wat gesien kan word as jy 'n paar leserrolle in die kluster het.
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
```
In enige naamruimte, as jy die pipeline diensrekening token kan kry, sal jy in staat wees om `pipelines-scc` te gebruik.

### Die Misconfig

Die probleem is dat die standaard scc wat die pipeline sa kan gebruik, gebruikersbeheerbaar is. Dit kan gedoen word deur 'n etiket in die naamruimte-definisie te gebruik. Byvoorbeeld, as ek 'n naamruimte kan skep met die volgende yaml-definisie:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged
```
Die tekton-operateur sal die pyplyn-diensrekening in `test-namespace` die vermoë gee om die scc privileged te gebruik. Dit sal die montering van die node toelaat.

### Die oplossing

Tekton dokumenteer hoe om die oortreding van scc te beperk deur 'n etiket in die `TektonConfig` objek by te voeg.

{{#ref}}
https://tekton.dev/docs/operator/sccconfig/
{{#endref}}

Hierdie etiket word `max-allowed` genoem.
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"
```
{{#include ../../../banners/hacktricks-training.md}}
