← Về danh sách bài học
Bài 21/25
👤 Bài 21: RBAC - Quản Lý Quyền
🎯 Sau bài học này, bạn sẽ:
- Hiểu RBAC (Role-Based Access Control)
- Tạo Role và ClusterRole
- Bind roles cho users/groups
- Tạo ServiceAccount
1. RBAC Components
| Resource | Scope | Mô tả |
|---|---|---|
| Role | Namespace | Quyền trong 1 namespace |
| ClusterRole | Cluster | Quyền toàn cluster |
| RoleBinding | Namespace | Gán Role cho user |
| ClusterRoleBinding | Cluster | Gán ClusterRole |
2. Role (Namespace-scoped)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: [""] # "" = core API
resources: ["pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list"]
💡 Verbs phổ biến: get, list, watch, create, update, patch, delete
3. RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
- kind: ServiceAccount
name: my-app
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
4. ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
5. ServiceAccount
# Tạo ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app
namespace: default
---
# Pod sử dụng ServiceAccount
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: my-app
containers:
- name: app
image: myapp:1.0
6. Kiểm Tra Quyền
# Kiểm tra quyền của mình
kubectl auth can-i create pods
kubectl auth can-i delete deployments -n production
# Kiểm tra quyền của user khác (admin)
kubectl auth can-i create pods --as jane
kubectl auth can-i list secrets --as system:serviceaccount:default:my-app
📝 Tóm Tắt
- Role/ClusterRole: Định nghĩa quyền
- RoleBinding: Gán quyền cho users
- ServiceAccount: Identity cho pods
kubectl auth can-iđể test