nodes или persistentvolumes.kubectl.kubectl для управления кластером.BASH
kubectl get nodes kubectl для визуального управления кластером и мониторинга ресурсов можно использовать OpenLens — удобный инструмент с графическим интерфейсом для работы с Kubernetes. Для пользователей, предпочитающих графический интерфейс вместо командной строки, OpenLens может стать более наглядным и простым способом взаимодействия с кластером.create, update, patchget, list, watchpods в определённом неймспейсе (например, development):YAML
# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"] BASH
kubectl apply -f role.yaml development существует роль pod-reader, ограничивающая действия пользователя или сервисного аккаунта операциями чтения.pod-reader, которые разрешают операторам только просматривать состояние подов (pods) в соответствующем неймспейсе. Это помогает поддерживать безопасность и минимизировать риски, связанные с несанкционированными изменениями конфигураций системы.pod-reader с пользователем developer:YAML
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: development
subjects:
- kind: User
name: developer
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io BASH
kubectl apply -f rolebinding.yaml developer имеет права на просмотр подов (pods) в неймспейсе development.pod-reader, используется для мониторинга данных с датчиков, установленных в домах. Однако просто создания роли недостаточно — необходимо связать её с конкретным пользователем или сервисным аккаунтом, который будет выполнять эти задачи. Это позволяет точно контролировать, кто имеет доступ к данным и ресурсам в каждом отдельном доме.pod-reader к сервисному аккаунту home-operator в неймспейсе:YAML
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: home-namespace
subjects:
- kind: ServiceAccount
name: home-operator
namespace: home-namespace
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io app: front-end и role: back-end-api.YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
role: back-end-api
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: front-end app: front-end взаимодействовать с подами, у которых метка role: back-end-api. Это позволяет более строго контролировать доступ между разными компонентами системы.YAML
# clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"] BASH
kubectl apply -f clusterrole.yaml YAML
# clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"] cluster-pod-reader, которая позволяет инженерам читать данные о подах во всех неймспейсах кластера. Такая роль может быть полезна для мониторинга состояния подов на всех уровнях инфраструктуры, что критично для стабильности всей системы HomeGuard.ClusterRole с пользователем:YAML
# clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-read-pods
subjects:
- kind: User
name: developer
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-pod-reader
apiGroup: rbac.authorization.k8s.io BASH
kubectl apply -f clusterrolebinding.yaml developer имеет права на просмотр подов во всех неймспейсах кластера.cluster-pod-reader с конкретными группами инженеров или сервисными аккаунтами, давая им возможность мониторить состояние всех узлов и подов кластера.cluster-pod-reader с сервисным аккаунтом infrastructure-operator:YAML
# clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-read-pods
subjects:
- kind: ServiceAccount
name: infrastructure-operator
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-pod-reader
apiGroup: rbac.authorization.k8s.io
cluster-pod-reader с сервисным аккаунтом infrastructure-operator, который используется командой DevOps для мониторинга подов во всех неймспейсах. Теперь этот сервисный аккаунт может получать данные о подах по всему кластеру.secrets) одной группе пользователей и в определённом неймспейсе.
Создадим Role и RoleBinding для этого сценария:YAML
# secret-reader-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: secure-space
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"] YAML
# secret-reader-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-secrets
namespace: secure-space
subjects:
- kind: User
name: secure-operator
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: secret-reader
apiGroup: rbac.authorization.k8s.io BASH
kubectl apply -f secret-reader-role.yaml
kubectl apply -f secret-reader-binding.yaml secure-operator имеет доступ к секретам в неймспейсе secure-space.YAML
# devops-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: devops-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "delete", "list"] YAML
# devops-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: devops-access
namespace: development
subjects:
- kind: Group
name: devops-group
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: devops-role
apiGroup: rbac.authorization.k8s.io devops-group права только на управление подами в неймспейсе development.secret-manager, которые позволяют инженерам безопасности, просматривать и управлять секретами. Эти роли создаются с учётом минимальных привилегий. А сами данные сегментируются по неймспейсам и предоставляются только тем группам или сервисным аккаунтам, которым это действительно необходимо для работы. secret-manager ограничивает доступ только к секретам и ключам API, минимизируя риск утечек или несанкционированного доступа.` (например, "*" в поле verbs`) создает риск несанкционированного доступа. Это открывает больше возможностей для атак и утечек данных.ClusterRole вместо Role в ситуациях, когда роль нужна только для одного неймспейса, может привести к излишне широкому доступу. Используйте ClusterRole только тогда, когда роль должна охватывать весь кластер или взаимодействовать с кластерными ресурсами."get" для ресурса pods/log вместо более широких прав доступа.developers, чтобы контролировать права всех разработчиков единым образом.kubectl get roles,rolebindings --all-namespaces для получения списка всех настроек RBAC в кластере.Role и RoleBinding, чтобы ограничить влияние действиями только в рамках конкретного пространства имен.