Rollenbasierte Zugriffssteuerung in Kubernetes

KubernetesKubernetesIntermediate
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In einem Kubernetes-Cluster wird die Rollenbasierte Zugriffskontrolle (Role-Based Access Control, RBAC) verwendet, um den Zugriff auf Ressourcen und Operationen innerhalb des Clusters zu steuern. RBAC ermöglicht es Cluster-Administratoren, Rollen und Berechtigungen für Benutzer, Gruppen und Service Accounts zu definieren, um den Zugriff auf Ressourcen und Operationen innerhalb des Clusters zu kontrollieren. In diesem Lab (LabEx) werden Sie lernen, wie Sie RBAC verwenden, um den Zugriff auf Ressourcen in einem Kubernetes-Cluster zu steuern.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") subgraph Lab Skills kubernetes/initialization -.-> lab-9203{{"Rollenbasierte Zugriffssteuerung in Kubernetes"}} kubernetes/get -.-> lab-9203{{"Rollenbasierte Zugriffssteuerung in Kubernetes"}} kubernetes/create -.-> lab-9203{{"Rollenbasierte Zugriffssteuerung in Kubernetes"}} kubernetes/delete -.-> lab-9203{{"Rollenbasierte Zugriffssteuerung in Kubernetes"}} kubernetes/apply -.-> lab-9203{{"Rollenbasierte Zugriffssteuerung in Kubernetes"}} end

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum Standard-Projektordner:

    cd /home/labex/project
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    • Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Minikube kann je nach Leistung Ihres Systems einige Minuten dauern, um zu starten.
  3. Vergewissern Sie sich, dass Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    • Suchen Sie nach Komponenten wie kubelet und apiserver, die als Running aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.

Erstellen eines Namespaces

Erstellen Sie einen neuen Namespace namens myapp mit dem folgenden Befehl:

kubectl create namespace myapp

Erstellen einer Rolle

Erstellen Sie eine neue Rolle namens myapp-reader im Namespace myapp, die Benutzern erlaubt, Pods und Services im Namespace zu lesen, indem Sie die folgende YAML-Datei namens myapp-reader-role.yaml verwenden:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: myapp
  name: myapp-reader
rules:
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "watch", "list"]

Diese Rolle erlaubt es Benutzern, Pods und Services im Namespace myapp zu lesen (abrufen, beobachten und auflisten).

Erstellen Sie die Rolle mit dem folgenden Befehl:

kubectl apply -f myapp-reader-role.yaml

Erstellen einer Rollenbindung

Erstellen Sie eine Rollenbindung (Role Binding), die die Rolle myapp-reader an einen Benutzer oder eine Gruppe im Namespace myapp bindet. Beispielsweise, um die Rolle myapp-reader an den Benutzer developer im Namespace myapp zu binden, erstellen Sie die folgende YAML-Datei namens myapp-reader-binding.yaml:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-reader-binding
  namespace: myapp
subjects:
  - kind: User
    name: developer
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: myapp-reader
  apiGroup: rbac.authorization.k8s.io

Diese Rollenbindung bindet die Rolle myapp-reader an den Benutzer developer im Namespace myapp.

Erstellen Sie die Rollenbindung mit dem folgenden Befehl:

kubectl apply -f myapp-reader-binding.yaml

Zugriff testen

Testen Sie den Zugriff auf den Namespace myapp, indem Sie versuchen, die Liste der Pods im Namespace mit dem folgenden Befehl abzurufen:

kubectl get pods -n myapp --as developer

Sie sollten eine Meldung sehen, die darauf hinweist, dass es keine Ressourcen im Namespace myapp gibt, da es möglicherweise keine Pods in Ihrem Cluster gibt. Wenn Sie mit dem Lab fertig sind, sollten Sie mit diesem Befehl eine Liste der Pods im Namespace myapp sehen.

Testen Sie den Zugriff auf den Namespace default, indem Sie versuchen, die Liste der Pods im Namespace mit dem folgenden Befehl abzurufen:

kubectl get pods --as developer

Sie sollten eine Fehlermeldung sehen, die darauf hinweist, dass Sie keinen Zugriff auf den Namespace default haben.

Erstellen einer Clusterrolle

Erstellen Sie eine neue Clusterrolle (ClusterRole) namens myapp-admin, die Benutzern erlaubt, Pods und Services in allen Namespaces zu erstellen, zu löschen und zu aktualisieren, indem Sie die folgende YAML-Datei namens myapp-admin-clusterrole.yaml verwenden:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-admin
rules:
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "list", "watch", "create", "update", "delete"]

Diese Clusterrolle ermöglicht es Benutzern, alle Operationen (abrufen, auflisten, beobachten, erstellen, aktualisieren und löschen) auf Pods und Services in allen Namespaces auszuführen.

Erstellen Sie die Clusterrolle mit dem folgenden Befehl:

kubectl apply -f myapp-admin-clusterrole.yaml

Erstellen einer Clusterrollenbindung

Erstellen Sie eine Clusterrollenbindung (ClusterRole Binding), die die Clusterrolle myapp-admin an einen Benutzer oder eine Gruppe im Cluster bindet. Beispielsweise, um die Clusterrolle myapp-admin an den Benutzer cluster-admin zu binden, erstellen Sie die folgende YAML-Datei namens myapp-admin-binding.yaml:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-admin-binding
subjects:
  - kind: User
    name: cluster-admin
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: myapp-admin
  apiGroup: rbac.authorization.k8s.io

Diese Clusterrollenbindung bindet die Clusterrolle myapp-admin an den Benutzer cluster-admin.

Erstellen Sie die Clusterrollenbindung mit dem folgenden Befehl:

kubectl apply -f myapp-admin-binding.yaml

Zugriff testen

Testen Sie den Zugriff, um einen Pod im Namespace myapp zu erstellen, indem Sie einen Pod mithilfe der folgenden YAML-Datei namens myapp-pod.yaml erstellen:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  namespace: myapp
spec:
  containers:
    - name: myapp-container
      image: nginx
      ports:
        - containerPort: 80

Erstellen Sie den Pod mit dem folgenden Befehl:

kubectl apply -f myapp-pod.yaml --as cluster-admin

Sie sollten eine Meldung sehen, die darauf hinweist, dass der Pod erstellt wurde.

Testen Sie den Zugriff, um eine Bereitstellung (Deployment) im Namespace myapp zu erstellen, indem Sie eine Bereitstellung mithilfe der folgenden YAML-Datei myapp-deployment.yaml erstellen:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  namespace: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp-deployment
  template:
    metadata:
      labels:
        app: myapp-deployment
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Erstellen Sie den Pod mit dem folgenden Befehl:

kubectl apply -f myapp-deployment.yaml --as cluster-admin

Sie sollten eine Fehlermeldung sehen, die darauf hinweist, dass Sie keinen Zugriff haben, um eine Bereitstellung im Namespace myapp zu erstellen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) in Kubernetes verwenden, um den Zugriff auf Ressourcen und Operationen innerhalb des Clusters zu steuern. Sie haben einen Namespace, eine Rolle (Role) und eine Rollenbindung (Role Binding) erstellt, um den Zugriff auf Ressourcen in einem bestimmten Namespace zu steuern. Sie haben auch eine Clusterrolle (ClusterRole) und eine Clusterrollenbindung (ClusterRole Binding) erstellt, um den Zugriff auf Ressourcen in allen Namespaces zu steuern. Am Ende dieses Labs sollten Sie ein gutes Verständnis davon haben, wie Sie RBAC verwenden können, um den Zugriff auf Ressourcen und Operationen in einem Kubernetes-Cluster zu steuern.