الفصل 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"]
التحكم في القبول
أدوات التحكم في القبول إضافات تعترض الطلبات:
أنواع التحكم في القبول
- Validating: تحقق ويمكن أن ترفض
- 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