التخطي إلى المحتوى الرئيسي

Kubernetes

وفقًا لـوثائق Kubernetes، يمكن المصادقة على خادم API Kubernetes باستخدام OpenID Connect (OIDC). سيوجهك هذا المقال حول كيفية تكوين المصادقة في Kubernetes باستخدام Casdoor.

متطلبات البيئة

قبل البدء، يرجى التأكد من أن لديك البيئة التالية:

ملاحظة

يقبل Kubernetes oidc-issuer-url العناوين التي تستخدم بادئة https:// فقط. لذا يجب أن يتم نشر تطبيق Casdoor الخاص بك على موقع ويب HTTPS.

الخطوة 1: إنشاء تطبيق Casdoor وحساب مستخدم للمصادقة

انتقل إلى تطبيق Casdoor الخاص بك وأضف تطبيقًا جديدًا يسمى Kubernetes. يرجى تذكر Name، Organization، client ID، client Secret، وأضف بعض أنواع الإذن إلى هذا التطبيق.

إنشاء تطبيق في Casdoor أنواع الإذن

بعد ذلك، أضف مستخدمًا جديدًا إلى التطبيق الذي أنشأته للتو. يرجى ملاحظة أن Organization و Signup application المستخدمة هنا يجب أن تتوافق مع التطبيق المسجل سابقًا.

إضافة مستخدم في Casdoor

الخطوة 2: تكوين خادم API Kubernetes مع مصادقة OIDC

لتمكين الإضافة OIDC، تحتاج إلى تكوين العلامات التالية على خادم API:

  • --oidc-issuer-url: عنوان URL للمزود الذي يسمح لخادم API باكتشاف مفاتيح التوقيع العامة.
  • --oidc-client-id: معرف عميل يجب إصدار جميع الرموز له.

يستخدم هذا المقال minikube للعرض التوضيحي. يمكنك تكوين الإضافة OIDC لخادم API minikube باستخدام الأمر التالي عند البدء:

minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe

الخطوة 3: اختبار مصادقة OIDC

الحصول على معلومات المصادقة

بسبب عدم وجود واجهة أمامية في kubectl، يمكن إجراء المصادقة عن طريق إرسال طلب POST إلى خادم Casdoor. إليك الكود بلغة Python الذي يرسل طلب POST إلى خادم Casdoor ويسترجع id_token و refresh_token:

import requests
import json

url = "https://demo.casdoor.com/api/login/oauth/access_token"
payload = json.dumps({
"grant_type": "password",
"client_id": "Kubernetes",
"client_secret": "72c65c3912aec24a9f3ec41b65a7577114ed2bae",
"username": "user_3u94sf",
"password": "123456"
})
response = requests.request("POST", url, data=payload)

print(response.text)

بعد تنفيذ هذا الكود، يجب أن تتلقى استجابة مشابهة لما يلي:

{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}

الآن، يمكنك استخدام id_token الذي حصلت عليه للتو للمصادقة مع خادم API Kubernetes.

المصادقة المعتمدة على طلب HTTP

أضف الرمز المميز إلى رأس الطلب.

curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
  • https://www.xxx.com هو عنوان نشر خادم API Kubernetes.

المصادقة المعتمدة على أداة Kubectl Client

طريقة ملف التكوين

اكتب التكوين التالي في ملف ~/.kube/config. يجب استبدال كل عنصر تكوين في ملف التكوين أعلاه بالقيم التي حصلت عليها سابقًا.

users:
- name: minikube
user:
auth-provider:
config:
client-id: Kubernetes
client-secret: 72c65c3912aec24a9f3ec41b65a7577114ed2bae
id-token: $(id_token)
idp-issuer-url: https://demo.casdoor.com
refresh-token: $(refresh_token)
name: oidc

الآن، يمكنك الوصول مباشرة إلى خادم API الخاص بك باستخدام kubectl. جرب تشغيل أمر اختبار.

kubectl cluster-info

طريقة وسيطة سطر الأوامر

بدلاً من ذلك، يمكنك المصادقة عن طريق إضافة id_token مباشرة إلى معلمات سطر الأوامر لأداة kubectl.

kubectl --token=$(id_token) cluster-info