المختبر 9.1 - إنشاء Roles و RoleBindings
أهداف المختبر
في نهاية هذا المختبر، ستكون قادرًا على:
- فهم مفهوم RBAC في Kubernetes.
- إنشاء Role مع أذونات محددة.
- إنشاء RoleBinding لربط مستخدم بـ Role.
- اختبار الأذونات باستخدام kubectl auth can-i.
- فهم الفرق بين Role و ClusterRole.
المدة المقدرة
45-60 دقيقة
المتطلبات المسبقة
- تثبيت وتكوين kubectl.
- وجود Cluster Kubernetes محلي يعمل.
- معرفة بـ RBAC (الفصل 9.1).
الجزء 1: فهم RBAC
RBAC (التحكم في الوصول المستند إلى الأدوار) يسمح بالتحكم في من يمكنه فعل ماذا في Kubernetes.
المفاهيم:
- Role: يحدد الأذونات في namespace.
- ClusterRole: يحدد الأذونات على مستوى العنقود.
- RoleBinding: يربط مستخدم/مجموعة/ServiceAccount بـ Role (في namespace).
- ClusterRoleBinding: يربط مستخدم/مجموعة/ServiceAccount بـ ClusterRole (على مستوى العنقود).
الجزء 2: إنشاء Role
سنقوم بإنشاء Role يسمح بقراءة وإنشاء Pods في namespace.
الخطوة 2.1: إنشاء Namespace للاختبار
قم بإنشاء namespace للاختبار:
kubectl create namespace rbac-test
الخطوة 2.2: إنشاء Role
قم بإنشاء role-pod-manager.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: rbac-test
name: pod-manager
rules:
- apiGroups: [""] # مجموعة API الأساسية (v1)
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods/status"]
verbs: ["get"]
التفسير:
apiGroups: [""]: مجموعة API الأساسية (موارد مثل Pods، Services، إلخ).resources: ["pods"]: المورد الذي تنطبق عليه الأذونات.verbs: الإجراءات المسموح بها (get، list، watch، create، update، patch، delete).
قم بتطبيق الـ Role:
kubectl apply -f role-pod-manager.yaml
تحقق:
kubectl get role -n rbac-test
kubectl describe role pod-manager -n rbac-test
الجزء 3: إنشاء RoleBinding
سنقوم بإنشاء RoleBinding يربط ServiceAccount بـ Role.
الخطوة 3.1: إنشاء ServiceAccount
قم بإنشاء ServiceAccount:
kubectl create serviceaccount pod-manager-sa -n rbac-test
الخطوة 3.2: إنشاء RoleBinding
قم بإنشاء rolebinding-pod-manager.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pod-manager-binding
namespace: rbac-test
subjects:
- kind: ServiceAccount
name: pod-manager-sa
namespace: rbac-test
roleRef:
kind: Role
name: pod-manager
apiGroup: rbac.authorization.k8s.io
التفسير:
subjects: لمن تُمنح الأذونات (ServiceAccount، User، Group).roleRef: مرجع إلى الـ Role (أو ClusterRole) للاستخدام.
قم بتطبيق الـ RoleBinding:
kubectl apply -f rolebinding-pod-manager.yaml
تحقق:
kubectl get rolebinding -n rbac-test
kubectl describe rolebinding pod-manager-binding -n rbac-test
الجزء 4: اختبار الأذونات
الخطوة 4.1: الحصول على Token الـ ServiceAccount
لاختبار الأذونات، نحتاج إلى استخدام token الـ ServiceAccount:
# الحصول على اسم الـ Secret الخاص بـ ServiceAccount
SECRET_NAME=$(kubectl get serviceaccount pod-manager-sa -n rbac-test -o jsonpath='{.secrets[0].name}')
# استخراج الـ token
TOKEN=$(kubectl get secret $SECRET_NAME -n rbac-test -o jsonpath='{.data.token}' | base64 -d)
# الحصول على شهادة CA
CA_CERT=$(kubectl get secret $SECRET_NAME -n rbac-test -o jsonpath='{.data.ca\.crt}')
الخطوة 4.2: اختبار باستخدام kubectl auth can-i
اختبر الأذونات باستخدام السياق الحالي الخاص بك (admin):
# تحقق مما إذا كان يمكنك إنشاء Pods
kubectl auth can-i create pods --namespace=rbac-test
# تحقق مما إذا كان يمكنك حذف Pods
kubectl auth can-i delete pods --namespace=rbac-test
# تحقق مما إذا كان يمكنك سرد Services (يجب أن يكون لا)
kubectl auth can-i list services --namespace=rbac-test
الخطوة 4.3: اختبار باستخدام الـ ServiceAccount
قم بإنشاء Pod يستخدم الـ ServiceAccount:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: rbac-test
spec:
serviceAccountName: pod-manager-sa
containers:
- name: test
image: bitnami/kubectl:latest
command: ["sleep", "3600"]
قم بتطبيق الـ Pod:
kubectl apply -f test-pod.yaml
نفذ أوامر داخل الـ Pod لاختبار الأذونات:
# اختبار إنشاء Pod (يجب أن يعمل)
kubectl exec -n rbac-test test-pod -- kubectl create pod test-pod-2 --image=busybox --dry-run=client -o yaml
# اختبار سرد الـ Pods (يجب أن يعمل)
kubectl exec -n rbac-test test-pod -- kubectl get pods
# اختبار سرد الـ Services (يجب أن يفشل)
kubectl exec -n rbac-test test-pod -- kubectl get services
الجزء 5: إنشاء ClusterRole
ClusterRole ينطبق على مستوى العنقود بأكمله.
الخطوة 5.1: إنشاء ClusterRole
قم بإنشاء clusterrole-node-viewer.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-viewer
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
قم بتطبيق الـ ClusterRole:
kubectl apply -f clusterrole-node-viewer.yaml
الجزء 6: التنظيف
احذف الموارد التي تم إنشاؤها:
kubectl delete pod test-pod -n rbac-test
kubectl delete rolebinding pod-manager-binding -n rbac-test
kubectl delete role pod-manager -n rbac-test
kubectl delete serviceaccount pod-manager-sa -n rbac-test
kubectl delete clusterrole node-viewer
kubectl delete namespace rbac-test
ملخص المختبر
في هذا المختبر، قمت بإنشاء Roles و RoleBindings لتطبيق RBAC. لقد تعلمت كيفية تحديد الأذونات باستخدام Roles، وربط المستخدمين/ServiceAccounts باستخدام RoleBindings، واختبار الأذونات.
الخطوات التالية
المختبر التالي سيعرض لك كيفية استخدام Service Accounts وأذوناتها في الـ Pods.
المختبر 9.2: Service Accounts وأذونات
تم إنشاء المختبر في: ديسمبر 2024