デフォルトでは、Argo Workflows はすべてのワークフローを argo 名前空間に送信します。リソースと権限の隔離のために別の名前空間でワークフローを実行するには、ターゲット名前空間に対してロールベースのアクセス制御 (RBAC) を設定し、-n フラグを付けてワークフローを送信します。
一般的なユースケースとして、あるチームが CI/CD パイプラインを実行し、別のチームがデータ処理ジョブを実行する場合、argo 名前空間を共有するのではなく、各チームに独自の名前空間を割り当てます。
前提条件
開始する前に、以下のものが準備できていることを確認してください。
kubectl がインストールされ、ACK クラスターへのアクセスが設定されていること
Argo CLI (
argo) がインストールされていること
名前空間への RBAC 権限の付与
ステップ 1:ターゲット名前空間の作成
kubectl create ns testステップ 2:権限付与ファイルの作成
以下の内容で role-rolebinding.yaml という名前のファイルを作成します。これにより、5 つのロールと 4 つの RoleBinding が定義され、すべてが default サービスアカウントにバインドされます。
警告
default サービスアカウントは共有アカウントであり、意図しない権限が他のワークロードによって追加される可能性があります。本番環境のワークロードでは、default を使用する代わりに、ワークフロー専用のサービスアカウントを作成してください。
お使いの Argo Workflows のバージョンが v3.2 以前の場合は、agentロールのルールでworkflowtasksets/statusをpatch workflowtasksetsに置き換えてください。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
annotations:
workflows.argoproj.io/description: |
これは、エージェント (HTTP またはプラグインテンプレートなど) を使用する場合に必要となる、推奨される最小限の権限です。
v3.2 以前の場合は、`workflowtasksets/status` を `patch workflowtasksets` に置き換える必要があります。
name: agent
rules:
- apiGroups:
- argoproj.io
resources:
- workflowtasksets
verbs:
- list
- watch
- apiGroups:
- argoproj.io
resources:
- workflowtasksets/status
verbs:
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
annotations:
workflows.argoproj.io/description: |
これは、アーティファクト GC を使用する場合に必要となる、推奨される最小限の権限です。
name: artifactgc
rules:
- apiGroups:
- argoproj.io
resources:
- workflowartifactgctasks
verbs:
- list
- watch
- apiGroups:
- argoproj.io
resources:
- workflowartifactgctasks/status
verbs:
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
annotations:
workflows.argoproj.io/description: |
`emissary` エグゼキュータに推奨される最小限の権限。
name: executor
rules:
- apiGroups:
- argoproj.io
resources:
- workflowtaskresults
verbs:
- create
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: submit-workflow-template
rules:
- apiGroups:
- argoproj.io
resources:
- workfloweventbindings
verbs:
- list
- apiGroups:
- argoproj.io
resources:
- workflowtemplates
verbs:
- get
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
annotations:
workflows.argoproj.io/description: |
これは、リソーステンプレートを使用して他のワークフローを作成および管理する場合に必要となる権限の例です。同じパターンが、他のリソース (サービスなど) にも適しています。
name: workflow-manager
rules:
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- create
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: agent-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: agent
subjects:
- kind: ServiceAccount
name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: artifactgc-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: artifactgc
subjects:
- kind: ServiceAccount
name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: executor-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: executor
subjects:
- kind: ServiceAccount
name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: workflow-manager-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: workflow-manager
subjects:
- kind: ServiceAccount
name: defaultステップ 3:権限付与の適用
kubectl apply -f role-rolebinding.yaml -n test期待される出力は次のとおりです。
role.rbac.authorization.k8s.io/agent created
role.rbac.authorization.k8s.io/artifactgc created
role.rbac.authorization.k8s.io/executor created
role.rbac.authorization.k8s.io/submit-workflow-template created
role.rbac.authorization.k8s.io/workflow-manager created
rolebinding.rbac.authorization.k8s.io/agent-default created
rolebinding.rbac.authorization.k8s.io/artifactgc-default created
rolebinding.rbac.authorization.k8s.io/executor-default created
rolebinding.rbac.authorization.k8s.io/workflow-manager-default created名前空間へのワークフローの送信
ステップ 4:ワークフローファイルの作成
helloworld-workflow.yaml という名前のファイルを作成します。
apiVersion: argoproj.io/v1alpha1
kind: Workflow # Argo Workflows のための新しい Kubernetes リソースタイプを定義します。
metadata:
generateName: hello-world- # ワークフロー名のプレフィックス。Kubernetes が一意のサフィックスを追加します。
spec:
entrypoint: main # 最初に実行するテンプレートを指定します。
templates:
- name: main # テンプレートの名前。
container:
image: mirrors-ssl.aliyuncs.com/busybox:latest
command: [ echo ]
args: [ "hello world" ]ステップ 5:ワークフローの送信
ワークフローを test 名前空間に送信します。
argo submit helloworld-workflow.yaml -n test