OpenShift - Tekton

このページの元の著者は Haroun

tektonとは

ドキュメントによると:Tektonは、開発者がクラウドプロバイダーやオンプレミスシステム全体でビルド、テスト、デプロイを行うことを可能にする、強力で柔軟なオープンソースフレームワークです。 JenkinsとTektonの両方を使用してアプリケーションをテスト、ビルド、デプロイできますが、TektonはCloud Nativeです。

Tektonでは、すべてがYAMLファイルで表現されます。開発者はPipelinesタイプのカスタムリソース(CR)を作成し、実行したい複数のTasksを指定できます。Pipelineを実行するには、PipelineRunタイプのリソースを作成する必要があります。

tektonがインストールされると、各ネームスペースにpipelineというサービスアカウント(sa)が作成されます。Pipelineが実行されると、YAMLファイルで定義されたタスクを実行するために、このsaを使用してpipelineと呼ばれるポッドが生成されます。

Pipelinesに関するTektonドキュメント

Pipelineサービスアカウントの機能

デフォルトでは、pipelineサービスアカウントはpipelines-scc機能を使用できます。これは、tektonのグローバルデフォルト設定によるものです。実際、tektonのグローバル設定も、クラスター内でいくつかのリーダーロールを持っている場合に見ることができるTektonConfigというオープンシフトオブジェクトのYAMLです。

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

どの名前空間でも、パイプラインサービスアカウントトークンを取得できれば、pipelines-sccを使用できるようになります。

誤設定

問題は、パイプラインSAが使用できるデフォルトのSCCがユーザーによって制御可能であることです。これは、名前空間定義のラベルを使用して行うことができます。たとえば、次のyaml定義を使用して名前空間を作成できる場合:

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

テクトンオペレーターは、test-namespaceのパイプラインサービスアカウントにscc privilegedを使用する権限を与えます。これにより、ノードのマウントが可能になります。

修正

sccのオーバーライドを制限する方法については、TektonConfigオブジェクトにラベルを追加することが記載されています。

sccに関するテクトンのドキュメント

このラベルはmax-allowedと呼ばれます。

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

Last updated