Kubernetes Service Accounts

From binaryoption
Jump to navigation Jump to search
Баннер1

```wiki

حسابات خدمة Kubernetes للمبتدئين

حسابات خدمة Kubernetes هي هوية تستخدمها العمليات التي تعمل داخل Pods للوصول إلى API Server الخاص بـ Kubernetes. إنها طريقة آمنة وفعالة لمنح التطبيقات الخاصة بك الأذونات اللازمة للتفاعل مع Kubernetes cluster دون الحاجة إلى استخدام حسابات مستخدمين حقيقية. هذا المقال موجه للمبتدئين ويهدف إلى شرح كل ما تحتاج معرفته حول حسابات الخدمة، بما في ذلك كيفية إنشائها وتكوينها واستخدامها، مع أمثلة عملية.

ما هي حسابات الخدمة ولماذا نحتاجها؟

في Kubernetes، كل Pod يمثل وحدة نشر أساسية. داخل كل Pod، تعمل الحاويات (Containers). تتطلب هذه الحاويات في كثير من الأحيان الوصول إلى موارد Kubernetes الأخرى، مثل:

  • قراءة البيانات من ConfigMaps و Secrets
  • قراءة حالة التطبيقات الأخرى
  • تحديث الخدمات (Services)
  • إنشاء أو تعديل موارد Kubernetes الأخرى

بدلاً من ربط حساب مستخدم حقيقي بكل Pod، وهو أمر غير آمن وغير قابل للتطوير، تستخدم Kubernetes حسابات الخدمة (Service Accounts) لتوفير هوية فريدة لكل مجموعة من Pods.

تخيل أن لديك تطبيقاً يتكون من عدة Pods. كل Pod يحتاج إلى قراءة بيانات سرية (Secrets) من Kubernetes لتشغيل البرنامج بشكل صحيح. بدلاً من إعطاء كل Pod حق الوصول المباشر إلى هذه البيانات السرية، يمكنك ربط حساب خدمة بـ Pods هذه. ثم تمنح حساب الخدمة الأذونات اللازمة للوصول إلى البيانات السرية. بهذه الطريقة، يمكنك التحكم في الوصول إلى موارد Kubernetes بشكل مركزي وآمن.

المكونات الرئيسية لحسابات الخدمة

  • حساب الخدمة (Service Account): هوية فريدة داخل Kubernetes namespace.
  • Token (رمز): سلسلة نصية تستخدم للتحقق من هوية حساب الخدمة عند الوصول إلى API Server. يتم إنشاء هذا الرمز تلقائياً.
  • RBAC (Role-Based Access Control): آلية لتحديد الأذونات التي يتم منحها لحسابات الخدمة. يتم ذلك عن طريق ربط حسابات الخدمة بـ Roles و RoleBindings.
  • Role (دور): مجموعة من الأذونات التي تحدد ما يمكن لحساب الخدمة القيام به.
  • RoleBinding (ربط الدور): يربط حساب خدمة بدور معين، مما يمنح حساب الخدمة الأذونات المحددة في هذا الدور.

أنواع حسابات الخدمة

هناك نوعان رئيسيان من حسابات الخدمة:

  • Default Service Account (حساب الخدمة الافتراضي): يتم إنشاؤه تلقائياً في كل namespace. إذا لم تحدد حساب خدمة لـ Pod، فسيتم استخدام حساب الخدمة الافتراضي. عادةً ما يكون لديه أذونات محدودة.
  • User-Defined Service Account (حساب الخدمة المعرف من قبل المستخدم): يمكنك إنشاء حسابات خدمة مخصصة لتلبية احتياجات تطبيقك الخاصة. توفر هذه الحسابات مرونة أكبر وتحكماً أدق في الأذونات.

إنشاء حساب خدمة

يمكنك إنشاء حساب خدمة باستخدام الأمر `kubectl create serviceaccount`:

```bash kubectl create serviceaccount my-service-account -n my-namespace ```

سيؤدي هذا إلى إنشاء حساب خدمة جديد باسم `my-service-account` في namespace `my-namespace`. إذا لم تحدد namespace، فسيتم استخدام namespace الحالي.

ربط حساب خدمة بـ Pod

هناك طريقتان رئيسيتان لربط حساب خدمة بـ Pod:

  • في ملف Pod Definition (تعريف Pod): يمكنك تحديد حساب الخدمة الذي يجب استخدامه في ملف YAML الخاص بـ Pod.

```yaml apiVersion: v1 kind: Pod metadata:

 name: my-pod
 namespace: my-namespace

spec:

 serviceAccountName: my-service-account
 containers:
 - name: my-container
   image: my-image

```

  • باستخدام Annotations (التعليقات التوضيحية): يمكنك استخدام التعليقات التوضيحية لتعيين حساب خدمة لـ Pod.

```yaml apiVersion: v1 kind: Pod metadata:

 name: my-pod
 namespace: my-namespace
 annotations:
   kubernetes.io/service-account: my-service-account

