ایک مختصر ٹیوٹوریل کہ کس طرح آپ Keycloak کا استعمال اپنے LDAP سرور سے Kubernetes کو جوڑنے اور صارفین اور گروپوں کی درآمد کو ترتیب دینے کے لیے کر سکتے ہیں۔ یہ آپ کو اپنے صارفین کے لیے RBAC کو کنفیگر کرنے اور Kubernetes ڈیش بورڈ اور دیگر ایپلیکیشنز کی حفاظت کے لیے auth-proxy استعمال کرنے کی اجازت دے گا جو خود تصدیق نہیں کر سکتے۔
کی کلوک کی تنصیب
آئیے فرض کریں کہ آپ کے پاس پہلے سے ہی LDAP سرور موجود ہے۔ یہ ایکٹو ڈائریکٹری، فری آئی پی اے، اوپن ایل ڈی اے پی یا کوئی اور چیز ہوسکتی ہے۔ اگر آپ کے پاس LDAP سرور نہیں ہے، تو اصولی طور پر آپ Keycloak انٹرفیس میں براہ راست صارفین بنا سکتے ہیں، یا عوامی oidc فراہم کنندگان (Google, Github, Gitlab) کا استعمال کر سکتے ہیں، نتیجہ تقریباً ایک جیسا ہوگا۔
سب سے پہلے، آئیے Keycloak خود انسٹال کرتے ہیں۔ انسٹالیشن الگ سے یا براہ راست کسی Kubernetes کلسٹر میں کی جا سکتی ہے۔ ایک اصول کے طور پر، اگر آپ کے پاس کئی Kubernetes کلسٹرز ہیں، تو اسے الگ سے انسٹال کرنا آسان ہوگا۔ دوسری طرف آپ ہمیشہ استعمال کر سکتے ہیں۔
Keycloak ڈیٹا کو ذخیرہ کرنے کے لیے آپ کو ایک ڈیٹا بیس کی ضرورت ہوگی۔ پہلے سے طے شدہ ہے۔ h2
(تمام ڈیٹا مقامی طور پر ذخیرہ کیا جاتا ہے)، لیکن اسے استعمال کرنا بھی ممکن ہے۔ postgres
, mysql
یا mariadb
.
اگر آپ اب بھی Keycloak کو الگ سے انسٹال کرنے کا فیصلہ کرتے ہیں، تو آپ کو مزید تفصیلی ہدایات ملیں گی۔
فیڈریشن سیٹ اپ
سب سے پہلے، آئیے ایک نیا دائرہ بنائیں۔ دائرہ ہماری درخواست کی جگہ ہے۔ ہر ایپلیکیشن کا اپنا دائرہ مختلف صارفین اور اجازت کی ترتیبات کے ساتھ ہوسکتا ہے۔ ماسٹر دائرے کو Keycloak خود استعمال کرتا ہے اور اسے کسی اور چیز کے لیے استعمال کرنا غلط ہے۔
دھکا دائرہ شامل کریں۔
اختیار
قدر
نام
kubernetes
ڈسپلے نام
Kubernetes
HTML ڈسپلے کا نام
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes بطور ڈیفالٹ چیک کرتا ہے کہ آیا صارف کے ای میل کی تصدیق ہوئی ہے یا نہیں۔ چونکہ ہم اپنا LDAP سرور استعمال کرتے ہیں، اس لیے یہ چیک تقریباً ہمیشہ واپس آتا ہے۔ false
. آئیے Kubernetes میں اس اختیار کی نمائندگی کو غیر فعال کرتے ہیں:
کلائنٹ کے دائرہ کار -> دوستوں کوارسال کریں -> میپرز -> ای میل کی تصدیق ہو گئی۔ (حذف کریں)
اب فیڈریشن قائم کرتے ہیں؛ ایسا کرنے کے لیے، جائیں:
صارف فیڈریشن -> فراہم کنندہ شامل کریں… -> ایل ڈی اے پی
یہاں FreeIPA کی ترتیبات کی ایک مثال ہے:
اختیار
قدر
کنسول ڈسپلے کا نام
freeipa.example.org
وینڈر
Red Hat Directory Server
UUID LDAP وصف
ipauniqueid
کنکشن URL
ldaps://freeipa.example.org
صارفین ڈی این
cn=users,cn=accounts,dc=example,dc=org
DN باندھو۔
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
سند کو باندھیں۔
<password>
Kerberos کی توثیق کی اجازت دیں:
on
کربروس دائرہ:
EXAMPLE.ORG
سرور پرنسپل:
HTTP/[email protected]
کلیدی ٹیب:
/etc/krb5.keytab
صارف keycloak-svc
ہمارے LDAP سرور پر پہلے سے تخلیق کرنے کی ضرورت ہے۔
ایکٹو ڈائریکٹری کے معاملے میں، آپ کو صرف منتخب کرنے کی ضرورت ہے۔ وینڈر: ایکٹو ڈائریکٹری اور ضروری ترتیبات خود بخود فارم میں داخل ہو جائیں گی۔
دھکا محفوظ کریں
اب آگے بڑھتے ہیں:
صارف فیڈریشن -> freeipa.example.org -> میپرز -> پہلا نام
اختیار
قدر
Ldap وصف
givenName
اب گروپ میپنگ کو فعال کریں:
صارف فیڈریشن -> freeipa.example.org -> میپرز -> تخلیق کریں
اختیار
قدر
نام
groups
میپر کی قسم
group-ldap-mapper
LDAP گروپس DN
cn=groups,cn=accounts,dc=example,dc=org
یوزر گروپس کی بازیافت کی حکمت عملی
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
اب جب کہ فیڈریشن سیٹ اپ مکمل ہو گیا ہے، آئیے کلائنٹ کو ترتیب دینے کی طرف بڑھتے ہیں۔
کلائنٹ سیٹ اپ
آئیے ایک نیا کلائنٹ بنائیں (ایک ایسی ایپلی کیشن جو صارفین کو Keycloak سے وصول کرے گی)۔ آئیے آگے بڑھتے ہیں:
کلائنٹ -> تخلیق کریں
اختیار
قدر
کلائنٹ کی شناخت
kubernetes
رسائی کی قسم
confidenrial
روٹ یو آر ایل
http://kubernetes.example.org/
درست ری ڈائریکٹ URIs
http://kubernetes.example.org/*
ایڈمن یو آر ایل
http://kubernetes.example.org/
آئیے گروپس کے لیے ایک گنجائش بھی بنائیں:
کلائنٹ کے دائرہ کار -> تخلیق کریں
اختیار
قدر
سانچہ
No template
نام
groups
مکمل گروپ کا راستہ
false
اور ان کے لیے میپر مرتب کریں:
کلائنٹ کے دائرہ کار -> گروہوں -> میپرز -> تخلیق کریں
اختیار
قدر
نام
groups
میپر کی قسم
Group membership
ٹوکن کلیم کا نام
groups
اب ہمیں اپنے کلائنٹ کے دائرہ کار میں میپنگ گروپ کو فعال کرنے کی ضرورت ہے:
کلائنٹ -> کبرنیٹس -> کلائنٹ کے دائرہ کار -> ڈیفالٹ کلائنٹ کے دائرہ کار
منتخب کریں گروہوں в دستیاب کلائنٹ کے دائرہ کار، دبائیں منتخب شامل کریں۔
اب آئیے اپنی درخواست کی توثیق کو ترتیب دیں، یہاں جائیں:
کلائنٹ -> کبرنیٹس
اختیار
قدر
اجازت نامہ فعال ہے۔
ON
چلو دبائیں بچانے اور اس کے ساتھ کلائنٹ سیٹ اپ مکمل ہو گیا، اب ٹیب پر
کلائنٹ -> کبرنیٹس -> اسناد
آپ حاصل کر سکتے ہیں خفیہ جسے ہم مزید استعمال کریں گے۔
Kubernetes کو ترتیب دینا
OIDC کی اجازت کے لیے Kubernetes کو ترتیب دینا کافی معمولی بات ہے اور زیادہ پیچیدہ نہیں ہے۔ آپ کو بس اپنے OIDC سرور کا CA سرٹیفکیٹ داخل کرنے کی ضرورت ہے۔ /etc/kubernetes/pki/oidc-ca.pem
اور kube-apiserver کے لیے ضروری اختیارات شامل کریں۔
ایسا کرنے کے لیے، اپ ڈیٹ کریں۔ /etc/kubernetes/manifests/kube-apiserver.yaml
آپ کے تمام آقاؤں پر:
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
نیز، کلسٹر میں kubeadm config کو اپ ڈیٹ کریں تاکہ اپ ڈیٹ کرتے وقت یہ سیٹنگز ضائع نہ ہوں:
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
یہ Kubernetes سیٹ اپ کو مکمل کرتا ہے۔ آپ ان اقدامات کو اپنے تمام Kubernetes کلسٹرز میں دہرا سکتے ہیں۔
ابتدائی اجازت
ان اقدامات کے بعد، آپ کے پاس پہلے سے ہی ایک Kubernetes کلسٹر ہوگا جس میں ترتیب شدہ OIDC کی اجازت ہوگی۔ صرف ایک چیز یہ ہے کہ آپ کے صارفین کے پاس ابھی تک کنفیگر شدہ کلائنٹ یا ان کی اپنی kubeconfig نہیں ہے۔ اس مسئلے کو حل کرنے کے لیے، آپ کو کامیاب اجازت کے بعد صارفین کو kubeconfig کی خودکار تقسیم کو ترتیب دینے کی ضرورت ہے۔
ایسا کرنے کے لیے، آپ خصوصی ویب ایپلی کیشنز استعمال کر سکتے ہیں جو آپ کو صارف کی تصدیق کرنے اور پھر ریڈی میڈ kubeconfig ڈاؤن لوڈ کرنے کی اجازت دیتی ہیں۔ سب سے زیادہ آسان میں سے ایک ہے
Kuberos کو ترتیب دینے کے لیے، صرف kubeconfig کے لیے ٹیمپلیٹ کی وضاحت کریں اور اسے درج ذیل پیرامیٹرز کے ساتھ چلائیں۔
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
مزید تفصیلی معلومات کے لیے دیکھیں
اس کا استعمال بھی ممکن ہے۔
نتیجے میں kubeconfig ویب سائٹ پر چیک کیا جا سکتا ہے users[].user.auth-provider.config.id-token
اپنے kubeconfig سے ویب سائٹ پر فارم تک اور فوری طور پر ایک ٹرانسکرپٹ وصول کریں۔
آر بی اے سی کو ترتیب دیا جا رہا ہے۔
RBAC کو ترتیب دیتے وقت، آپ دونوں صارف نام (فیلڈ name
jwt ٹوکن میں)، اور فی صارف گروپ (فیلڈ groups
jwt ٹوکن میں)۔ یہاں ایک گروپ کے حقوق قائم کرنے کی ایک مثال ہے۔ kubernetes-default-namespace-admins
:
kubernetes-default-namespace-admins.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: default-admins
namespace: default
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-default-namespace-admins
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: default-admins
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: kubernetes-default-namespace-admins
RBAC کے لیے مزید مثالیں مل سکتی ہیں۔
auth-proxy سیٹ کرنا
ایک شاندار منصوبہ ہے۔
dashboard-proxy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kubernetes-dashboard-proxy
spec:
replicas: 1
template:
metadata:
labels:
app: kubernetes-dashboard-proxy
spec:
containers:
- args:
- --listen=0.0.0.0:80
- --discovery-url=https://keycloak.example.org/auth/realms/kubernetes
- --client-id=kubernetes
- --client-secret=<your-client-secret-here>
- --redirection-url=https://kubernetes-dashboard.example.org
- --enable-refresh-tokens=true
- --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh
- --upstream-url=https://kubernetes-dashboard.kube-system
- --resources=uri=/*
image: keycloak/keycloak-gatekeeper
name: kubernetes-dashboard-proxy
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
readinessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard-proxy
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: kubernetes-dashboard-proxy
type: ClusterIP
ماخذ: www.habr.com