すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:特定の名前空間へのワークフローの送信

最終更新日:Mar 26, 2026

デフォルトでは、ワークフローは argo 名前空間に送信されます。チームやプロジェクト間でのリソース隔離とアクセス制御のためにワークフローを別の名前空間に送信するには、まずその名前空間の ServiceAccount に、必要なロールベースのアクセス制御 (RBAC) 権限を付与します。

前提条件

開始する前に、以下を確認してください:

  • クラスターで Argo Workflows が実行中であること

  • kubectl 名前空間および RBAC リソースを作成する権限を持つアクセス

  • argo CLI のインストール

権限の付与とワークフローの送信

ステップ 1:ターゲット名前空間の作成

kubectl create ns test

ステップ 2:RBAC 認可ファイルの作成

以下の内容で、role-rolebinding.yaml という名前のファイルを作成します。

この例では、default ServiceAccount に権限を付与します。お使いのワークフローが別の ServiceAccount を指定している場合は、代わりにその ServiceAccount に権限を付与してください。RoleBinding は名前空間スコープであるため、権限は作成された名前空間内でのみ適用されます。これが、ステップ 3 でこのファイルを test 名前空間に適用する理由です。
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

このファイルでは、5 つのロールと 4 つのロールバインディングが定義されています。まずは executor ロールから始めてください。これは、あらゆるワークフローを実行するために最低限必要なロールです。残りのロールは、使用する機能にのみ追加してください:

ロール用途リソース
executor`emissary` エグゼキュータの最小要件workflowtaskresults (create, patch)
agentHTTP テンプレートおよびプラグインテンプレートworkflowtasksets (list, watch); workflowtasksets/status (patch)
artifactgcアーティファクトのガベージコレクションworkflowartifactgctasks (list, watch); workflowartifactgctasks/status (patch)
submit-workflow-templateWorkflowTemplates からのワークフローの送信workfloweventbindings (list); workflowtemplates (get); workflows (create)
workflow-managerリソーステンプレートからのワークフローの作成と管理workflows (create, get)

ステップ 3:認可ファイルの適用

ファイルを test 名前空間に適用して、そこにロールおよびロールバインディングを作成します:

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                  # 新しいタイプの k8s spec です。
metadata:
  generateName: hello-world-    # ワークフロー spec の名前です。
spec:
  entrypoint: main          # main テンプレートを呼び出します。
  templates:
    - name: main              # テンプレートの名前です。
      container:
        image: mirrors-ssl.aliyuncs.com/busybox:latest
        command: [ echo ]
        args: [ "hello world" ]

ステップ 5:ターゲット名前空間へのワークフローの送信

argo submit helloworld-workflow.yaml -n test

ワークフローは、手順 3 で付与された権限を使用して、test 名前空間内で実行されます。