デフォルトでは、ワークフローはargo名前空間に送信されます。リソースを分離し、権限制御を強制するために、別の名前空間にワークフローを送信する場合、デフォルトまたは目的のServiceAccountに権限を付与する必要があります。
承認ファイルを作成して、名前空間のServiceAccountに権限を付与できます。その後、ワークフローを名前空間に送信できます。
testという名前の名前空間を作成します。
kubectl create ns test
role-rolebinding.yamlという名前の承認ファイルを作成します。
説明この例では、デフォルトのServiceAccountが承認されています。ワークフローに他のServiceAccountが指定されている場合は、これらのServiceAccountに権限を付与します。
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` executorの推奨最小権限です。 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
YAMLファイルをデプロイして承認を完了します。
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
次の内容に基づいてアプリケーションを作成します。この例では、アプリケーションの名前はhelloworld-workflow.yamlです。
apiVersion: argoproj.io/v1alpha1 kind: Workflow # 新しい種類のk8s仕様 metadata: generateName: hello-world- # ワークフロー仕様の名前 spec: entrypoint: main # メインテンプレートを呼び出す templates: - name: main # テンプレートの名前 container: image: mirrors-ssl.aliyuncs.com/busybox:latest command: [ echo ] args: [ "hello world" ]
次のコマンドを実行して、ワークフローをtest名前空間に送信します。
argo submit helloworld-workflow.yaml -n test