Batch on GKE-Nutzer verwalten

Hinweis

Sie müssen bereits Batch on GKE installiert haben.

  1. Rufen Sie die Verwaltungstools ab:

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  2. Wechseln Sie in das Verzeichnis mit den Verwaltungstools:

    cd admintools
    

Berechtigungen gewähren

Nutzer müssen sich mit container.clusters.get beim Kubernetes-Cluster authentifizieren können, um Batch on GKE zu verwenden. Diese Berechtigung ermöglicht Nutzern die Ausführung von: gcloud container clusters get-credentials <var>cluster-name</var>

Diese Berechtigung muss jedem Nutzer in jedem GCP-Projekt erteilt werden. Sobald Sie Berechtigungen erteilen, funktioniert das für jeden Cluster in diesem Projekt.

Sie können diese Berechtigung auf zwei Weisen erteilen:

  1. Erstellen Sie eine benutzerdefinierte Rolle und eine Richtlinienbindung.

    Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle mit der Berechtigung container.clusters.get zu erstellen:

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

    Weisen Sie die Rolle dann einem Nutzer zu:

    gcloud projects add-iam-policy-binding [PROJECT_NAME] \
     --member=user:[USER_EMAIL] \
     --role=projects/[PROJECT_NAME]/roles/BatchUser
    
  2. Gewähren Sie für den Nutzer die vordefinierte Rolle "containers.clusterViewer".

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

Batch-User hinzufügen

Damit Nutzer Batchjobs senden können, müssen Sie ihnen bestimmte Kubernetes-RBACs (rollenbasierte Zugriffssteuerungen) gewähren. Öffnen Sie das Nutzerverzeichnis, um einen neuen Nutzer hinzuzufügen:

cd users

Nutzer ohne automatisches PVC hinzufügen

Batch stellt ein Skript bereit, mit dem alle erforderlichen RBACs in einem Schritt hinzugefügt werden:

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

Mit diesem Befehl werden die folgenden RBACs für den Nutzer generiert:

  • Ein BatchUserContext (mit dem Namen [SHORT_NAME][NAMESPACE]) mit der als MustRunAs konfigurierten UIDid und Gruppen-ID.
  • Eine k8s-ClusterRole und -ClusterRoleBinding (mit dem Namen [SHORT_NAME]-cr), um dem Nutzer die Leseberechtigung von BatchCostModel und BatchPriority zu gewähren.
  • Eine k8s-Role und -RoleBinding (mit dem Namen [SHORT_NAME]-[NAMESPACE]), um BatchJobs im Namespace Berechtigungen zum Erstellen und Lesen zu gewähren.

Mit diesen Berechtigungen kann ein Nutzer BatchJobs im angegebenen Namespace senden.

Nutzer mit einem privaten PVC hinzufügen

Wenn Sie FileStore und eine automatische NFS-Bereitstellung in Ihrem Cluster eingerichtet haben, können Sie den folgenden Befehl ausführen, um einen Nutzer hinzuzufügen und ein privates PVC zu erstellen:

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

Dabei steht 2000 für die UID und 3000 für die GID.

Zusätzlich zu den RBACs bewirkt das Flag --auto-pvc, dass ein NFS-basiertes PVC erstellt wird. Die automatische NFS-Bereitstellung erstellt auf dem NFS-Server einen Ordner. Für Nutzer werden innerhalb des Namespace unter anderem folgende zusätzliche Ressourcen erstellt:

Ein PersistentVolumeClaim mit dem Namen [SHORT_NAME]-[NAMESPACE]. Ein PersistentVolume, das an das oben genannte PVC gebunden ist. Gewähren Sie dem Nutzer die RBACs, um diesen PVC verwenden zu können.

Nutzer mit freigegebenem PVC hinzufügen

Führen Sie den folgenden Befehl aus, um einen Nutzer hinzuzufügen und Zugriff auf bestimmte PVCs zu gewähren:

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

Nutzer löschen

Um für einen Nutzer die Berechtigungen zum Senden und Aufrufen von BatchJobs zu widerrufen, führen Sie den folgenden Befehl aus:

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

Der [SHORT_NAME] ist der gleiche Kurzname, der beim Hinzufügen des Nutzers verwendet wurde.

Nutzereinstellungen anpassen

BatchUserContext (BUC) ist eine Batch API-Ressource, die den Sicherheitskontext eines Jobs konfiguriert. BatchUserContext verknüpft einen Nutzer mit einer PodSecurityPolicySpec. Dadurch wird der Sicherheitskontext für die Batchjobs definiert, die von diesem Nutzer gesendet wurden.

Wichtige Dinge, die vom BatchUserContext konfiguriert werden können:

  • Unix-Identität (UID), unter der der Job ausgeführt wird
  • Ob der Job im privilegierten Modus als Root ausgeführt werden kann
  • Der Typ der Volumes, die von diesem Nutzer verwendet werden können

Wenn ein Job gesendet wird, führt Batch die folgenden beiden Vorgänge basierend auf BUC aus:

  • Validiert, dass die BatchJob-Spezifikation nicht gegen die Richtlinie verstößt. Wenn die Richtlinie beispielsweise verhindert, dass ein BatchJob im privilegierten Modus ausgeführt wird, das Feld "privileged" des BatchJobs aber auf "true" gesetzt ist, schlägt das Senden des Jobs fehl.

  • Kopiert Werte aus dem BUC in leere Felder in der Jobspezifikation. Wenn die UID im BUC beispielsweise auf MustRunAs: 3000 festgelegt ist und der Job keinen RunAs-Wert hat, akzeptiert Batch den BatchJob und setzt das Feld RunAs auf 3.000.

Beschreibungen aller Felder finden Sie unter PodSecurityPolicySpec.

Der Standard-BatchUserContext ist zum Beispiel:

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 erstellen

Führen Sie zum Erstellen eines BatchUserContext den folgenden Befehl aus:

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

BatchUserContext aktualisieren

Führen Sie den folgenden Befehl aus, nachdem Sie Ihre Änderungen in der Datei gespeichert haben, um einen BatchUserContext zu ändern:

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

BatchUserContext löschen

Führen Sie den folgenden Befehl aus, um einen BatchUserContext zu löschen:

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

Nächste Schritte