ما از Kubernetes برای ایجاد محیط های پویا برای تیم توسعه و QA استفاده می کنیم. بنابراین میخواهیم به آنها برای داشبورد و کوبکتل دسترسی به کلاستر بدهیم. برخلاف همان OpenShift، Vanilla Kubernetes احراز هویت بومی ندارد، بنابراین ما از ابزارهای شخص ثالث برای این کار استفاده می کنیم.
GitHub - صرفاً به این دلیل که ما از GitHub در شرکت خود استفاده می کنیم
ما سعی کردیم از Google OIDC استفاده کنیم، اما متاسفانه ما شکست خورده برای شروع آنها با گروه ها، بنابراین ادغام با GitHub به خوبی برای ما مناسب است. بدون نگاشت گروهی، ایجاد خط مشی های RBAC مبتنی بر گروه امکان پذیر نخواهد بود.
بنابراین، فرآیند مجوز Kubernetes ما در یک نمایش بصری چگونه کار می کند:
فرآیند مجوز
کمی جزئیات بیشتر و نکته به نقطه:
ورود کاربر به dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator درخواست را به Dex هدایت می کند (dex.k8s.example.com)
Dex به صفحه ورود به سیستم GitHub هدایت می شود
GitHub اطلاعات مجوز مورد نیاز را تولید می کند و آن را به Dex برمی گرداند
Dex اطلاعات دریافتی را به dex-k8s-authenticator ارسال می کند
کاربر رمز OIDC را از GitHub دریافت می کند
dex-k8s-authenticator توکن را به kubeconfig اضافه می کند
kubectl توکن را به KubeAPIServer ارسال می کند
KubeAPIServer بر اساس توکن ارسال شده، دسترسی به kubectl را برمیگرداند
دسترسی کاربر از kubectl
اقدامات مقدماتی
البته، ما قبلاً یک خوشه Kubernetes نصب کرده ایم (k8s.example.com) و همچنین HELM از پیش نصب شده است. ما همچنین یک سازمان در GitHub (super-org) داریم.
اگر HELM ندارید، آن را نصب کنید بسیار ساده.
ابتدا باید GitHub را راه اندازی کنیم.
به صفحه تنظیمات سازمان بروید، (https://github.com/organizations/super-org/settings/applications) و یک برنامه جدید ایجاد کنید (Authorized OAuth App):
یک برنامه جدید در GitHub ایجاد کنید
فیلدها را با URL های مورد نیاز پر کنید، به عنوان مثال:
آدرس صفحه اصلی: https://dex.k8s.example.com
URL بازگشت به تماس مجوز: https://dex.k8s.example.com/callback
مراقب پیوندها باشید، مهم است که اسلش ها را از دست ندهید.
در پاسخ به فرم تکمیل شده، GitHub تولید خواهد کرد Client ID и Client secret، آنها را در مکانی امن ذخیره کنید، برای ما مفید خواهند بود (مثلاً استفاده می کنیم طاق برای حفظ اسرار):
به صفحه ورود برویدhttps://login.k8s.example.com) و با یک حساب GitHub وارد شوید:
صفحه مجوز
صفحه مجوز به GitHub هدایت شد
دستورالعمل های تولید شده را دنبال کنید تا دسترسی داشته باشید
پس از کپی پیست از صفحه وب، می توانیم از kubectl برای مدیریت منابع خوشه خود استفاده کنیم:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
و کار می کند، همه کاربران GitHub در سازمان ما می توانند منابع را ببینند و به پادها وارد شوند، اما اجازه تغییر آنها را ندارند.