spec:

 containers:
 - name: my-container
   image: my-image

```

منح الأذونات لحساب الخدمة باستخدام RBAC

بعد إنشاء حساب خدمة، تحتاج إلى منحها الأذونات اللازمة للوصول إلى موارد Kubernetes. يتم ذلك باستخدام RBAC.

  • إنشاء Role (دور): حدد الأذونات التي تريد منحها لحساب الخدمة.

```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:

 name: my-role
 namespace: my-namespace

rules: - apiGroups: [""]

 resources: ["pods"]
 verbs: ["get", "watch", "list"]

```

هذا الدور يسمح بحساب الخدمة بالحصول على قائمة بالـ Pods ومشاهدتها.

  • إنشاء RoleBinding (ربط الدور): اربط حساب الخدمة بالدور الذي تم إنشاؤه.

```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:

 name: my-rolebinding
 namespace: my-namespace

subjects: - kind: ServiceAccount

 name: my-service-account
 namespace: my-namespace

roleRef:

 kind: Role
 name: my-role
 apiGroup: rbac.authorization.k8s.io

```

هذا الربط يربط حساب الخدمة `my-service-account` بالدور `my-role`، مما يمنح حساب الخدمة الأذونات المحددة في هذا الدور.

مثال عملي: تطبيق يحتاج إلى قراءة Secrets

لنفترض أن لديك تطبيقاً يحتاج إلى قراءة بيانات سرية (Secrets) من Kubernetes. إليك كيفية تكوين حساب خدمة لمنح التطبيق هذا الوصول:

1. إنشاء حساب خدمة:

```bash kubectl create serviceaccount my-app-service-account -n my-namespace ```

2. إنشاء Role: امنح حساب الخدمة الإذن بقراءة Secrets.

```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:

 name: secret-reader
 namespace: my-namespace

rules: - apiGroups: [""]

 resources: ["secrets"]
 verbs: ["get", "watch", "list"]

```

3. إنشاء RoleBinding: اربط حساب الخدمة بالدور.

```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:

 name: my-app-rolebinding
 namespace: my-namespace

subjects: - kind: ServiceAccount

 name: my-app-service-account
 namespace: my-namespace

roleRef:

 kind: Role
 name: secret-reader
 apiGroup: rbac.authorization.k8s.io

```

4. ربط حساب الخدمة بـ Pod: حدد `serviceAccountName` في ملف تعريف Pod.

```yaml apiVersion: v1 kind: Pod metadata:

 name: my-app-pod
 namespace: my-namespace

spec:

 serviceAccountName: my-app-service-account
 containers:
 - name: my-app-container
   image: my-app-image

```

الآن، يمكن لـ Pod `my-app-pod` الوصول إلى Secrets في namespace `my-namespace` باستخدام حساب الخدمة `my-app-service-account`.

أفضل الممارسات لأمان حسابات الخدمة

  • استخدم أقل الامتيازات (Least Privilege): امنح حسابات الخدمة فقط الأذونات التي تحتاجها لأداء مهمتها. تجنب منح أذونات واسعة النطاق.
  • استخدم حسابات خدمة مخصصة (User-Defined Service Accounts): تجنب استخدام حساب الخدمة الافتراضي إلا إذا كان ذلك ضرورياً. إنشاء حسابات خدمة مخصصة يتيح لك التحكم بشكل أفضل في الأذونات.
  • راجع الأذونات بانتظام: تأكد من أن الأذونات الممنوحة لحسابات الخدمة لا تزال ضرورية. قم بإزالة أي أذونات غير ضرورية.
  • استخدم Pod Security Policies (سياسات أمان Pod): يمكن لـ Pod Security Policies تقييد الأذونات التي يمكن أن تطلبها Pods، مما يساعد على تحسين الأمان.

استكشاف الأخطاء وإصلاحها

  • التحقق من الأذونات: تأكد من أن حساب الخدمة لديه الأذونات اللازمة للوصول إلى الموارد التي يحتاجها. استخدم الأمر `kubectl auth can-i` للتحقق من الأذونات.
  • التحقق من ربط الدور: تأكد من أن حساب الخدمة مرتبط بالدور الصحيح. استخدم الأمر `kubectl get rolebindings` للتحقق من ربط الدور.
  • التحقق من ملف تعريف Pod: تأكد من أن ملف تعريف Pod يحدد حساب الخدمة الصحيح.
  • التحقق من السجلات: تحقق من سجلات Kubernetes بحثاً عن أي أخطاء تتعلق بالأذونات.

موارد إضافية

روابط لمفاهيم ذات صلة

روابط لاستراتيجيات الخيارات الثنائية وتحليلها

```

ابدأ التداول الآن

سجّل في IQ Option (الحد الأدنى للإيداع 10 دولار) افتح حساباً في Pocket Option (الحد الأدنى للإيداع 5 دولار)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin لتصلك: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات اتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер