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

الفصل 2.2 - API Server

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم دور API Server
  • شرح كيف يتحقق API Server من الطلبات ويعالجها
  • فهم المصادقة والتفويض
  • استخدام kubectl للتفاعل مع API Server

ما هو API Server؟​

API Server (kube-apiserver) هو نقطة الدخول الوحيدة لجميع التفاعلات مع عنقود Kubernetes. إنه المكون الوحيد الذي يتواصل معه المستخدمون والمكونات الأخرى للعنقود مباشرة.


أدوار API Server​

1. نقطة دخول وحيدة​

جميع الطلبات تمر عبر API Server:

  • kubectl → API Server
  • لوحة التحكم → API Server
  • المتحكمات → API Server
  • kubelet → API Server

2. التحقق​

API Server يتحقق من جميع الطلبات:

  • التنسيق الصحيح (YAML/JSON)
  • احترام المخطط
  • احترام القيود

3. المصادقة والتفويض​

  • المصادقة: من أنت؟ (شهادات، tokens، إلخ.)
  • التفويض: ماذا يمكنك أن تفعل؟ (RBAC، ABAC، إلخ.)

4. التحكم في القبول​

الإضافات التي يمكن أن تعدل أو ترفض الطلبات:

  • التحقق من الموارد
  • التعديلات (إضافة القيم الافتراضية)
  • الحصص والحدود

تدفق معالجة الطلب​


API REST لـ Kubernetes​

API Server يعرض API REST قياسي:

النقاط الرئيسية​

/api/v1/namespaces/{namespace}/pods
/api/v1/namespaces/{namespace}/services
/api/v1/namespaces/{namespace}/deployments
/apps/v1/namespaces/{namespace}/deployments

طرق HTTP​

  • GET: قراءة الموارد
  • POST: إنشاء الموارد
  • PUT: تحديث الموارد
  • PATCH: تعديل جزئي
  • DELETE: حذف الموارد

مثال مع kubectl​

# kubectl يحول الأوامر إلى استدعاءات API REST
kubectl get pods
# يصبح: GET /api/v1/namespaces/default/pods

kubectl create -f pod.yaml
# يصبح: POST /api/v1/namespaces/default/pods

المصادقة​

يدعم API Server عدة طرق للمصادقة:

1. شهادات X.509​

2. Service Accounts​

رموز (tokens) للـ Pods التي تتواصل مع الـ API:

apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app

3. Tokens ثابتة​

ملفات tokens للمصادقة الأساسية.


التفويض (RBAC)​

التحكم في الوصول المستند إلى الأدوار (RBAC) يحدد ما يمكن للمستخدم القيام به:

مثال على دور:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]

التحكم في القبول​

أدوات التحكم في القبول إضافات تعترض الطلبات:

أنواع التحكم في القبول​

  1. Validating: تحقق ويمكن أن ترفض
  2. Mutating: تعدل الطلبات قبل التخزين

أمثلة​

  • ResourceQuota: يحد من الموارد لكل namespace
  • LimitRanger: يطبق الحدود الافتراضية
  • PodSecurityPolicy: يطبق سياسات الأمان

الأداء والقابلية للتوسع​

التحسينات​

  • Watch API: إشعارات في الوقت الحقيقي بدلاً من الاستطلاع
  • Pagination: يحد من عدد النتائج
  • Field Selectors: تصفية النتائج على جانب الخادم

المقاييس المهمة​

  • زمن استجابة الطلبات
  • معدل النقل (طلبات/ثانية)
  • حجم الاستجابات

أوامر مفيدة​

# عرض نقاط النهاية لـ API
kubectl get --raw /

# عرض الموارد المتاحة
kubectl api-resources

# عرض إصدارات API
kubectl api-versions

# اختبار API مباشرة
kubectl proxy
# ثم: curl http://localhost:8001/api/v1/pods

ملخص​

في هذا الفصل، تعلمت:

API Server: نقطة دخول وحيدة لجميع التفاعلات
التحقق: يتحقق من تنسيق ومخطط الطلبات
الأمان: المصادقة والتفويض (RBAC)
التحكم في القبول: إضافات للتحقق والتعديل
API REST: واجهة قياسية للتفاعل مع Kubernetes


الخطوات التالية​

الآن بعد أن فهمت API Server:

الفصل 2.3: etcd - قاعدة بيانات المجموعة
الفصل 2.4: مدير التحكم


تم إنشاء الفصل في: ديسمبر 2024