Введение
В кластере Kubernetes для управления доступом к ресурсам и операциям в рамках кластера используется система контроля доступа на основе ролей (Role-Based Access Control, RBAC). RBAC позволяет администраторам кластера определять роли и разрешения для пользователей, групп и учетных записей служб, чтобы контролировать доступ к ресурсам и операциям в кластере. В этом лабораторном занятии (LabEx) вы научитесь использовать RBAC для управления доступом к ресурсам в кластере Kubernetes.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Проверьте, чтобы компоненты, такие как
kubeletиapiserver, были перечислены какRunning(работающие). - Если кластер не запущен, запустите команду
minikube startснова.
- Проверьте, чтобы компоненты, такие как
Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.
Создайте пространство имен (Namespace)
Создайте новое пространство имен с именем myapp с помощью следующей команды:
kubectl create namespace myapp
Создайте роль (Role)
Создайте новую роль с именем myapp-reader в пространстве имен (namespace) myapp, которая позволяет пользователям читать поды (pods) и сервисы (services) в этом пространстве имен, используя следующий YAML-файл с именем myapp-reader-role.yaml:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: myapp
name: myapp-reader
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "watch", "list"]
Эта роль позволяет пользователям читать (получать, отслеживать и перечислять) поды и сервисы в пространстве имен myapp.
Создайте роль с помощью следующей команды:
kubectl apply -f myapp-reader-role.yaml
Создайте привязку роли (Role Binding)
Создайте привязку роли, которая связывает роль myapp-reader с пользователем или группой в пространстве имен (namespace) myapp. Например, чтобы связать роль myapp-reader с пользователем developer в пространстве имен myapp, создайте следующий YAML-файл с именем 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
Эта привязка роли связывает роль myapp-reader с пользователем developer в пространстве имен myapp.
Создайте привязку роли с помощью следующей команды:
kubectl apply -f myapp-reader-binding.yaml
Тестирование доступа
Протестируйте доступ к пространству имен (namespace) myapp, попробовав получить список подов (pods) в этом пространстве имен с помощью следующей команды:
kubectl get pods -n myapp --as developer
Вы должны увидеть сообщение, которое указывает на то, что в пространстве имен myapp нет ресурсов, так как в вашем кластере, возможно, нет подов. Когда вы закончите работу с лабораторной работой, используйте эту команду, и вы должны увидеть список подов в пространстве имен myapp.
Протестируйте доступ к пространству имен default, попробовав получить список подов в этом пространстве имен с помощью следующей команды:
kubectl get pods --as developer
Вы должны увидеть сообщение об ошибке, которое указывает на то, что у вас нет доступа к пространству имен default.
Создайте кластерную роль (ClusterRole)
Создайте новую кластерную роль с именем myapp-admin, которая позволяет пользователям создавать, удалять и обновлять поды (pods) и сервисы (services) во всех пространствах имен (namespaces), используя следующий YAML-файл с именем myapp-admin-clusterrole.yaml:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: myapp-admin
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch", "create", "update", "delete"]
Эта кластерная роль позволяет пользователям выполнять все операции (получать, перечислять, отслеживать, создавать, обновлять и удалять) с подами и сервисами во всех пространствах имен.
Создайте кластерную роль с помощью следующей команды:
kubectl apply -f myapp-admin-clusterrole.yaml
Создайте привязку кластерной роли (ClusterRole Binding)
Создайте привязку кластерной роли, которая связывает кластерную роль myapp-admin с пользователем или группой в кластере. Например, чтобы связать кластерную роль myapp-admin с пользователем cluster-admin, создайте следующий YAML-файл с именем 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
Эта привязка кластерной роли связывает кластерную роль myapp-admin с пользователем cluster-admin.
Создайте привязку кластерной роли с помощью следующей команды:
kubectl apply -f myapp-admin-binding.yaml
Тестирование доступа
Протестируйте доступ для создания пода (pod) в пространстве имен (namespace) myapp, создав под с использованием следующего YAML-файла с именем myapp-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: myapp
spec:
containers:
- name: myapp-container
image: nginx
ports:
- containerPort: 80
Создайте под с помощью следующей команды:
kubectl apply -f myapp-pod.yaml --as cluster-admin
Вы должны увидеть сообщение, которое указывает на то, что под был создан.
Протестируйте доступ для создания развертывания (deployment) в пространстве имен myapp, создав развертывание с использованием следующего YAML-файла myapp-deployment.yaml:
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
Создайте под с помощью следующей команды:
kubectl apply -f myapp-deployment.yaml --as cluster-admin
Вы должны увидеть сообщение об ошибке, которое указывает на то, что у вас нет доступа для создания развертывания в пространстве имен myapp.
Резюме
В этой лабораторной работе вы научились использовать систему управления доступом на основе ролей (Role-Based Access Control, RBAC) в Kubernetes для контроля доступа к ресурсам и операциям в кластере. Вы создали пространство имен (namespace), роль (Role) и привязку роли (Role Binding) для контроля доступа к ресурсам в определенном пространстве имен. Вы также создали кластерную роль (ClusterRole) и привязку кластерной роли (ClusterRole Binding) для контроля доступа к ресурсам во всех пространствах имен. По завершении этой лабораторной работы вы должны хорошо понимать, как использовать RBAC для контроля доступа к ресурсам и операциям в кластере Kubernetes.


