انتقل إلى المحتوى الرئيسي

المختبر 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