Batch on GKE ユーザーの管理

始める前に

Batch on GKE をインストールしている必要があります。

  1. 管理ツールを入手します。

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  2. 管理ツールのディレクトリに移動します。

    cd admintools
    

権限の付与

Batch on GKE を使用するには、container.clusters.get で Kubernetes クラスタに対する認証を行うための権限が必要です。この権限により、次のコマンドを実行できます。 gcloud container clusters get-credentials <var>cluster-name</var>

この権限は、各 GCP プロジェクトのすべてのユーザーに付与する必要があります。この権限は、そのプロジェクトのすべてのクラスタに適用されます。

この権限を付与するには、次の 2 つの方法があります。

  1. カスタム役割とポリシー バインディングを作成します。

    container.clusters.get 権限を含むカスタム役割を作成するには、次のコマンドを実行します。

    gcloud iam roles create BatchUser --project [PROJECT_ID] \
     --title GKEClusterReader --permissions container.clusters.get --stage BETA 2>&1
    

    この役割をユーザーに付与します。

    gcloud projects add-iam-policy-binding [PROJECT_NAME] \
     --member=user:[USER_EMAIL] \
     --role=projects/[PROJECT_NAME]/roles/BatchUser
    
  2. 定義済みの containers.clusterViewer 役割をユーザーに付与します。

    gcloud projects add-iam-policy-binding [PROJECT_NAME] --member=user:[USER_EMAIL] --role=roles/container.clusterViewer
    

BatchUsers の追加

ユーザーにバッチジョブの送信を許可するには、特定の Kubernetes RBAC(役割ベースのアクセス制御)を付与する必要があります。新しいユーザーを追加するには、users ディレクトリに移動します。

cd users

自動 PVC を使用しないユーザーの追加

Batch で用意されているスクリプトを使用すると、必要なすべての RBAC を 1 ステップで追加できます。

./add-user.sh -s [SHORT_NAME] -u [USER'S_NAME] \
  -n [NAMESPACE] --project [PROJECT_ID] --security-policy [UID],[GROUP_ID]

このコマンドを実行すると、ユーザーに次の RBAC が生成されます。

  • BatchUserContext(名前: [SHORT_NAME]-[NAMESPACE])。UIDid とグループ ID が MustRunAs の形式で構成されます。
  • k8s の ClusterRole と ClusterRoleBinding(名前: [SHORT_NAME]-cr)。ユーザーに BatchCostModel および BatchPriority に対する読み取り権限が付与されます。
  • k8s の Role と RoleBinding(名前: [SHORT_NAME]-[NAMESPACE])。名前空間の BatchJobs に対する作成権限と読み取り権限が付与されます。

このすべての権限を付与すると、ユーザーは指定された Namespace で BatchJob を送信できます。

プライベート PVC を使用するユーザーの追加

クラスタに FileStore と NFS 自動プロビジョナーが設定されている場合は、次のコマンドを使用してユーザーを追加し、プライベート PVC を作成できます。

./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \
  --project [PROJECT_ID] --auto-pvc --security-policy "2000,3000"

ここで、2000 は UID、3000 は GID です。

RBAC 以外にも、--auto-pvc フラグを使用すると、NFS ベースの PVC が作成されます。NFS 自動プロビジョナーは、NFS サーバーの下にフォルダを作成します。次のような追加リソースがユーザーの名前空間内に作成されます。

[SHORT_NAME]-[NAMESPACE]という名前の PersistentVolumeClaim。上記の PVC にバインドされた PersistentVolume。この PVC を使用できるように、ユーザーに RBAC を付与します。

共有 PVC を使用するユーザーの追加

ユーザーを追加して特定の PVC に対するアクセスを許可するには、次のコマンドを実行します。

./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \
  --project [PROJECT_ID] --pvcs [PVC_NAME],[PVC_NAME] --security-policy "2000,3000"

ユーザーの削除

BatchJob の送信と表示を行う権限をユーザーから削除するには、次のコマンドを実行します。

./delete-user.sh -s [SHORT_NAME] -n [NAMESPACE]

[SHORT_NAME] は、ユーザーの追加時に使用した略称です。

ユーザー設定のカスタマイズ

BatchUserContext(BUC)は、ジョブのセキュリティ コンテキストを構成する Batch API リソースです。BatchUserContext は、ユーザーと PodSecurityPolicySpec を関連付けます。さらに、このユーザーが送信するバッチジョブのセキュリティ コンテキストを定義します。

BatchUserContext で構成可能な重要な要素は次のとおりです。

  • ジョブが実行される Unix ID(UID)。
  • ジョブを特権モードの root として実行できるかどうか。
  • このユーザーが使用できるボリュームのタイプ。

ジョブを送信すると、Batch は BUC に基づいて次の 2 つの処理を行います。

  • BatchJob 仕様がポリシーに違反していないことを検証します。たとえば、ポリシーで特権モードでの BatchJob の実行をブロックしている場合、BatchJob の [privileged] フィールドが true に設定されていても、ジョブの送信に失敗します。

  • BUC の値をジョブ仕様の空のフィールドにコピーします。たとえば、BUC の UID が MustRunAs: 3000 に設定されていて、ジョブに RunAs 値が設定されていない場合、BatchJob は受け入れられ、RunAs フィールドは 3,000 に設定されます。

各フィールドの詳細については、PodSecurityPolicySpec を参照してください。

たとえば、デフォルトの BatchUserContext は次のようになります。

apiVersion: kbatch.k8s.io/v1beta1
kind: BatchUserContext
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: alice-default
  namespace: default
spec:
  userName: "*"
  securityPolicySpec:
    privileged: false
    allowPrivilegeEscalation: false
    requiredDropCapabilities:
      - ALL
    volumes:
      - 'configMap'
      - 'emptyDir'
      - 'secret'
      - 'downwardAPI'
      - 'persistentVolumeClaim'
    hostNetwork: false
    hostIPC: false
    hostPID: false
    runAsUser:
      rule: 'MustRunAs'
      ranges:
        - min: 12345
          max: 12345
    seLinux:
      rule: 'RunAsAny'
    runAsGroup:
      rule: 'MustRunAs'
      ranges:
        - min: 12345
          max: 12345
    fsGroup:
      rule: 'MustRunAs'
      ranges:
        - min: 12345
          max: 12345
    supplementalGroups:
      rule: 'MustRunAs'
      ranges:
        - min: 12345
          max: 12345

BatchUserContext の作成

BatchUserContext を作成するには、次のコマンドを実行します。

kubectl create -f [NAME]-default-buc.yaml

BatchUserContext の更新

BatchUserContext を変更するには、変更をファイルに保存した後、次のコマンドを実行します。

kubectl apply -f [NAME]-default-buc.yaml

BatchUserContext の削除

BatchUserContext を削除するには、次のコマンドを実行します。

kubectl delete -f [NAME]-default-buc.yaml

次のステップ