OpenShift - Tekton

Der ursprüngliche Autor dieser Seite ist Haroun

Was ist Tekton

Laut der Dokumentation: Tekton ist ein leistungsstarkes und flexibles Open-Source-Framework zur Erstellung von CI/CD-Systemen, das Entwicklern ermöglicht, über Cloud-Anbieter und lokale Systeme hinweg zu bauen, zu testen und bereitzustellen. Sowohl Jenkins als auch Tekton können verwendet werden, um Anwendungen zu testen, zu bauen und bereitzustellen, jedoch ist Tekton Cloud Native.

Mit Tekton wird alles durch YAML-Dateien dargestellt. Entwickler können benutzerdefinierte Ressourcen (CR) vom Typ Pipelines erstellen und mehrere Tasks angeben, die sie ausführen möchten. Um eine Pipeline auszuführen, müssen Ressourcen vom Typ PipelineRun erstellt werden.

Wenn Tekton installiert ist, wird in jedem Namespace ein Dienstkonto (sa) namens pipeline erstellt. Wenn eine Pipeline ausgeführt wird, wird ein Pod erstellt, der dieses sa namens pipeline verwendet, um die im YAML-Dokument definierten Aufgaben auszuführen.

Tekton-Dokumentation über Pipelines

Die Fähigkeiten des Pipeline-Dienstkontos

Standardmäßig kann das Pipeline-Dienstkonto die Fähigkeit pipelines-scc nutzen. Dies liegt an der globalen Standardkonfiguration von Tekton. Tatsächlich ist die globale Konfiguration von Tekton ebenfalls ein YAML in einem OpenShift-Objekt namens TektonConfig, das sichtbar ist, wenn Sie einige Leserollen im Cluster haben.

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

In jedem Namespace, wenn Sie das Token des Pipeline-Servicekontos erhalten können, werden Sie in der Lage sein, pipelines-scc zu verwenden.

Die Fehlkonfiguration

Das Problem ist, dass die standardmäßige SCC, die das Pipeline-SA verwenden kann, vom Benutzer kontrollierbar ist. Dies kann durch ein Label in der Namespace-Definition erfolgen. Zum Beispiel, wenn ich einen Namespace mit der folgenden YAML-Definition erstellen kann:

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

Der Tekton-Operator wird dem Pipeline-Dienstkonto im test-namespace die Fähigkeit geben, die scc privileged zu verwenden. Dies ermöglicht das Mounten des Knotens.

Die Lösung

Tekton-Dokumente darüber, wie man die Überschreibung von scc einschränken kann, indem man ein Label im TektonConfig-Objekt hinzufügt.

Dieses Label wird max-allowed genannt.

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

Last updated