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.
Starten Sie den Minikube-Cluster
Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.
Navigieren Sie zu Ihrem Arbeitsverzeichnis:
Öffnen Sie das Terminal und navigieren Sie zum Standard-Projektordner:
cd /home/labex/projectStarten 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.
Vergewissern Sie sich, dass Minikube läuft:
Überprüfen Sie den Status des Minikube-Clusters:
minikube status- Suchen Sie nach Komponenten wie
kubeletundapiserver, die alsRunningaufgeführt sind. - Wenn der Cluster nicht läuft, führen Sie
minikube starterneut aus.
- Suchen Sie nach Komponenten wie
Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.
Erstellen Sie einen Namespace
Erstellen Sie einen neuen Namespace namens myapp mit dem folgenden Befehl:
kubectl create namespace myapp
Erstellen Sie eine 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 Sie eine 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 Sie eine 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 Sie eine 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.


