Kubernetes
وفقًا لـوثائق Kubernetes، يمكن المصادقة على خادم API Kubernetes باستخدام OpenID Connect (OIDC). سيوجهك هذا المقال حول كيفية تكوين المصادقة في Kubernetes باستخدام Casdoor.
متطلبات البيئة
قبل البدء، يرجى التأكد من أن لديك البيئة التالية:
- مجموعة Kubernetes.
- تطبيق Casdoor مثل هذا موقع العرض التوضيحي.
- أداة الأمر kubectl (اختياري).
يقبل Kubernetes oidc-issuer-url
العناوين التي تستخدم بادئة https://
فقط. لذا يجب أن يتم نشر تطبيق Casdoor الخاص بك على موقع ويب HTTPS.
الخطوة 1: إنشاء تطبيق Casdoor وحساب مستخدم للمصادقة
انتقل إلى تطبيق Casdoor الخاص بك وأضف تطبيقًا جديدًا يسمى Kubernetes. يرجى تذكر Name
، Organization
، client ID
، client Secret
، وأضف بعض أنواع الإذن إلى هذا التطبيق.
بعد ذلك، أضف مستخدمًا جديدًا إلى التطبيق الذي أنشأته للتو. يرجى ملاحظة أن Organization
و Signup application
المستخدمة هنا يجب أن تتوافق مع التطبيق المسجل سابقًا.
الخطوة 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